【Linux】穿孔工具详解

  

  原文地址:http://blog.csdn.net/zhangskd/article/details/37902159
  从2.6.31内核开始,linux内核自带了一个性能分析工具性能,能够进行函数级与指令级的热点查找。   

  

  ,   

  

  性能   

  

  ,   

  

  Linux的性能分析工具。   

  

  性能计数器为Linux是一种新的基于子系统,对所有事物提供了一个框架   

  

  性能分析。它涵盖了硬件级(CPU/PMU,性能监控单元)和特性   

  

  软件功能(软件计数器,tracepoints)。   

  

  ,   

  

  性能是内置于Linux内核源码树中的性能剖析(分析)工具。   

  

  它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。   

  

  常用于性能瓶颈的查找与热点代码的定位。   

  

  ,   

  

  CPU周期(CPU周期)是默认的性能事件,所谓的CPU周期是指CPU所能识别的最小时间单元,通常为亿分之几秒,   

  

  是CPU执行最简单的指令时所需要的时间,例如读取寄存器中的内容,也叫做时钟周期。   

  

  ,   

  

  性能是一个包含22种子工具的工具集,以下是最常用的5种:   

  

  perf-list   

  

  perf-stat   

  

  perf-top   

  

  perf-record   

  

  perf-report   

  

  ,   

  

  perf-list   

  

  ,   

  

  Perf-list用来查看性能所支持的性能事件,有软件的也有硬件的。   

  

  ,   

  

  列出所有象征性的事件类型。   

  

  穿孔列表缓存(hw | sw | | tracepoint | event_glob]   

  

  ,   

  

  <强>(1)性能事件的分布   

  

  hw:硬件事件,9个   

  

  西南:软件事件,9个   

  

  缓存:硬件缓存事件,26个   

  

  tracepoint: tracepoint事件,775个   

  

  ,   

  

  sw实际上是内核的计数器,与硬件无关。   

  

  hw和缓存是CPU架构相关的,依赖于具体硬件。   

  

  tracepoint是基于内核的ftrace,主线2.6.3x以上的内核版本才支持。   

  

  ,   

  

  <强>(2)指定性能事件(以它的属性)   

  

  - e & lt; event>:u//用户空间   

  

  - e & lt; event>:k//内核   

  

  - e & lt; event>:h//管理程序   

  

  - e & lt; event>:G//客人计数(KVM的客人)   

  

  - e & lt; event>:H//主机数(不是KVM的客人)   

  

  ,   

  

  <强>(3)使用例子   

  

  显示内核和模块中,消耗最多CPU周期的函数:   

  

  #性能最高- e周期:k   

  

  显示分配高速缓存最多的函数:   

  

  #性能最高- e kmem: kmem_cache_alloc   

  

  ,   

  

  perf-top   

  

  ,   

  

  对于一个指定的性能事件(默认是CPU周期),显示消耗最多的函数或指令。   

  

  ,   

  

  系统分析工具。   

  

  生成并显示实时性能计数器概要文件。   

  

  性能最高[- e & lt; EVENT>|——事件=事件][& lt; options>]   

  

  ,   

  

  性能最高的主要用于实时分析各个函数在某个性能事件上的热度,能够快速的定位热点函数,包括应用程序函数,   

  

  模块函数与内核函数,甚至能够定位到热点指令。默认的性能事件为cpu周期。   

  

  ,   

  

  <强>(1)输出格式   

  

  #性能最高   

           (平原),普通视图            <李类=癮lt”>      李   <李类=" ">      李   <李类=癮lt”>      李   <李类=" ">      李   <李类=癮lt”>      李   <李类=" ">      李   <李类=癮lt”>      李

【Linux】穿孔工具详解