pref是一款内置的性能分析工具,一般可用于性能瓶颈分析
比如内核消耗cpu高,具体是哪块代码,某个内核函数调用频率是多少等等

perf常用命令:

  1. perf list
  2. perf stat
  3. perf top
  4. perf record/report

perf list

查看当前perf可用的事件

  1. cpu-cycles:统计cpu周期数,cpu周期:指一条指令的操作时间。
  2. instructions 机器指令数目
  3. cache-references cache命中次数
  4. cache-misses cache失效次数
  5. branch-instructions 分支预测成功次数
  6. branch-misses 分支预测失败次数
  7. alignment-faults 统计内存对齐错误发生的次数, 当访问的非对齐的内存地址时,内核会进行处理,已保存不会发生问题,但会降低性能
  8. context-switches 上下文切换次数,
  9. cpu-clock cpu clock的统计,每个cpu都有一个高精度定时器
  10. task-clock cpu clock中有task运行的统计
  11. cpu-migrations:进程运行过程中从一个cpu迁移到另一cpu的次数
  12. page-faults 页错误的统计
  13. major-faults:页错误,内存页已经被swap到硬盘上,需要I/O换回
  14. minor-faults :页错误,内存页在物理内存中,只是没有和逻辑页进行映射

perf stat

分析程序的整体消耗情况

  1. $ perf stat ls
  2. Performance counter stats for 'ls':
  3. 0.68 msec task-clock # 0.545 CPUs utilized
  4. 6 context-switches # 0.009 M/sec
  5. 0 cpu-migrations # 0.000 K/sec
  6. 99 page-faults # 0.145 M/sec
  7. <not supported> cycles
  8. <not supported> instructions
  9. <not supported> branches
  10. <not supported> branch-misses
  11. 0.001249473 seconds time elapsed
  12. 0.000000000 seconds user
  13. 0.000884000 seconds sys
  1. task-clock (msec): cpu处理task所消耗的时间,单位ms
  2. 0.545 CPUs utilized:表示cpu使用率为54.5%
  3. instructions:执行的指令条数
  4. stalled-cycles-frontendstalled-cycles-backend:表示CPU停滞统计

perf top

实时的查看当前系统各个进程的各个函数的性能计数分析

  1. -e:统计特定的event
  2. -g:得到函数的调用关系图
  3. -p:分析特定的进程
  4. -d:刷新周期,默认2s
  5. perf top -g -p <pid>

perf record

perf report

对已运行的进程进行性能分析,并将分析结果输出到perf.data中,通过perf report进行分析

  1. perf record -g -p <pid>
  2. perf report