perf使用场景
perf工具可以监控性能监控单元(PMU),记录和监控各种硬件和软件事件,各种trace点,kprobes和uprobes。
常见perf命令
- perf stat
- perf record
- perf report
- perf list
- perf top
- perf trace
- perf help
perf top
类似于linux系统中的top命令,按照占用cpu时间的比例进行排序,
perf stat
记录进程执行期间的硬件和软件事件,若未指定事件,perf stat会计算一组通用的硬件和软件事件。
Performance counter stats for 'ls':
1.79 msec task-clock # 0.148 CPUs utilized
2 context-switches # 1.117 K/sec
0 cpu-migrations # 0.000 /sec
101 page-faults # 56.403 K/sec
3,665,660 cycles # 2.047 GHz (76.65%)
3,185,754 instructions # 0.87 insn per cycle
585,038 branches # 326.711 M/sec
22,134 branch-misses # 3.78% of all branches (23.35%)
0.012092252 seconds time elapsed
0.002810000 seconds user
0.000000000 seconds sys
perf record
perf record --call-graph method command
method可选: fp:使用帧指针方法。 dwarf:使用DWARF Call Frame信息来unwind堆栈。 lbr:使用intel处理器上最后分支记录硬件。
perf report
火焰图
火焰图看起来就像跳动的火焰, 横轴表示采样数和采样比例:一个函数占用的横轴越宽,就代表它的执行时间越长,同一层的多个函数,则是按照字母来排序。 纵轴表示调用栈:由下向上根据调用关系逐个展开。
火焰图的分类
- on-CPU火焰图:表示CPU的繁忙程度,用在CPU使用率比较高的场景中。
- off-CPU火焰图:表示CPU等待I/O,锁等各种资源的阻塞情况。
- 内存火焰图:表示内存的分配和释放情况。
- 热/冷火焰图:表示将on-CPU和off-CPU结合在一起综合展示。
- 差分火焰图:表示两个火焰图的差分情况,红色表示增长,蓝色表示衰减。