为什么CPU频率时序统计全为零?

ænd*_*rük 6 cpufreq

CPU频率定时统计数据都是零:

$ sort --unique /sys/devices/system/cpu/cpu*/cpufreq/stats/time_in_state | column
1600000 0       2100000 0       2600000 0       3100000 0
1700000 0       2200000 0       2800000 0       3300000 0
1900000 0       2400000 0       2900000 0       3400000 0
2000000 0       2500000 0       3000000 0       3401000 0
Run Code Online (Sandbox Code Playgroud)

这怎么可能?真的没有时间花在任何状态吗?

细节

  • /proc/cpuinfo
  • CPU 显然在频率状态之间转换:

    $ grep --perl-regexp --only-matching '(?<=cpu MHz\t\t: )[\d.]+' /proc/cpuinfo | column
    1600.000        1600.000        3401.000        1600.000
    2900.000        1600.000        2100.000        1600.000
    $ while sleep 10; do column /sys/devices/system/cpu/cpu*/cpufreq/stats/total_trans; done
    17839   17278   17497   17336   12332   14358   14054   17647
    17885   17313   17545   17384   12359   14394   14082   17691
    17888   17323   17556   17391   12359   14399   14085   17693
    17904   17336   17576   17417   12374   14402   14091   17696
    
    Run Code Online (Sandbox Code Playgroud)
  • 有人在论坛上问过这个问题,但从未收到回复。

mas*_*ur1 5

Linux 内核 3.11 中存在与此相关的问题。该错误已通过以下补丁修复:

http://permalink.gmane.org/gmane.linux.kernel.cpufreq/11672%3E

https://lkml.org/lkml/2013/9/7/126

升级内核(到 3.12-rc1 或更高版本)应该可以解决问题。