Ubuntu turbo boost - 提升所有核心而不是一个核心以进行单线程加载

Ubuntu turbo boost - 提升所有核心而不是一个核心以进行单线程加载

我安装了 Ubuntu 19.04 的所有更新,以及 Intel i9 9900k 处理器和 Asrock H370M pro4 主板,并更新至最新的 BIOS。

我无法让 Turbo boost 为单线程负载工作(我有很多单线程负载,并且 Ghz 的提升会非常有帮助)如果我运行一些固有的单线程负载(并且可以确认只加载了一个核心),例如:

sysbench --threads=1 --time=1000 --test=cpu run

我看到所有核心都跳升至 4.7Ghz。我预计 100% 负载下的核心应跳升至 5.0ghz

我已启用涡轮增压:

$ cat /sys/devices/system/cpu/intel_pstate/no_turbo
0

(如果我禁用它处理器速度不会超过 3.7)

我读到过,有时候某些工具无法报告准确的频率,而事实上,涡轮增压可能有效 - 我尝试了多种工具,但都没有报告任何不同(所有核心最大为 4.7,执行单线程负载)。

turbostat例如正确识别涡轮增压参数:

cpu1: MSR_IA32_POWER_CTL: 0x003c005d (C1E auto-promotion: DISabled)
cpu1: MSR_TURBO_RATIO_LIMIT: 0x2f2f2f3030313232
47 * 100.0 = 4700.0 MHz max turbo 8 active cores
47 * 100.0 = 4700.0 MHz max turbo 7 active cores
47 * 100.0 = 4700.0 MHz max turbo 6 active cores
48 * 100.0 = 4800.0 MHz max turbo 5 active cores
48 * 100.0 = 4800.0 MHz max turbo 4 active cores
49 * 100.0 = 4900.0 MHz max turbo 3 active cores
50 * 100.0 = 5000.0 MHz max turbo 2 active cores
50 * 100.0 = 5000.0 MHz max turbo 1 active cores

尽管如此,在单线程负载下,尽管只加载了一个核心,但它也显示所有核心都为 4.7Ghz:

$cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
4815705
4721193
4799105
4772830
4794879
4782198
4891662
4714048
4749921
4737188
4801009
4859085
4734327
4735355
4747906
4826031

BIOS 中没有设置可以使所有核心始终以最大速度工作(没有核心优化或任何与核心远程相关的东西),我尝试使用所有可能的设置而没有任何变化。

我尝试将 CPU 调节器改为性能,但没有效果——只有所有核心始终锁定在 4.7,而不是按需锁定。

有趣的是,如果我禁用核心 echo 0 | sudo tee /sys/devices/system/cpu/cpu1/online 并仅留下 2 个核心在线 - 它们确实达到了 5.0 Ghz,但这绝对不是一个可持续的解决方案。

请告知还能做些什么

先感谢您!

答案1

您的计算机是否运行带有所有 GUI 内容的 Ubuntu 桌面版?问题是,台式计算机上的“空闲”实际上并非如此,您在 CPU 频率列表中观察到的是由于其他内核被唤醒来执行其他任务。

我的主要测试计算机是一台 Ubuntu 16.04 服务器(无 GUI),搭载较旧的 i7-2600K。“空闲”比台式机要好,但仍然不是很好。但是,如果我禁用几个服务,“空闲”会变得更好,当我们随后应用单个 100% 负载时,我们开始观察到在最大单核活动 CPU 频率上花费了相当多的时间(12.5% 是满载时 8 个 CPU 中的 1 个):

cpu5: MSR_IA32_POWER_CTL: 0x0004005d (C1E auto-promotion: DISabled)
cpu5: 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

doug@s15:~/temp$ cat set_cpu_turn_off_services
#! /bin/bash
# Turn off some services to try to get "idle" to be more "idle"
sudo systemctl stop mysql.service
sudo systemctl stop apache2.service
sudo systemctl stop nmbd.service
sudo systemctl stop smbd.service
sudo systemctl stop cron.service
sudo systemctl stop winbind.service
sudo systemctl stop apt-daily.timer
sudo systemctl stop libvirtd.service

doug@s15:~/temp$ sudo ./set_cpu_turn_off_services
doug@s15:~/temp$ sudo turbostat --quiet --Summary --show Busy%,Bzy_MHz,PkgTmp,PkgWatt,GFXWatt,IRQ --interval 15
Busy%   Bzy_MHz IRQ     PkgTmp  PkgWatt GFXWatt
0.03    1600    686     25      3.79    0.12  <<< Check my idle, before applying load
0.02    1600    401     27      3.78    0.12
0.02    1600    395     25      3.78    0.12
0.02    1600    356     26      3.78    0.12
0.02    1600    395     25      3.78    0.12
10.25   3796    12991   42      19.44   0.12  <<< Apply single 100% load
12.51   3800    15777   44      23.12   0.12  <<< max turbo freq for 1 active core.
12.51   3800    15740   45      23.21   0.12
12.51   3800    15769   47      23.31   0.12

答案2

要获取每个核心最准确的当前 CPU 速度,请使用:

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
1367598
1617138
1425100
1719268
1414236
1545359
1295130
1163015

由于隐含小数位为 3 位,因此报​​告的第一个核心速度1367598实际上是 1,367.598 MHz。使用此方法时,您应该会看到负载下的核心频率高于其他核心。


总结

我遇到了一个故障,大约一年了,所有处理器在无负载的情况下都会以接近最大频率运行。然后在视频流下,它们都会降至约 50% 的频率,负载约为 20% 到 25%。这个故障一直持续到上周我安装内核时4.14.140。至少现在看来故障已经消失了。

相关内容