TencentOS Server perf 性能分析

perf 是轻量级的性能分析器,可以对内核、用户态程序进行分析(profiling)、跟踪(tracing)。

相关产品
TencentOS Server 产品页,含版本规格、价格与购买入口。

一、安装

内核已经编译支持,直接安装用户态软件包即可:

dnf install perf

注意:说明:你可以使用 perf –help 查看 perf 的子命令。

二、perf 事件

perf 支持硬件事件(cycles、cache-misses 等)、软件事件(page-faults 等)、kprobes/uprobes、tracepoints 等。你可以使用 perf list 查看 perf 支持的具体事件,使用 perf list –help 查看更详细的使用方法。

查看 perf 支持的 tracepoints:

perf list tracepoint

输出示例(节选):

List of pre-defined events (to be used in -e or -M): alarmtimer:alarmtimer_cancel [Tracepoint event] alarmtimer:alarmtimer_fired [Tracepoint event] alarmtimer:alarmtimer_start [Tracepoint event] alarmtimer:alarmtimer_suspend [Tracepoint event] avc:selinux_audited [Tracepoint event] block:block_bio_backmerge [Tracepoint event] block:block_bio_bounce [Tracepoint event] block:block_bio_complete [Tracepoint event] block:block_bio_frontmerge [Tracepoint event]

三、perf stat

perf 包含两种模式:

·counting(计数)模式,通过 PMC 寄存器对选择的事件进行计数。

·sampling(采样)模式,统计采样间隔时正在执行的函数等的次数,运行时间越长的函数,被采样到的概率越大,其 CPU 占用率也就越高。

perf stat 对事件计数并汇总显示,不会记录到 perf.data 文件中。示例如下,对系统调用进行计数:

perf stat -e "syscalls:sys_enter_*" -a — sleep 10

输出示例:

 Performance counter stats for 'system wide': 1 syscalls:sys_enter_socket 0 syscalls:sys_enter_socketpair 0 syscalls:sys_enter_bind 0 syscalls:sys_enter_listen 1 syscalls:sys_enter_accept4 0 syscalls:sys_enter_accept 1 syscalls:sys_enter_connect 0 syscalls:sys_enter_getsockname 0 syscalls:sys_enter_getpeername 2 syscalls:sys_enter_sendto 8 syscalls:sys_enter_recvfrom 3 syscalls:sys_enter_setsockopt 4 syscalls:sys_enter_getsockopt

四、perf record

perf record 对事件进行采样,并记录到 perf.data 文件中,并且可以提供调用栈等信息。

如下,对所有的 CPU 进行采样:

perf record -a -g — sleep 5

在执行命令的当前目录下生成 perf.data 文件。

五、perf report

perf report 对 perf.data 文件中的性能数据进行分析。

在 perf.data 文件所在的目录直接执行 perf report,进入交互模式,类似 top 命令,按照提示在窗口进行操作:

perf report

输出示例:

Samples: 7K of event 'cpu-clock:pppH', Event count (approx.): 1945500000 Children Self Command Shared Object Symbol+ 99.88% 0.00% swapper [kernel.vmlinux] [k] secondary_startup_64_no_verify+ 99.88% 0.00% swapper [kernel.vmlinux] [k] cpu_startup_entry+ 99.88% 0.01% swapper [kernel.vmlinux] [k] do_idle+ 99.87% 0.01% swapper [kernel.vmlinux] [k] cpuidle_idle_call+ 99.86% 0.01% swapper [kernel.vmlinux] [k] default_idle_call+ 99.85% 99.73% swapper [kernel.vmlinux] [k] __cpuidle_text_start+ 82.83% 0.00% swapper [kernel.vmlinux] [k] start_secondary+ 17.05% 0.00% swapper [kernel.vmlinux] [k] start_kernel+ 17.05% 0.00% swapper [kernel.vmlinux] [k] arch_call_rest_init+ 17.05% 0.00% swapper [kernel.vmlinux] [k] rest_init 0.12% 0.00% swapper [kernel.vmlinux] [k] __irq_exit_rcu

执行 perf report –stdio 进入非交互模式,适合将分析结果重定向到文这篇件:

perf report –stdio

输出示例(节选):

# Total Lost Samples: 0## Samples: 7K of event 'cpu-clock:pppH'# Event count (approx.): 1945500000## Children Self Command Shared Object Symbol # …….. …….. …………… ……………….. ………………………………….# 99.88% 0.00% swapper [kernel.vmlinux] [k] secondary_startup_64_no_verify| —secondary_startup_64_no_verify |  |–82.83%–start_secondary | cpu_startup_entry | do_idle | |  | –82.82%–cpuidle_idle_call | |  | –82.81%–default_idle_call | |  | –82.79%–__cpuidle_text_start

六、perf script

perf script 提供了 perf 软件包中很多脚本的功能,辅助性能数据分析、输出,其中包括有名的火焰图。

在 perf.data 文件所在的目录直接执行,展示采集到的事件及调用栈:

perf script

输出示例(节选):

swapper 0 [000] 23750.198473: 250000 cpu-clock:pppH: ffffffffb1373120 __cpuidle_text_start+0x10 (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb1373303 default_idle_call+0x33 (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb0946468 cpuidle_idle_call+0x158 (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb0946536 do_idle+0x76 (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb0946759 cpu_startup_entry+0x19 (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb1363a5a rest_init+0xca (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb2c444c6 arch_call_rest_init+0xa (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb2c44979 start_kernel+0x48b (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64) ffffffffb080015a secondary_startup_64_no_verify+0xe5 (/boot/vmlinux-6.6.6-2401.0.1.tl4.x86_64)

如需使用火焰图,需要先安装软件包 js-d3-flame-graph:

dnf install js-d3-flame-graph

然后在 perf.data 所在的目录执行 perf script report flamegraph ,生成火焰图文件 flamegraph.html,在桌面环境用浏览器打开。

赞 (0)
上一篇 4天前
下一篇 4天前