我编写了一个内核模块,它通过“perf_event_create_kernel_counter”API 创建性能计数器,然后定期读取其值。
我的应用程序适用于内核版本 4.0.9(及之前的修订版),但不适用于内核版本 4.1(及更高版本)。
基本上在内核的后续版本中,我只能读取软件计数器(例如PERF_COUNT_SW_CPU_CYCLES
),但不能读取硬件计数器(例如PERF_COUNT_HW_CACHE_MISSES
)。
更具体地说,在内核版本 4.1 及更高版本中,硬件计数器的读数始终为零。
有谁知道可能导致此问题的原因以及如何解决它?