perf 高级命令简介

perf 高级命令简介

1.使用 tracepoint

当 perf 根据 tick 时间点进行采样后,人们便能够得到内核代码中的 hot spot。

使用ls命令来演示 sys_enter 这个tracepoint 的使用。

perf stat -e raw_syscalls:sys_enter ls // 

perf record -e raw_syscalls:sys_enter ls

perf report

2.perf probe

tracepoint 是静态检查点,使用probe插入动态检测点。

perf probe schedule:12 cpu //在内核函数 schedule() 的第 12 行处加入了一个动态 probe 点,和 tracepoint 的功能一样,内核一旦运行到该 probe 点时,便会通知 perf。可以理解为动态增加了一个新的 tracepoint。

perf record -e probe:schedule -a sleep 1

perf report

3.Perf sched

Perf sched 有五个子命令:

perf sched record            # low-overhead recording of arbitrary workloads

perf sched latency           # output per task latency metrics

perf sched map             # show summary/map of context-switching

perf sched trace             # output finegrained trace

perf sched replay         # replay a captured workload using simlated threads

用户一般使用 perf sched record 收集调度相关的数据,然后就可以用 perf sched latency 查看诸如调度延迟等和调度器相关的统计数据。

perf sched record sleep 10     # record full system activity for 10 seconds

perf sched latency --sort max  # report latencies sorted by max

如果说 map 提供了高度概括的总体的报告,那么 trace 就提供了最详细,最底层的细节报告。

其它测试调度器性能的命令略。

4.perf lock

5.perf Kmem

Perf Kmem 专门收集内核 slab 分配器的相关事件。比如内存分配,释放等。可以用来研究程序在哪里分配了大量内存,或者在什么地方产生碎片之类的和内存管理相关的问题。

Perf kmem 和 perf lock 实际上都是 perf tracepoint 的特例,您也完全可以用 Perf record -e kmem:* 或者 perf record -e lock:* 来完成同样的功能。但重要的是,这些工具在内部对原始数据进行了汇总和分析,因而能够产生信息更加明确更加有用的统计报表。

6.Perf timechart

perf timechart detail

7.使用 Script 增强 perf 的功能

perf 的输出虽然是文本格式,但还是不太容易分析和阅读。往往也需要进一步处理,perl 和 python 是目前最强大的两种脚本语言。Tom Zanussi 将 perl 和 python 解析器嵌入到 perf 程序中,从而使得 perf 能够自动执行 perl 或者 python 脚本进一步进行处理,从而为 perf 提供了强大的扩展能力。因为任何人都可以编写新的脚本,对 perf 的原始输出数据进行所需要的进一步处理。这个特性所带来的好处很类似于 plug-in 之于 eclipse。

perf trace -l

perf trace record failed-syscalls

原文

http://www.ibm.com/developerworks/cn/linux/l-cn-perf2/

其它文章:

http://lwn.net/Articles/373842/

http://lwn.net/Articles/339361/

http://lwn.net/Articles/353295/

posted @ 2013-07-27 23:12  浪里飞  阅读(2931)  评论(0)    收藏  举报