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

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

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

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

但我不明白每一个可能的参数都可以做什么。


尤其是这两种可能性:

知道这些信息的人能给我一个直接的答案吗?

好的。

我仔细看了看,我想我找到了答案。


  • PERF_FORMAT_TOTAL_TIME_ENABLED:好像一个"enabled time"指的是事件不再被观察到的时间和事件被注册为[=47的时间之间的差异=].

  • PERF_FORMAT_TOTAL_TIME_RUNNING:好像一个"running time"指的是事件真正被内核观察到的时间总和。小于或等于 PERF_FORMAT_TOTAL_TIME_ENABLED.


例如:

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

您有 00:02:30 个启用时间(1:15:35 下午 - 1:13:05 下午 = 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 的实例。