Linux 的系统级性能剖析工具‐perf
(二)
承刚
TAOBAO Kernel Team
chenggang.qin@gmail.com
第三章 Perftop 工具
3.1 perftop 的基本使用方法
top 工具主要用于实时剖析各个函数在某个性能事件上的热度。利用 perf
top,能够直观地观察到当前的热点函数,并利用工具中内置的 annotate 功能,
进一步查找热点指令。
图 3.perftop 的界面
Perftop 的基本使用方法为:
$perftop
该命令以默认性能事件“cycles(CPU 周期数)”进行全系统的性能剖析,检
测系统中的所有应用程序函数与内核函数的热度。图 3 为上述命令的执行结果。
perf 提供了 3 种用户界面,分别是 tui,gtk 以及 tty。其中可操作性最强,
功能最丰富的界面是 tui,本文主要基于此界面讲解 perf。top 工具仅支持 tui 与
tty,默认界面为 tui。图 3 中展示的就是 tui 界面。
top 工具的界面具有 4 列信息。右面第一列为符号名,也就是函数名。左面
第一列为该符号引发的性能事件在整个监测域中占的比例,我们将其称为该符号
的热度。监测域是指 perf 监控的所有符号。默认情况下包括系统中所有进程、
内核以及内核模块的函数。左面第二列为该符号所在的 DSO。DSO 即动态共享对
象(DynamicSharedObject)的缩写。第 3 列为 DSO 的类型。perf 中 DSO 共有 5
种类型,分别是:ELF 可执行文件,动态链接库,内核,内核模块,VDSO 等。
当第 3 列为 [.]时表示此符号属于用户态的 ELF 文件(包括可执行文件与动态链
接库)。为[k]表示此符号属于内核或内核模块。
需要提一下的是,必须在系统安装 newt 软件包,perf 才能使能 tui 界面。
在 tui 界面下按'h','?'或'F1'键时,会弹出一个帮助窗口,如图 4 所示。
图 4.tui 界面的帮助窗口
帮助窗口列出了 perftop 的所有功能。我们首先来看注解(Annotate)功能。
注解功能可以进一步深入分析某个符号。给出对应线程的代码并且为热点代码标
记出它们触发的性能事件在整个测试域中的百分比。下面让我们来看一下如何使
用注解功能。在界面上按上下键,将光标在各个 symbol 间移动。选定某个符号
后,按下 a 键,得到如图 5 所示的界面。
图 5.perftop 的注解功能
图 5 显示的是[code1]中 do_pi()函数的注解。从图上可以看到 perf 对 do_pi()
中的 C 代码给出了汇编语言的注解。并且给出了各条指令的采样率。从图上可以
看到耗时较多的指令(如访存指令)比较容易被 perf 采到。
选定某个符号后按下热键’d’,perf 会过滤掉所有不属于此 DSO 的文件。以图
1 中的实验为例,符号 do_pi 归属的 DSO 为 thread。当在符号 do_pi 上按下’d’键
后,perf 过滤掉了所有不属于 thread 的符号。如图 6 所示。
图 6. 符号的 DSO 级过滤功能
类似于热键’d’,热键’t’能够过滤所有不属于当前符号所属线程的符号。
热键’P’可以将 perftop 的当前显示的信息输出到文件’perf.hist.XXX’中。
右方向键也是热键,它可以打开 perftop 的功能菜单。菜单上列出的各项功
能分别对应上述各个热键的功能。
3.2perftop 的参数介绍
Perftop 的参数较多,本文只介绍几个常用参数的使用方法。
‘‐e’or‘‐‐event’<event>:
该参数用于指定待分析的性能事件。具体可以参考第 3 节 perflist。如果我
们希望利用 top 工具剖析系统中的 Cache 丢失次数,可以采用以下命令:
$perftop‐ecache‐misses
‘‐c’or‘‐‐count’<n>
该参数用于指定性能计数器的采样周期。默认情况下,每秒钟采样 4000 次。