如何测量在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函数从静态中删除空闲的tick,但似乎只适用于xen内核。 有没有其他的方法来衡量平均CPU频率?

新的开发版本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.2GHz

也许sar是你在找什么。 从sysstat版本9.0.0开始, 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.