我有一台运行在 ubuntu 20.04 上的新英特尔 i7-9700k。此处理器的基本频率应为 3.6 GHz,超频后的最大频率应为 4.9 GHz。
我今天做了一个昂贵的计算,并查看了时钟频率
watch -n.1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""
CPU 内核主频约为 4.5 GHz。怎么会这样?我没有更改 BIOS 设置?根据 lm-sensors 的数据,温度处于正常范围内(大部分低于 80 'C)。根据需求:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
返回
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
和
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
返回
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
答案1
忙碌的时候
当您运行“昂贵的计算”时,有几个原因导致您的 CPU 可能无法达到 4.9 GHz,而只能达到 ~4.5 Ghz。一个可能的原因是,特别是如果您的应用程序是多线程的,典型的最大频率降低与有多少个内核处于活动状态有关。示例 (i7-2600K),摘自 turbostat:cpu1: MSR_TURBO_RATIO_LIMIT: 0x23242526
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
36 * 100.0 = 3600.0 MHz max turbo 3 active cores
37 * 100.0 = 3700.0 MHz max turbo 2 active cores
38 * 100.0 = 3800.0 MHz max turbo 1 active cores
通常情况下,这种情况极不常见(i5-9600K,但这不是处理器的默认设置,我是在 BIOS 中做的):
cpu3: MSR_TURBO_RATIO_LIMIT: 0x2b2b2e2e2e2e2e2e
43 * 100.0 = 4300.0 MHz max turbo 8 active cores <<< I don't have 8 cores
43 * 100.0 = 4300.0 MHz max turbo 7 active cores <<< I don't have 7 cores
46 * 100.0 = 4600.0 MHz max turbo 6 active cores
46 * 100.0 = 4600.0 MHz max turbo 5 active cores
46 * 100.0 = 4600.0 MHz max turbo 4 active cores
46 * 100.0 = 4600.0 MHz max turbo 3 active cores
46 * 100.0 = 4600.0 MHz max turbo 2 active cores
46 * 100.0 = 4600.0 MHz max turbo 1 active cores
其他原因包括您的功率偏置设置、I/O 等待、功率或热节流(您提到热不是问题,只是说说而已)。如果您想要获得最大的效果,您可以使用性能调节器而不是省电调节器。虽然许多人推荐更高级的工具,但我使用原语:
doug@s18:~/c$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
powersave
powersave
powersave
powersave
doug@s18:~/c$ echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
doug@s18:~/c$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance
performance
performance
performance
performance
performance
空闲时
当以每秒 10 次的高速率对 CPU 进行采样时,命令本身通常会对系统产生影响,从而导致观察到的结果出现偏差。请记住,空闲的 CPU 可以一次进入非常深的空闲状态几秒钟,以高速率唤醒它们只是为了采样频率不是一个好主意,但在用户中却非常常见。如果您想知道系统发生了什么,那么我建议您使用 tubostat,原因有二:它是一款非常好的工具;它也是上游升级的首选工具。但请慢慢采样。示例(大多数情况下,我发现摘要信息已经足够好了,但您可以深入了解大量信息。我从最初的信息中保留了与 HWP 相关的行):
$ sudo turbostat --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 6
...
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, No-HWPpkg, EPB
...
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x0109252e (high 46 guar 37 eff 9 low 1)
cpu0: MSR_HWP_REQUEST: 0x8000ff01 (min 1 max 255 des 0 epp 0x80 window 0x0 pkg 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000001 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
...
Busy% Bzy_MHz IRQ PkgTmp PkgWatt GFXWatt
0.03 956 262 31 1.82 0.00
0.03 800 122 31 1.85 0.00 <<< Notice the busy % and low CPU freq.
0.03 800 131 32 1.86 0.00
0.03 800 166 31 1.86 0.00
0.03 800 140 31 1.86 0.00
0.03 800 128 31 1.83 0.00
0.03 800 128 31 1.78 0.00
0.02 800 99 31 1.75 0.00
0.03 800 139 31 1.78 0.00
0.02 800 108 31 1.58 0.00
0.03 800 144 31 1.66 0.00
0.03 800 121 31 1.72 0.00
现在,仅仅因为您看到 CPU 频率高得多,并不意味着您的功耗高得多(如果有的话)。如果频率更高,CPU 也会更快地完成工作,并且它会更快、更长时间地返回睡眠状态。示例:
Busy% Bzy_MHz IRQ PkgTmp PkgWatt GFXWatt
0.02 800 100 31 1.90 0.00 <<< notice slightly different baseline than above (different kernel today)
0.02 800 93 31 1.90 0.00
0.03 800 130 31 1.90 0.00
0.05 800 208 31 1.90 0.00
0.04 800 169 31 1.90 0.00
0.05 1069 199 31 1.91 0.00
0.06 1904 285 31 1.94 0.00
0.00 4548 98 31 1.93 0.00
0.00 4600 89 32 1.93 0.00
0.01 4545 129 32 1.93 0.00 <<< Cost was about 0.03 watts.
0.00 4601 109 31 1.93 0.00
0.01 4559 140 31 1.94 0.00
答案2
我读了你的问题,你对看到如此高的频率值感到惊讶。核心速度的选择并不简单。您可以通过输入命令来获得更多详细信息cpufreq-info
。它应该显示current policy
您的调速器可以在800 MHz and 4.90 GHz
或类似之间进行选择。(我的 CPU 是 i9-9900K,显示介于之间800 MHz and 5.00 GHz
。)
如果您确实想进一步限制频率,可以使用cpufreq-set
。