perf的简单使用

perf 是什么

perf 是linux上的性能分析工具,挺好的工具。但是这个工具的命令还是有些复杂。通常情况下,特定的场景中,知道几个常用的操作即可。本文介绍如何使用perf查找热点代码。

准备工作

使用是 perf 的安装。

dnf install perf

我们通常使用perf对一个程序进行性能分析。我们得知道如何查看这个进程得PID,以及这个进程的每个线程ID。

# 一个进程的pid
[root@localhost vpp] ps -aux | grep vpp
[root@localhost vpp] pidof vpp
740280

# 查看一个进程有哪些线程
[root@localhost vpp] ps -T -p 740280
 740280  740280 ?        00:00:02 vpp_main
 740280  740463 ?        00:00:44 vpp_wk_0
 740280  740464 ?        00:00:44 vpp_wk_1

接下来,我们看下 perf 的基本使用。下面的内容逻辑比较跳跃,为使用时顺手记录。

perf top 的使用

# 查看进程的性能

## 不同的方式查看性能
perf top -h
Usage: perf top [<options>]
  -C, --cpu <cpu>       list of cpus to monitor
  -p, --pid <pid>       profile events on existing process id
  -t, --tid <tid>       profile events on existing thread id

 
## 查看指定pid的性能
perf top -p 740280

当前页面 输入 ?可以查看帮助信息。我唯一常用得功能是,通过 “/” 找到符号。

有时候我们会看到 __vec_len 这个基础函数占用了大量的CPU。这个基础函数,被不同的函数调用。如果我们想知道比较高层次的函数的CPU使用情况。我们可以再加一些参数,函数堆栈的层次显示CPU的使用情况。

perf top -p 740280 --call-graph dwarf

perf 生成火焰图

通常我们使用 perf top 实时查看性能情况。有时候,我们想把性能情况分享给他人查看,我们可以使用perf 生成火焰图。下面有两种方式,这两种方式本质应该是一种。使用方式二即可。

方式一

dnf install 
#perf record -p 740280 --call-graph dwarf
perf record -p 740280 -e cpu-clock --call-graph dwarf

git : <https://github.com/brendangregg/FlameGraph.git>
perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

方式二: Chapter 25. Getting started with flamegraphs | Red Hat Product Documentation

dnf install js-d3-flame-graph
perf script flamegraph -p 740280 sleep 10

其他

top的使用

perf 似乎无法看到每个CPU的使用情况。比如,我有一个进程,这个进程有非常多的线程,每个线程都设置了不同CPU的亲和性。我想查看是不是每个CPU都被使用了?是否有“一核有难,多核围观”的情况。这时候我们可以使用top。

注:如果不喜欢top,也可以尝试下htop。

还是使用top吧。htop 查看线程名不太方便。我们也不需要记住top的操作,直接问AI即可。

top 如何按照CPU进行排序

  • 在 top 运行时,按下 f 进入字段管理界面。这里您可以浏览所有可用的字段,并通过上下箭头选择您想要添加到显示或者作为排序依据的字段。
  • 按下 s 可以设置当前高亮的字段为排序依据。
  • 使用 d 或空格键可以切换字段是否显示在主界面中。
  • 完成选择后按 q 返回主界面。

top中显示线程名

  • 在top运行时,按下 H

top中查看CPU的使用情况

  • 在top运行时,按下 1
# 至于每个参数的含义,问下ai
## id 表示 空闲(idle)时间的百分比
%Cpu0  :  0.0 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.3 hi,  0.0 si,  0.0 st
%Cpu1  :  1.7 us,  0.3 sy,  0.0 ni, 97.3 id,  0.0 wa,  0.3 hi,  0.3 si,  0.0 st
%Cpu2  : 99.2 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.8 hi,  0.0 si,  0.0 st
%Cpu3  : 98.3 us,  0.4 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.8 hi,  0.4 si,  0.0 st

查看一个线程使用多少CPU

top 好像无法查看一个线程使用了多少CPU了。问下AI。

ps -mo pid,tid,%cpu,psr -p <PID>

ps -T -p 778143
    PID    SPID TTY          TIME CMD
 778143  778143 ?        00:00:58 vpp_main
 778143  778195 ?        00:00:00 dpdk-intr
 778143  778321 ?        00:36:14 vpp_wk_0 # 这个线程
 778143  778322 ?        00:36:13 vpp_wk_1
 
 root@localhost ~/w/3rd# ps -mo pid,tid,%cpu,psr -p 778143
    PID     TID %CPU PSR
 778143       -  200   -
      -  778143  2.6   1
      -  778195  0.0   1
      -  778321 99.2   2 # 正在使用2号CPU.使用了99.2的CPU
      -  778322 99.1   3

我们要特别注意线程亲和性的继承。避免多个线程亲和一个CPU。

暂无评论

发送评论 编辑评论


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