如何解决查看/proc/cpuinfo文件中CPU频率与实例规格说明中不一致的问题

本文以Alibaba Cloud Linux 3系统为例,介绍了查看/proc/cpuinfo文件中CPU的频率与实例规格说明中的频率不同的原因及解决方案。

问题现象

在闲置状态下,通过/proc/cpuinfo看到部分CPU的频率为800 MHz,和实例规格说明中的频率值不同,如下图所示。

image

如涉及以下内核/操作系统,也可以参考本文解决。

内核/操作系统

内核/操作系统

版本

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基频)。

解决方案

说明

在闲置状态下,只是显示的频率不符合预期,实际规格还是能够达到规格定义的频率,不影响使用和性能。

通过cpupowerturbostat等工具获取准确的频率信息。

本文以cpupower工具获取频率信息为例。

sudo cpupower frequency-info

结果如下图所示,当前的CPU频率为3200 MHz。

image

重要

部分实例规格不支持通过上述方式查询CPU频率,请以实例规格族中具体实例的主频为准。