系统级性能分析工具perf的介绍与使用 - ArnoldLu - 博客园
上面的文章非常全面,质量很高。基本上够用。
perf top 看函数排名
perf top可以实时查看当前系统进程函数占用率情况;
可以看出进程内哪个函数消耗资源比较多。htop就不能告诉你是哪个函数。
第一列:符号引发的性能事件的比例,指占用的cpu周期比例。
第二列:符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块。
第三列:DSO的类型。[.]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库;[k]表述此符号属于内核或模块。
第四列:符号名。有些符号不能解析为函数名,只能用地址表示。
pref record记录
pref record记录信息到perf.data;
执行这个命令的时候,只需要输入:pref record 回车即可。
程序会自动运行,并直接在当前目录实时写入一个叫perf.data的文件。Ctrl+C退出该程序的时候,会提示你perf.data已经生成,并有多大。
-e record指定PMU事件
--filter event事件过滤器
-a 录取所有CPU的事件
-p 录取指定pid进程的事件
-o 指定录取保存数据的文件名
-g 使能函数调用图功能
-C 录取指定CPU的事件
上面使用了 -a -g 参数执行当前目录下的my_exe程序。程序my_exe会正常执行,并正常输出内容到控制台。perf会在后台执行,并在当前目录下生成perf.data文件。
perf report
查看记录报告perf report
在perf.data所在的文件夹输出命令perf report就可以看perf.data中的内容。和perf top看到的内容格式一样。
perf bench
perf bench mem:内存存取性能。包含memcpy和memset两个功能。
perf bench mem all 同时测试memcpy 和memset两个函数的性能。
这个函数就是运行一次测试程序,比如用memcpy拷贝1MB数据,看看花了多少时间。如果这时候有其他程序在运行,并且也用了memcpy,加上进程,线程调度。这个测试程序执行的时间会变长,得到的性能就会低。