我的目标是从另一个内核模块中读取内核3.14(lwn链接)中引入的intel rapl计数器(perf_event_intel_rapl.c)。使用perf_event_create_kernel_counter
可以很容易地读取"通用"计数器。我发现了一个很好的例子:http://wadeatwork.com/?p=1SW_CPU_CLOCK
perf手册页(链接)指出,对于"非通用"事件,PERF_TYPE_RAW
应与特定于实现的配置字段一起用作perf_event_attr->type
。
我的问题是应该如何配置perf_event_attr
结构以访问rapl计数器。我还没有找到任何关于如何从内核模块实现这一点的文档。
对RAPL的perf_event支持包括可作为系统范围访问的通用事件,需要root访问(sudo)。
你应该试试命令:
sudo perf list
查看事件电源/能量核心/是否存在,如果不存在,则说明您的CPU不支持RAPL,或者perf_event未在CPU上启用RAPL功能。如果您的CPU支持RAPL,但它没有在perf_event中启用,则可以通过将对CPU的RAPL支持添加到perf_event中来启用它,如本链接中所述。
一旦您的CPU得到支持,您就可以使用perf工具通过以下命令进行评测:
sudo perf stat -e power/energy-cores
有关进一步的详细信息,这是一个指南,其中包含使用perf工具对RAPL事件进行采样的步骤,该工具详细描述了上述内容并提供了一些代码。