Perf

介绍

perf是一款Linux的性能分析工具。Linux性能计数器是一个基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(程序监控单元))功能和软件(软件计数器、tracepoint)功能。通过perf,应用程序可以利用PMU、tracepoint和内核中的计数器来分析内核性能,可以帮助全面理解应用程序中的性能瓶颈。使用perf可以分析程序运行期间发生的硬件事件,比如instructions,clock cycles等。也可以分析软件事件,比如page fault 和进程切换。perf的原理就是通过采集感兴趣事件,来分析热点代码和热点函数。
大致架构如下:

perf提供的事件主要有三种:
1.Hardware Event由PMU部件产生,在特定条件下探测性能事件是否发生以及发生的次数。比如cache命中。
2.Software Event是由内核产生的事件,分布在各个功能模块中,统计和操作系统相关性能事件。比如进程切换,时钟周期。
3.Tracepoint Event是内核中静态的tracepoint所触发的事件,这些tracepoint用来判断程序运行期间内核的行为细节。

常用命令

perf list

perf list查看当前系统支持的性能事件

perf top

perf top类似top命令,主要用于实时分析各个函数在某个性能事件上的热度,能够快速的定位热点函数,包括应用程序函数。直接使用perf top是查看当前整个系统的程序性能。

perf -e:指定事件
perf -p:指定进程
perf -g:详细信息

#include <iostream>
#include <x86intrin.h> // 包含 RDTSC 指令的头文件
int a;
void your_function() {
    while(1){
        a++;
        //std::cout<<a;
    }
}

int main() {
   
    your_function();
   

   
    return 0;
}

执行:sudo perf top -g -p 36389

显示:

perf stat

用于输出指定程序的性能统计数据,既可以获取正在运行的程序数据,也可以获取启动程序的数据。
还是上述代码,获取正在运行程序数据

直接获取启动程序的数据:

perf record

perf record会获取profile保存到perf.data中,-p 指定进程,-a 从所有cpu上采集,-e 指定PMU(处理器监控单元) event,默认是cycles:ppp(CPU周期数),-g 启用调用堆栈记录,-F 采样频率
例如:perf record -p pid -a -g -F 99 — sleep 10 采集pid进程以频率99 采集10秒
perf record -g -e cpu-clock ./test 启动程序采集数据
perf script 显示出采样事件,perf report分析record

火焰图生成

  • git clone https://github.com/brendangregg/FlameGraph.git 安装FlameGraph脚本
  • sudo perf record -F 99 -g –call-graph dwarf — ./your_program --call-graph dwarf​: 使用 DWARF 调试信息增强调用链准确性。
  • sudo perf script > perf.script 生成可读的调用栈数据
  • ./FlameGraph/stackcollapse-perf.pl perf.script > perf.folded 使用stackcollapse-perf.pl 脚本处理数据
  • ./FlameGraph/flamegraph.pl perf.folded > flame.svg 生成SVG火焰图
  • firefox flame.svg # 或使用其他浏览器
如果觉得本文对您有所帮助,可以支持下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇