perf_event_open:包括在采样时执行子进程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perf_event_open:包括在采样时执行子进程相关的知识,希望对你有一定的参考价值。

根据man pages在计算事件时考虑子进程的执行,可以设置inherit位。使用PERF_FORMAT_GROUP时无法使用inherit。那么,如何包含子进程的执行(例如,在C源代码中执行shell命令),以便在使用perf_event_open进行采样(PERF_FORMAT_GROUP)时对其进行计数

如果未指定PERF_FORMAT_GROUP,这是否表示对于每个记录的样本,每个样本记录将包括等于事件数量的struct read_format,或者仅为每个事件记录样本。

答案

如果您需要使用PERF_FORMAT_GROUP,并且这不适用于内置的inherit,那么您必须自己跟踪孩子。您可以通过使用ptrace然后为所有子任务设置perf_event_open来实现。然后,您还必须合并所有事件文件描述符中的示例。

编辑:没有PERF_FORMAT_GROUP,内部采样记录不是同时进行的。您当然可以设置计数事件(而不是采样事件),并从用户空间以固定间隔同时读取它们。

以上是关于perf_event_open:包括在采样时执行子进程的主要内容,如果未能解决你的问题,请参考以下文章

perf_event_open 系统调用

如何确定 Media Foundation 中特定 MJPEG 子类型的色度子采样?

Python 包含子采样

Linux内核 eBPF基础:perf基础perf_event_open系统调用内核源码分析

如何从 perf_event_open 中的环形缓冲区中检索调用链以获取 PERF_RECORD_SWITCH?

“perf_event_open”系统调用通过选项“PERF_RECORD_SAMPLE”返回的结构中的“id”和“stream_id”有啥区别?