当前位置: 首页 > 工具软件 > OProfile > 使用案例 >

ppc linux 性能,用profile和oprofile监视视linux性能!

解鸿运
2023-12-01

profile使用:

profile功能是架构无关的,可以用来监视linux内核的4项功能,即:

11 #define CPU_PROFILING   1

12 #define SCHED_PROFILING 2

13 #define SLEEP_PROFILING 3

14 #define KVM_PROFILING   4

要想找开profile功能,除了要在menuconfig中打开支持选项外,还要在命令行加上profile=**,##.

**表示上述4种功能之一,##表示一个数字,用来表示监视的颗粒度,越小越细。

当做了这些工作之后还需要用到util linux工具中的readprofile来读取结果,结果是从/proc/profile文件中读取的,此工具做了格式化处理。以下为转载:

1. 如何使用profile:

首先确认内核支持profile,然后在内核启动时加入以下参数:profile=1或者其它参数, 新的内核支持profile=schedule,1

2. 内核启动后会创建/proc/profile文件,这个文件可以通过readprofile读取,

如readprofile -m /proc/kallsyms | sort -nr > ~/cur_profile.log,

或者readprofile -r -m /proc/kallsyms |sort -nr,

或者readprofile -r && sleep 1 && readprofile -m /proc/kallsyms |sort -nr >~/cur_profile.log

3. 读取/proc/profile可获得哪些内容?

根据启动配置profile=?的不同,获取的内容不同:

如果设置成profile=schedule可以获得每个函数调用schedule的次数,用来调试schedule很有用

profile的实现:

在内核中创建一个/proc/profile接口,在系统启动时用profile_init()分配好存放profile信息的内存,每条指令都有一个计数器。

如果设置的是profile=2 统计每条指令执行的次数。在时钟中断中调用        profile_tick(CPU_PROFILING,

regs),将当前指令regs->eip的计数值+1。这个统计有点不准,因为一个jiffies之间,可能执行很多函数,而统计的只是恰好发生

时钟中断时的那个函数。但取样点多了,这些信息还是能说明问题。

如果设置的是profile=schedule 统计每个指令调用schedule()的次数,在schedule()中调用profile_hit(SCHED_PROFILING, __builtin_return_address(0));

其实真正调用schedule的指令只有有限的几个,但这些信息可以获得调度点的精确信息。

profile_hit()的作用是将当前指令的计数值加1

profile_tick()是在每个时钟tick的时候将响应的指令计数值加1

time_hook 一般被其它profile工具,如oprofile用来在每次中断发生时,添加自己的处理函数。

profile信息其实包括任务的所有统计信息,所以可以用profile_event_register()在任务退出或者用户空间内存释放时,挂载自己的回调函数,以统计这些信息。

profile信息的统计在smp和up下不同,即profile_hit的实现不同,smp的实现中有一个PerCPU cache,这可避免多个CPU在profile统计时效率低下问题。具体可以察看源代码kernel/profile.c

oprofile使用:

oprofile平台相关工具,请注意自己平台支持的event.

 类似资料: