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

时间:2019-02-20 08:21:33

标签: linux-kernel perf intel-pmu

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

所需步骤为:

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

2)每次上下文切换后,从调度程序调用步骤(1)。

由于无法确定要调用哪些函数来读取性能寄存器以及如何在执行事件时描述事件,因此我陷入了步骤(1)。 我尝试浏览文档以及这个问题https://developer.android.com/reference/android/Manifest.permission

1 个答案:

答案 0 :(得分:4)

实际上,您可以使用 tracepoint事件组长抽样来完全sched:sched_switch来完成此操作。

perf record -e "{sched:sched_switch,cycles,instructions}:S" -a 是在每个上下文切换上触发的跟踪点事件。将事件与其他事件放到启用了组长采样的组中,将使您可以在发生每位领导者采样时读取非领导者计数器。语法如下:

cycles

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

如果要在自己的程序中进行监视,可以将PERF_FORMAT_GROUPPERF_SAMPLE_READperf一起使用。

perf_event_open工具及其基础的@media print接口非常强大,但有时可能缺少文档。如果需要更大的灵活性,可以使用BPFbcc