第 29 章 在不停止或重启 perf 的情况下从正在运行的 perf 收集器添加或删除追踪点
通过使用控制管道接口在正在运行的 perf
收集器中启用和禁用不同的追踪点,您可以动态调整收集的数据,而无需停止或重启 perf
。这样可确保您不会丢失在停止或重启过程中记录的性能数据。
29.1. 在没有停止或重启 perf 的情况下向正在运行的 perf 添加追踪点
使用控制管道接口向正在运行的 perf
收集器添加追踪点,以调整您正在记录的数据,而无需停止 perf
和丢失性能数据。
先决条件
-
已安装
perf
用户空间工具,如安装 perf 所述。
流程
配置控制管道接口:
# mkfifo control ack perf.pipe
使用您启用的控制文件设置和事件运行
perf 记录
:# perf record --control=fifo:control,ack -D -1 --no-buffering -e 'sched:*' -o - > perf.pipe
在本例中,在
-e
选项后声明'sched:*'
使用调度程序事件启动perf record
。在第二个终端中,启动控制管道的读取权限:
# cat perf.pipe | perf --no-pager script -i -
启动控制管道的读取侧会在第一个终端中触发以下信息:
Events disabled
在第三个终端中,使用 control 文件启用 tracepoint:
# echo 'enable sched:sched_process_fork' > control
此命令触发
perf
,以扫描控制文件中针对声明的事件扫描当前事件列表。如果事件存在,则会启用 tracepoint,并在第一个终端中显示以下消息:event sched:sched_process_fork enabled
启用追踪点后,第二个终端会显示
perf
检测追踪点的输出:bash 33349 [034] 149587.674295: sched:sched_process_fork: comm=bash pid=33349 child_comm=bash child_pid=34056