Linux性能检测工具perf工作原理

perf是一个面向事件(event-oriented)的性能检测工具,内置于Linux内核,又称 perf_events

event 可能的来源:

perf_events

perf 工具有以下四种 event :

  1. software events
    使用内核的计数器 kernel counters,记录系统级事件。例如上下文切换,page fault等

  2. hardware events
    使用CPU的 Performance Monitoring Unit (PMU),记录微体系结构(micro-architecture)事件。例如cycle数,指令执行数 instructions retired,L1 cache misses等
    PMU是一种寄存器,用于记录指定事件发生的次数(perf stat -e 多个事件用逗号隔开)。使用PMU计数时,会设定 Sample After Value (SAV)。当PMU的值超过SAV,将触发一个硬件中断,中断处理程序可以收集CPU的IP,调用堆栈,PID等信息,并认为这SAV次事件都是由于当前指令造成的。
    hardware events 记录的误差可能来自于:

  • 超线程共享PMU: 开启超线程后,一个物理核心被虚拟化为两个逻辑核心,但依然共用同一个PMU
  • 事件滑行(Hardware Event Skid): 硬件延迟或指令流重排导致记录的IP并没指向真正发生事件的指令
  • 多路复用:如果记录的事件种类超过了PMU的数量,会对PMU进行多路(时分)复用
  • 中断屏蔽: 用于记录指令的这个中断可能会被其它中断屏蔽掉

详细参考: Understanding How General Exploration Works in Intel® VTune™ Amplifier

  1. hardware cache events
    一类特别的 hardware events:有 L1 (d/i)cache, LLC(Last Level Cache), (d/i)TLB, branch 事件

  2. tracepoint events
    使用内核提供的 ftrace 系统调度追踪器

最常用到的命令:

perf stat: obtain event counts
perf record: record events for later reporting
perf report: break down events by process, function, etc.
perf annotate: annotate assembly or source code with event counts
perf top: see live event count
perf bench: run different kernel microbenchmarks

更细节的使用方法可以在上述命令后加-h查看

参考资料:

  1. perf Examples
  2. Linux kernel profiling with perf
posted @ 2021-04-23 21:58  HarryPotterIsDead!  阅读(2137)  评论(0编辑  收藏  举报