我正在尝试测量启用 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 版开始sysstat
,sar
可以收集 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.