如何从内核读取性能计数器?



我一直在用户空间中使用Linux perf工具。我想编写的代码在每次执行上下文切换时读取线程的性能计数器。

所需的步骤是:

1) 获取读取性能计数器寄存器的机制。

2) 在每次上下文切换后从调度程序调用 step(1)。

我卡在步骤(1)上,因为我无法弄清楚要调用哪些函数来读取性能寄存器以及如何在执行此操作时描述事件。 我尝试浏览文档以及这个问题如何在内核中使用性能计数器?

实际上,通过使用跟踪点事件组领导采样,您可以完全通过perf来执行此操作。

sched:sched_switch是在每个上下文切换时触发的跟踪点事件。将该事件与其他事件一起放入启用了组领导采样的组中,将允许您在发生领导样本时读取非领导计数器。语法如下所示:

perf record -e "{sched:sched_switch,cycles,instructions}:S" -a

每当有上下文切换时,这将在每个 CPU 上记录cycles值和instructions。您可以使用perf script检查输出,这也允许您使用 python 程序读取它。

如果要在自己的程序中监视,可以将perf_event_openPERF_FORMAT_GROUP一起使用,PERF_SAMPLE_READ

perf工具及其底层perf_event_open界面非常强大,但有时可能缺少文档。如果您需要更大的灵活性,可以使用 BPF 和密件抄送。

相关内容

  • 没有找到相关文章

最新更新