性能分析工具perf的使用

时间:2022-02-18 14:29:09
perf使用介绍 性能分析工具perf的使用
性能分析工具perf的使用 task-clock:任务真正占用的处理器时间,单位为ms。CPUs utilized = task-clock / time elapsed,CPU的占用率。 context-switches:上下文的切换次数。 CPU-migrations:处理器迁移次数。Linux为了维持多个处理器的负载均衡,在特定条件下会将某个任务从一个CPU迁移到另一个CPU。 page-faults:缺页异常的次数。当应用程序请求的页面尚未建立、请求的页面不在内存中,或者请求的页面虽然在内存中,但物理地址和虚拟地址的映射关系尚未建立时,都会触发一次缺页异常。另外TLB不命中,页面访问权限不匹配等情况也会触发缺页异常。 cycles:消耗的处理器周期数。如果把被ls使用的cpu cycles看成是一个处理器的,那么它的主频为2.486GHz。 可以用cycles / task-clock算出。 stalled-cycles-frontend:略过。 stalled-cycles-backend:略过。 instructions:执行了多少条指令。IPC为平均每个cpu cycle执行了多少条指令。 branches:遇到的分支指令数。branch-misses是预测错误的分支指令数。 (2) 常用参数 -p:stat events on existing process id (comma separated list). 仅分析目标进程及其创建的线程。 -a:system-wide collection from all CPUs. 从所有CPU上收集性能数据。 -r:repeat command and print average + stddev (max: 100). 重复执行命令求平均。 -C:Count only on the list of CPUs provided (comma separated list), 从指定CPU上收集性能数据。 -v:be more verbose (show counter open errors, etc), 显示更多性能数据。 -n:null run - don't start any counters,只显示任务的执行时间 。 -x SEP:指定输出列的分隔符。 -o file:指定输出文件,--append指定追加模式。 --pre <cmd>:执行目标程序前先执行的程序。 --post <cmd>:执行目标程序后再执行的程序。
perf top -p 35338 第一列:符号引发的性能事件的比例,默认指占用的cpu周期比例。 第二列:符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块。 第三列:DSO的类型。[.]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库)。[k]表述此符号属于内核或模块。 第四列:符号名。有些符号不能解析为函数名,只能用地址表示。   (2) 常用交互命令 h:显示帮助 UP/DOWN/PGUP/PGDN/SPACE:上下和翻页。 a:annotate current symbol,注解当前符号。能够给出汇编语言的注解,给出各条指令的采样率。 d:过滤掉所有不属于此DSO的符号。非常方便查看同一类别的符号。 P:将当前信息保存到perf.hist.N中。   (3) 常用命令行参数 -e <event>:指明要分析的性能事件。 -p <pid>:Profile events on existing Process ID (comma sperated list). 仅分析目标进程及其创建的线程。 -k <path>:Path to vmlinux. Required for annotation functionality. 带符号表的内核映像所在的路径。 -K:不显示属于内核或模块的符号。 -U:不显示属于用户态程序的符号。 -d <n>:界面的刷新周期,默认为2s,因为perf top默认每2s从mmap的内存区域读取一次性能数据。 -G:得到函数的调用关系图。 perf top -G [fractal],路径概率为相对值,加起来为100%,调用顺序为从下往上。 perf top -G graph,路径概率为绝对值,加起来为该函数的热度。   (4) 使用例子 # perf top // 默认配置 # perf top -G // 得到调用关系图 # perf top -e cycles // 指定性能事件 # perf top -p 23015,32476 // 查看这两个进程的cpu cycles使用情况 # perf top -s comm,pid,symbol // 显示调用symbol的进程名和进程号 # perf top --comms nginx,top // 仅显示属于指定进程的符号 # perf top --symbols kfree // 仅显示指定的符号
其他工具使用 window xperfhttp://blog.csdn.net/vivilorne/article/details/3611817linux  perfhttp://blog.csdn.net/zhangskd/article/details/37902159/valgrind的callgrind工具http://www.cnblogs.com/zengkefu/p/5642991.html
go程序性能分析pprofhttp://blog.csdn.net/yhcharles/article/details/16820485http://studygolang.com/articles/2729