如何在内核内部使用性能计数器?

A-B*_*A-B 6 linux ubuntu performancecounter kernel-module linux-kernel

我想访问内核内部的性能计数器。我发现了很多在用户空间中使用性能计数器的方法,但是你能告诉我一些在内核空间中使用这些计数器的方法吗?

不要指定工具名称,我想编写自己的代码,最好是内核模块。我使用的是内核为 3.18.1 的 Ubuntu。

cos*_*us0 1

您应该检查您是否需要 CPU 和其他硬件支持。尝试查看 oprofile 源代码。它有内核模块和用户空间API。例如,您可以从 oprofile 内核模块部分中剪切部分有趣的代码并将其使用到您的模块中。我想你的模块应该有几个带有循环缓冲区的读取器或侦听器来保存事件。您还可以查看 linux/drivers/oprofile 并对应 linux/arch/.../oprofile。在 make menuconfig 中,您可以像模块或内置一样配置它,并添加额外的计时器。您可以在 oprofile 工具的 oprofile/events/ 下找到可用的事件和计数器(TLB_MISS、CPU_CYCLES、CYCLES_DATA_STALL,...)。

ARM 性能监控寄存器

在 linux/arch/arm64/kernel/perf_regs.c 下,您可以找到arm特定的详细信息。