周期性能计数不一致而不反映CPU频率

时间:2018-05-24 21:18:35

标签: arm embedded-linux performancecounter

说明: 我已经在ARM v7平台上编写了一个用于性能计数器监控的Linux内核模块,该平台具有皮质A-15和A-7处理器(Odroid XU3)。我试图在我的研究中使用的一个计数器是循环计数,它来自ARM技术参考手册有自己的专用计数器。我已经检查了我的代码与其他实现和在线发现的ARM引用;这是启用CPU计数器的部分片段:

使用的资源:

问题: 当我在固定的CPU频率(核心0的情况下为1.4GHz)上打印固定采样周期(100ms)的周期时,我看到模块返回的值存在很大的差异。有关此示例,请参见下表。不仅方差看起来非常高,而且测量的周期数不能反映出在给定采样时间和固定频率的情况下我期望看到的周期数(对于给定的情况,我预期每个样本需要1.4e8个周期)。什么可能导致这种与预期周期数的分歧?

Variability of measured cycles for kernel module running across all cores and across just core 0.

1 个答案:

答案 0 :(得分:1)

经过与同事的进一步讨论后,我认为测量和预期周期之间的差异是 cpuidle :它是Linux内核中的一个子系统,它将CPU内核置于低功耗状态核心没有做任何事情。一些最低状态关闭时钟,这可能导致循环计数器停止递增。本文简要介绍了cpuidle及其工作原理:https://lwn.net/Articles/384146/