我的 CPU 少了 40% 的频率,而系统里一切正常

Ls5ZQ 2026-10-28 15:18 1


444,有妖气,快跑




为了让帖子不那么水,顺便把之前踩的一个坑发一发。


这颗 i7-10700 标称睿频 4.8GHz。我最近才发现,它从装机起就没跑到过 2.9GHz 以上。


不是降频,不是过热,不是电源模式没调对。是 BIOS 里有个开关是关的——而这件事在操作系统里,你查不出来、也改不了。


先科普一下:基频和睿频是两个东西


CPU 参数表上通常有两个频率,很多人只看后面那个大的:



  • 基础频率(这颗是 2.9GHz)——厂商保证在标称散热和功耗条件下,所有核心持续跑得动的频率。它是个承诺。

  • 睿频 / Turbo Boost(这颗单核 4.8GHz、全核 4.6GHz)——当温度、功耗、电流都有余量时,CPU 自己决定往上冲的频率。它是个上限,不是承诺。


关键在于:睿频不是"超频"。它是 Intel 官方特性,出厂就该开着,用不用得上由 CPU 根据实时状态自己判断。你花钱买的那个 4.8GHz 就是它。


所以睿频被关掉意味着什么?CPU 被永久钉死在"保证值"上,永远拿不到那 60% 的上浮空间。 而系统跑得好好的,什么都不报错。


我的现象就是这样:


$ grep MHz /proc/cpuinfo
cpu MHz : 2899.997
cpu MHz : 2899.997

满载 2900,空载 2900,一动不动,正好等于基频。


第一反应是错的


看到频率上不去,我先怀疑是调度策略:


$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
powersave

刷成 performance。频率纹丝不动。


这里就有个信号值得注意了:如果只是省电策略保守,改完至少会有变化。一点变化都没有,说明限制在更底层。


三条证据


第一条:内核拒绝了 root 的写入。


$ sudo bash -c 'echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo'
bash: echo: 写入错误: 不允许的操作

注意这是 root 身份下的 EPERM。这不是权限不够,是内核在说"这件事我做不了"。


第二条:dmesg 直说了。


intel_pstate: Turbo disabled by BIOS or unavailable on processor

但这句有个"or"——到底是 BIOS 关的,还是这颗 CPU 压根不支持?得再往下一层。


第三条:直接读 MSR。


MSR(Model Specific Register)是 CPU 内部的控制寄存器,管着一大堆硬件行为开关。Linux 提供了 msr 模块可以直接读写:


$ sudo modprobe msr
$ sudo rdmsr 0x1a0 # IA32_MISC_ENABLE
4000850089


0x1A0 这个寄存器的 bit 38 是 Turbo Disable 位。0x4000000000 正好是 2^38,所以读出来的这个值 bit38 = 1——是固件把它置起来的。


再看另一个寄存器确认 CPU 本身的能力:


$ sudo rdmsr 0x1ad        # MSR_TURBO_RATIO_LIMIT
2e2e2e2e2f2f3030

每两个十六进制位是一档倍频,从低位起依次对应 1 核活跃、2 核活跃……的最大倍频。0x30 = 48 → 4.8GHz,0x2e = 46 → 4.6GHz。


结论明确了:CPU 支持单核 4.8G、全核 4.6G,是被 BIOS 锁在 2.9G 的。


为什么系统里改不了


这一点值得单独说,因为它决定了所有"用脚本/服务/内核参数解决"的思路都是死路。


/sys/devices/system/cpu/intel_pstate/no_turbo 这个节点,在 BIOS 禁用 Turbo 时是只读的。内核里 store_no_turbo() 的逻辑是:先检查全局标志 turbo_disabled,为真就直接返回 -EPERM。而这个标志正是启动时从 IA32_MISC_ENABLE 的 bit38 读出来的。


换句话说:固件说了不算数的事,内核不会替你违抗。 这是设计如此,不是 bug。


⇒ 只能进 BIOS。我这台是联想 ThinkServer,路径在 高级菜单 → CPU 菜单 → Turbo模式。


顺带一提,不同产品线的 BIOS 菜单结构差别很大。我一开始按 ThinkCentre 的路径去找,压根没有那一项。先看主板或整机的商标标识,再去对路径。


改完之后










































改前 改后
no_turbo 1 0
MSR 0x1A0 4000850089 850089
cpuinfo_max_freq 2.9 GHz 4.8 GHz
dmesg Turbo disabled by BIOS HWP enabled
轻载实测 2900 MHz 4600 MHz
16 线程满载 2900 MHz 3100~3700 MHz

满载没跑到 4.6G,这不是没开好


改完看到满载只有 3100~3700,我一度怀疑没生效。查了温度:


Package id 0:  +79°C  (high = +80.0°C, crit = +100.0°C)

79°C,紧贴着 80°C 的阈值。


这台是小机箱的商用整机,散热能力有限。睿频的本质就是"在温度和功耗允许的范围内自己往上冲"——现在温度不允许了,它自己就收着跑。


这其实正是 BIOS 里那句说明写的:"可以使处理器评估其本身的散热、电流和功率动态地调整出一个适合的频率上限。"


所以这不是没开好,是瓶颈从"BIOS 开关"转移到了"散热"。想再放开一截,得清灰换硅脂,或者调 BIOS 里的风扇策略。


但即便被散热压着,满载相比原来仍有 7~27% 的提升,而轻载和单线程场景是实打实从 2.9G 到了 4.6G——日常响应速度的差别,比跑分上那点百分比明显得多。


花一分钟查查你的机器


# 返回 1 就说明睿频被禁用了
cat /sys/devices/system/cpu/intel_pstate/no_turbo

# 看内核怎么说
dmesg | grep -i turbo

# 对比"当前能达到的最高频率"和 CPU 标称睿频
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq # 单位 kHz

如果 cpuinfo_max_freq 恰好等于你的基础频率,那基本就中了。


这类问题特别容易长期潜伏:机器能开机、能干活、跑分也不算难看,只是比它应有的样子慢一大截。没有任何日志会告诉你"你的 CPU 本可以快 60%"。


品牌整机、二手机器、公司发的开发机,都值得查一眼——出厂或者前任用户为了控制发热噪音关掉这个开关,是相当常见的事。

最新回复 (0)
    没有回复
* 帖子来源NodeSeek
返回