0%

perf 工具

Linux 性能调优工具 perf 使用


前言

背景知识啊,介绍啊,跳转阅读下方链接了解即可

实操

perf 是一个包含多个子工具的工具集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ perf --help

usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS]

The most commonly used perf commands are:
annotate Read perf.data (created by perf record) and display annotated code
archive Create archive with object files with build-ids found in perf.data file
bench General framework for benchmark suites
buildid-cache Manage build-id cache.
buildid-list List the buildids in a perf.data file
c2c Shared Data C2C/HITM Analyzer.
config Get and set variables in a configuration file.
data Data file related processing
diff Read perf.data files and display the differential profile
evlist List the event names in a perf.data file
ftrace simple wrapper for kernel's ftrace functionality
inject Filter to augment the events stream with additional information
kallsyms Searches running kernel for symbols
kmem Tool to trace/measure kernel memory properties
kvm Tool to trace/measure kvm guest os
list List all symbolic event types
lock Analyze lock events
mem Profile memory accesses
record Run a command and record its profile into perf.data
report Read perf.data (created by perf record) and display the profile
sched Tool to trace/measure scheduler properties (latencies)
script Read perf.data (created by perf record) and display trace output
stat Run a command and gather performance counter statistics
test Runs sanity tests.
timechart Tool to visualize total system behavior during a workload
top System profiling tool.
version display the version of perf binary
probe Define new dynamic tracepoints
trace strace inspired tool

See 'perf help COMMAND' for more information on a specific command.

其中最常用应该是perf listperf recordperf reportperf statperf top这几个工具

perf list

perf list 用来查看 perf 所支持的性能事件(即能够触发perf能够采样点的事件),其中有软件的也有硬件的。

说明:

  • Software event: 是内核软件产生的事件,比如进程切换,tick 数等,与硬件无关
  • Tracepoint event: 是内核中的静态 tracepoint 所触发的事件,这些 tracepoint 用来判断程序运行期间内核的行为细节,比如 slab 分配器的分配次数等
  • Hardware event: 是硬件产生的事件,但这里的perf list上没有看到对应的事件,阅读前辈们文章都有提到这个,感觉是当前版本已经去掉了
perf top

有些时候,只是发现系统性能无端下降,并不清楚究竟哪个进程吃资源导致的。

这时就需要用上perf top,其主要用于实时分析各个函数在某个性能事件上的热度,能够快速的定位热点函数,包括应用程序函数、

直接运行perf top输出示例如下:

输出格式解释:

  • 符号引发的性能事件的比例,默认指占用的cpu周期比例
  • 符号所在的DSO(Dynamic Shared Object),可以是应用程序、内核、动态链接库、模块
  • DSO的类型。[.]表示此符号属于用户态的ELF文件,包括可执行文件与动态链接库)。[k]表述此符号属于内核或模块
  • 符号名。有些符号不能解析为函数名,只能用地址表示

使用示例:

1
2
3
4
5
6
7
perf top                         # 默认配置
perf top -G # 得到调用关系图
perf top -e cycles # 指定性能事件
perf top -p 23015,32476 # 查看这两个进程的cpu cycles使用情况
perf top -s comm,pid,symbol # 显示调用symbol的进程名和进程号
perf top --comms nginx,top # 仅显示属于指定进程的符号
perf top --symbols kfree # 仅显示指定的符号
perf stat

用于分析指定程序的性能概况,-p 指定进程号,需要按ctrl-c结束

输出格式解释:

  • task-clock:任务真正占用的处理器时间,单位为ms。CPUs utilized = task-clock / time elapsed,CPU的占用率。
  • context-switches:上下文的切换次数。
  • CPU-migrations:处理器迁移次数。Linux为了维持多个处理器的负载均衡,在特定条件下会将某个任务从一个CPU迁移到另一个CPU。
  • page-faults:缺页异常的次数。当应用程序请求的页面尚未建立、请求的页面不在内存中,或者请求的页面虽然在内存中,但物理地址和虚拟地址的映射关系尚未建立时,都会触发一次缺页异常。另外TLB不命中,页面访问权限不匹配等情况也会触发缺页异常。

新版本对一些好像不太支持了

perf record

收集采样信息,并将其记录在数据文件中

常用参数

1
2
3
4
5
6
-a:从所有CPU上收集性能数据
-e:<event>:指明要分析的性能事件
-p:<pid>:仅分析目标进程及其创建的线程
-t:<tid> 仅分析tid线程
-o:将采集的数据输出到指定文件
-g:采集函数的调用关系图

默认情况下,信息会存在perf.data文件里,需使用perf report命令可以解析这个文件,如需到其他文件使用-o参数

perf report

读取perf record创建的数据文件,并给出热点分析结果

常用参数

1
2
3
4
-i, --input=:输入性能数据文件
-T, --threads:显示每一个线程的事件统计信息
--pid=:仅显示给的pid的进程的事件统计信息
--tid=:仅显示给的tid的线程的事件统计信息

参考链接