Red Hat Training

A Red Hat training course is available for RHEL 8

第 25 章 使用 perf 循环缓冲区监控性能瓶颈的进程

您可以使用 perf 工具创建特定于事件的数据快照,以便监控系统中运行的特定进程或应用程序部分的性能瓶颈。在这种情况下,perf 只将数据写入 perf.data 文件,以便在检测到指定事件时稍后进行分析。

25.1. 使用 perf 循环缓冲区和特定于事件的快照

当使用 perf 调查进程或应用程序中性能问题时,可能经济实惠或不适合在发生特定感兴趣的事件前几小时内记录数据。在这种情况下,您可以使用 perf record 创建自定义循环缓冲区,在特定事件后生成快照。

--overwrite 选项使 perf record 将所有数据存储在可写的循环缓冲区中。当缓冲区已满时,perf record 会自动覆盖最旧的记录,因此永远不会写入 perf.data 文件中。

--overwrite--switch-output-event 选项一起使用配置一个循环缓冲,它会持续记录和转储数据,直到检测到 --switch-output-event 触发器事件为止。触发事件信号 perf record,用户感兴趣的事情已经发生,并在循环缓冲中将数据写入 perf.data 文件中。这会收集您感兴趣的特定数据,同时通过不写入您不想的 perf.data 文件来降低运行 perf 进程的开销。

25.2. 使用 perf 循环缓冲区收集特定数据来监控性能瓶颈

使用 perf 工具,您可以创建由您指定的事件触发的循环缓冲,以便只收集您感兴趣的数据。要创建循环缓冲区来收集事件特定数据,请使用 perf--overwrite--switch-output-event 选项。

先决条件

  • 已安装 perf 用户空间工具。如需更多信息,请参阅安装 perf
  • 您已在进程或应用程序中想要监控的进程或应用程序中对应位置设置了一个优良:

    # perf probe -x /path/to/executable -a function
    Added new event:
      probe_executable:function   (on function in /path/to/executable)
    
    You can now use it in all perf tools, such as:
    
            perf record -e probe_executable:function -aR sleep 1

流程

  • 使用 uprobe 创建循环缓冲作为触发器事件:

    # perf record --overwrite -e cycles --switch-output-event probe_executable:function ./executable
    [ perf record: dump data: Woken up 1 times ]
    [ perf record: Dump perf.data.2021021012231959 ]
    [ perf record: dump data: Woken up 1 times ]
    [ perf record: Dump perf.data.2021021012232008 ]
    ^C[ perf record: dump data: Woken up 1 times ]
    [ perf record: Dump perf.data.2021021012232082 ]
    [ perf record: Captured and wrote 5.621 MB perf.data.<timestamp> ]

    这个示例启动可执行文件并收集在 -e 选项后指定的 cpu 周期,直到 perf 检测到 uprobe,在 --switch-output-event 选项后指定的触发器事件。此时,perf 会获取循环缓冲区中所有数据的快照,并将其存储在由时间戳标识的唯一 perf.data 文件中。这个示例生成了总计 2 个快照,最后的 perf.data 文件是通过按 Ctrl+c 强制的。