如何测量Linux中的平均CPU频率?

如何测量Linux中的平均CPU频率?

我正在尝试测量启用 DVFS 的 CPU 在特定间隔内的平均 CPU 频率,定期采样 /proc/cpuinfo 的明显方法有很大的差异。cpufreq-stats 驱动程序给了我一些希望,例如

cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
2600000 118148
2000000 8562
1600000 11041
1200000 3428602 # 很多刻度是空闲刻度

但不幸的是,它与空闲的滴答声混合在一起(参见补丁“跟踪 time_in_state 时不考虑空闲时间”)在空闲时间,CPU很可能会降到最低频率,从而严重扭曲频率分布。

上面的补丁利用 account_idle_tick 函数从静态中删除空闲刻度,但它似乎只适用于 xen 内核。还有其他方法可以测量平均 CPU 频率吗?

答案1

新开发版本Sysstat 9.1.6包含一个新选项 (-m FREQ) 来报告平均 CPU 频率,例如

$ sar -m FREQ -P ALL 0
Linux 2.6.30.10-105.2.23.fc11.i686.PAE (palmer.localdomain)     10/23/2010     _i686_        (2 CPU)

02:36:09 PM     CPU   wghMHz
02:36:09 PM     all   1042.23
02:36:09 PM       0   1039.43
02:36:09 PM       1   1166.65

平均权重是在该频率上花费的时间,例如在 10 秒的报告间隔内,前 8 秒频率为 1GHz,最后 2 秒频率为 2GHz,然后平均频率为 1.2 GHz

答案2

也许sar就是你要找的。从 9.0.0 版开始sysstatsar可以收集 CPU 频率。来自man sar

-m     Report  power management statistics.  Note that these statistics
       depend on sadc option "-S POWER" to be collected.  The following
       value is displayed:

       MHz
         CPU clock frequency in MHz.

相关内容