本文以Alibaba Cloud Linux 3系統為例,介紹了查看/proc/cpuinfo文件中CPU的頻率與實例規格說明中的頻率不同的原因及解決方案。
問題現象
在閑置狀態下,通過/proc/cpuinfo
看到部分CPU的頻率為800 MHz,和實例規格說明中的頻率值不同,如下圖所示。
如涉及以下內核/操作系統,也可以參考本文解決。
內核/操作系統 | 版本 |
Linux kernel | v5.11及以上版本 |
Debian | 12.0及以上版本 |
Fedora | 33.0及以上版本 |
Redhat | 9.0及以上版本 |
AlmaLinux | 9.0及以上版本 |
CentOS Stream | 9.0及以上版本 |
SLES/OpenSUSE | 15.4及以上版本 |
Ubuntu | 22.0及以上版本 |
Alibaba Cloud Linux | Alibaba Cloud Linux 3 |
關于Alibaba Cloud Linux 3系統通過/proc/cpuinfo
獲取CPU頻率的優化說明,請參見通過/proc/cpuinfo獲取CPU頻率優化說明。
問題原因
為優化系統性能和CPU響應速度,Linux內核在5.11版本之后合入了patch(commit ID: 3fcd6a230fa7d03bffcb831a81b40435c146c12b)。
x86/cpu: Avoid cpuinfo-induced IPIing of idle CPUs
Currently, accessing /proc/cpuinfo sends IPIs to idle CPUs in order to
learn their clock frequency. Which is a bit strange, given that waking
them from idle likely significantly changes their clock frequency.
This commit therefore avoids sending /proc/cpuinfo-induced IPIs to
idle CPUs.
當訪問/proc/cpuinfo
時,將通過rcu_is_idle_cpu
函數判斷當前CPU是否處于idle(閑置)狀態,如果CPU處于idle狀態,則直接返回min_freq
(默認內核定義的是800 MHz,有些內核版本獲取的是CPU基頻)。
解決方案
在閑置狀態下,只是顯示的頻率不符合預期,實際規格還是能夠達到規格定義的頻率,不影響使用和性能。
通過cpupower
或turbostat
等工具獲取準確的頻率信息。
本文以cpupower
工具獲取頻率信息為例。
sudo cpupower frequency-info
結果如下圖所示,當前的CPU頻率為3200 MHz。
部分實例規格不支持通過上述方式查詢CPU頻率,請以實例規格族中具體實例的主頻為準。