注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

Perf使用  

来自chocket   2013-08-14 17:34:55|  分类: 默认分类 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Perf介绍

Perf中的子工具

1.         annotate 根据数据文件,注解被采样到的函数,显示指令级别的热点。

2.         archive  根据数据文件中记录的buildid,将所有被采样到的 ELF文件打成压缩包。利用此压缩包,可以在任何机器上分析数据文件中记录的采样数据。

3.         bench Perf中内置的benchmark,目前包括两套针对调度器和内存管理子系统的benchmark

4.         buildidcache 管理 perf buildid 缓存。每个 ELF 文件都有一个独一无二的 buildidBuildid  perf用来关联性能数据与ELF文件。

5.         buildidlist 列出数据文件中记录的所有buildid

6.         diff  对比两个数据文件的差异。能够给出每个符号(函数)在热点分析上的具体差异。

7.         evlist  列出数据文件中的所有性能事件。

8.         inject  该工具读取perfrecord工具记录的事件流,并将其定向到标准输出。在被分析代码中的任何一点,都可以向事件流中注入其它事件。

9.          kmem  针对内存子系统的分析工具。

10.     kvm  此工具可以用来追踪、测试运行于KVM 虚拟机上的GuestOS

11.     list   列出当前系统支持的所有性能事件。包括硬件性能事件、软件性能事件以及检查点。

12.     lock  分析内核中的加锁信息。包括锁的争用情况,等待延迟等。

13.     record  收集采样信息,并将其记录在数据文件中。随后可通过其它工具对数据文件进行分析。

14.     report  读取 perfrecord创建的数据文件,并给出热点分析结果。

15.     sched   针对调度器子系统的分析工具。

16.     script   执行 perl python 写的功能扩展脚本、生成脚本框架、读取数据文件中的数据信息等。

17.     stat   剖析某个特定进程的性能概况,包括CPICache 丢失率等。

18.     test  Perf对当前软硬件平台的测试工具。可以用此工具测试当前的软硬件平台(主要是处理器型号和内部版本)是否能支持perf的所有功能。

19.     timechart  生成一幅描述处理器与各进程状态变化的矢量图。

20.     top 类似于 Linux  top 命令,对系统性能进行实时分析。

21.     trace strace inspired tool.

22.     probe 用于定义动态检查点

 

这里我们主要介绍的是

Perf list

Perf top

Perf stat

Perf record

 

Perf List

利用perf剖析程序性能时,需要指定当前测试的性能时间。性能事件是指在处理器或操作系统中发生的,可能影响到程序性能的硬件事件或软件事件

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 

Perf top

实时显示系统/进程的性能统计信息

常用参数

-e:指定性能事件

-a:显示在所有CPU上的性能统计信息

-C:显示在指定CPU上的性能统计信息

-p:指定进程PID

-t:指定线程TID

-K:隐藏内核统计信息

-U:隐藏用户空间的统计信息

-s:指定待解析的符号信息

‘‐G’ or‘‐‐call‐graph’ <output_type,min_percent,call_order>

graph: 使用调用树,将每条调用路径进一步折叠。这种显示方式更加直观。

每条调用路径的采样率为绝对值。也就是该条路径占整个采样域的比率。

fractal

默认选项。类似与 graph,但是每条路径前的采样率为相对值。

flat

不折叠各条调用

选项 call_order 用以设定调用图谱的显示顺序,该选项有 2个取值,分别是

callee caller

将该选项设为callee 时,perf按照被调用的顺序显示调用图谱,上层函数被下层函数所调用。

该选项被设为caller 时,按照调用顺序显示调用图谱,即上层函数调用了下层函数路径,也不显示每条调用路径的采样率

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 上图的是执行Perf top –p pid –G后显示指定pid的调用资源比例 


Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 上图展示checkSum函数中指令级的统计

注: Perf top需要root权限

 

Perf stat

分析系统/进程的整体性能概况

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 

task‐clock事件表示目标任务真正占用处理器的时间,单位是毫秒。也称任务执行时间

context-switches是系统发生上下文切换的次数

CPU-migrations是任务从一个处理器迁往另外一个处理器的次数

page-faults是内核发生缺页的次数

cycles是程序消耗的处理器周期数

instructions是指命令执行期间产生的处理器指令数

branches是指程序在执行期间遇到的分支指令数。

branch‐misses是预测错误的分支指令数。

XXX seconds time elapsed系程序持续时间

任务执行时间/任务持续时间大于1,那可以肯定是多核引起的

参数设置:

-e:选择性能事件

-i:禁止子任务继承父任务的性能计数器。

-r:重复执行 n 次目标程序,并给出性能指标在n 次执行中的变化范围。

-n:仅输出目标程序的执行时间,而不开启任何性能计数器。

-a:指定全部cpu

-C:指定某个cpu

-A:将给出每个处理器上相应的信息。

-p:指定待分析的进程id

-t:指定待分析的线程id

 

Perf record

记录一段时间内系统/进程的性能时间

参数:

 -e:选择性能事件

 -p:待分析进程的id

 -t:待分析线程的id

 -a:分析整个系统的性能

 -C:只采集指定CPU数据

 -c:事件的采样周期

 -o:指定输出文件,默认为perf.data

 -A:以append的方式写输出文件

 -f:以OverWrite的方式写输出文件

 -g:记录函数间的调用关系

注意点:

-p/-t使用,系统存在如下bug:

/proc/sys/kernel/perf_event_mlock_kb

With the current code, it's relatively easy to run up against the perf_event_mlock_kb limit if you try to attach to a multithreaded target with 'perf record -p', because perf will attempt to mmap 512k per target thread, and the default mlock limit is (512k + 1 page), total. Current, this results in a completely inscrutable

Fatal: failed to mmap with 22 (Invalid argument)

具体参见下图

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 由上图可知,在/proc/sys/kernel/perf_event_mlock_kb516时,perf record –p pidFatal:failed to mmap with 22(Invalid argument),然后将/proc/sys/kernel/perf_event_mlock_kb修改为5124时,perf record –p pid得到正确运行。但必须要有权限修改/proc/sys/kernel/perf_event_mlock_kb的值

 

Perf Report

读取perf record生成的数据文件,并显示分析数据

参数

-i:输入的数据文件

-v:显示每个符号的地址

-d <dos>:只显示指定dos的符号

-C:只显示指定comm的信息(Comm. 触发事件的进程名)

-S:只考虑指定符号

-U:只显示已解析的符号

-g[type,min,order]:显示调用关系,具体等同于perf top命令中的-g

-c:只显示指定cpu采样信息

-M:以指定汇编指令风格显示

--source:以汇编和source的形式进行显示

-p<regex>:用指定正则表达式过滤调用函数

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 上图为perf report -g fractal, 0.2, caller

 

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 上图为perf report -g fractal, 0.2, callee

 

Perf使用 - 网易杭研后台技术中心 - 网易杭研后台技术中心的博客

 上图为perf report -g fractal,0.0,callee -p tnt::TNTDatabase::purgeAndDumpTntim*

  评论这张
 
阅读(3834)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017