"perf_event_attr"结构的"read_format"属性的选项到底是什么?

What really are options of the "read_format" attribute of the "perf_event_attr" structure?

本文关键字:选项 是什么 属性 read perf event attr 结构 format      更新时间:2023-10-16

我目前正在使用perf_event_open系统调用(在Linux系统上(,我试图理解这个系统调用的配置参数,该参数由struct perf_event_attr结构给出。

这是关于read_format选择。 有没有人可以在这个系统调用的手册页上看到,这个参数与此调用的输出有关。

但我不明白每个可能的论点都能做什么。


尤其是这两种可能性:

  • PERF_FORMAT_TOTAL_TIME_ENABLED
  • PERF_FORMAT_TOTAL_TIME_RUNNING

有这些信息的人可以给我一个直接的答案吗?

好的。

我看得更远了,我想我已经找到了答案。


  • PERF_FORMAT_TOTAL_TIME_ENABLED: 似乎"启用时间"是指不再观察事件的时间与事件注册为"待观察"的时间之间的差异。

  • PERF_FORMAT_TOTAL_TIME_RUNNING:似乎"运行时间"是指内核真正观察到事件的时间总和。它小于或等于PERF_FORMAT_TOTAL_TIME_ENABLED.


例如:

你告诉内核你想在下午 1:13:05 观察 X 事件。您的内核在 X 上创建一个"探测器",并开始记录活动。 然后,出于未知原因,您告诉在下午 1:14:05 暂时停止记录。 然后,在下午 1:15:05 恢复记录。 最后,在下午 1:15:35 停止记录。

您有 00:02:30 启用时间 (1:15:35 PM - 1:13:05 PM = 00:02:30(

和 00:01:30 运行时间(下午 1:14:05

- 下午 1:13:05 + 下午 1:15:35 - 下午 1:15:05 = 00:01:30(

read_format属性可以使用掩码具有这两个值。在C++中,它看起来像这样:

event_configuration.read_format = PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_TOTAL_TIME_RUNNING;

其中event_configurationstruct perf_event_attr的实例。