Perf性能分析工具
Perf 是Linux kernel自带的系统性能优化工具。 Perf的优势在于与Linux Kernel的紧密结合,它可以最先应用到加入Kernel的new feature。pef可以用于查看热点函数,查看cashe miss的比率,从而帮助开发者来优化程序性能,也可以分析程序运行期间发生的硬件事件,比如 instructions retired ,processor clock cycles 等;您也可以分析
软件事件,比如 Page Fault 和进程切换,这使得 Perf 拥有了众多的性能分析能力,
通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。
举例来说,使用 Perf 可以计算每个时钟周期内的指令数,称为 IPC,IPC 偏低表明代码没有很好地利用 CPU。Perf 还可以对程序进行函数级别的采样,从而了解程序的性能瓶颈究竟在哪里等等。Perf 还可以替代 strace,可以添加动态内核 probe 点,还可以做 benchmark 衡量调度器的好坏。
sudo perf list
列出所有采样事件
perf stat -p [port]
在中断执行
perf top -g
实时显示当前系统的性能统计信息
perf record
记录采集的数据:-F 每秒采样99个;-g表示记录程序的调用栈;-e 可选择采样事;
perf record -p 进程号 -F 99 --call-graph dwarf -- sleep 10
记录
如果只使用了sudo perf report
可以查看当前perf.data的数据,但是当你代码调用很多时候不好进行分析查看,这个时候我们就可以选择我们需要关注的重点信息查看,提高效率。例如以下的futex_wait:
选中之后,使用
sudo perf report --call-graph ,,,,callee --symbol-filter=**futex_wait**
后面增加你需要筛选监控的类型就可以单独显示了。