linu perf使用经验之一二
perf是一个非常强大的工具,之前听说但一直没有怎么用过。现在记录下来以便事后查找。
编译
除了从包管理器中安装,还可以从源代码里直接编译。
非常简单,clone好内核源代码.
cd linux/tools/perf
make
怎么样, so easy吧。
开跑
哥是个急性子,别的先不想管,先看看这个东西能跑成什么样子。估计各位看官也是差不多,那咱就先跑几个来先看看。
看看程序总体情况
假如你有个程序,想看看这个程序有没有可以优化的点。那就要先看看这个程序的运行时间都是分配在哪些函数上了。然后在做进一步的优化。
perf stat ./your_program
Performance counter stats for './your_program':
254.098794 task-clock # 0.997 CPUs utilized
21 context-switches # 0.083 K/sec
6 cpu-migrations # 0.024 K/sec
86 page-faults # 0.338 K/sec
774,758,136 cycles # 3.049 GHz
554,772,168 stalled-cycles-frontend # 71.61% frontend cycles idle
26,055,211 stalled-cycles-backend # 3.36% backend cycles idle
550,801,917 instructions # 0.71 insns per cycle
# 1.01 stalled cycles per insn
110,128,040 branches # 433.406 M/sec
7,007 branch-misses # 0.01% of all branches
0.254960900 seconds time elapsed
具体每个细节暂时搞不懂,先放着。知道是做什么的一个大概,以后用的时候再来看。
看看系统总体情况
有时候是整个系统出现了瓶颈,想要调试。那就要先看看整体系统到底哪里运行的比较多。
perf top
================================================================================
list the processes with their cpu utilization
6.92% libc-2.13.so [.] 0x0007aa67
2.99% perf [.] symbols__insert
2.93% perf [.] symbol_filter
2.79% libxul.so [.] 0x0088efc3
2.68% [kernel] [k] aes_decrypt
2.14% libflashplayer.so [.] 0x003442f4
1.86% perf [.] rb_next
1.54% chromium-browser [.] 0x01363b5f
perf的事件构成
留着看看,反正也不懂
所有perf能够捕捉的事件可以运行
perf list
来得到。
Reference
Linux Perf Examples 感觉这个讲的还比较全面