我有一台英特尔笔记本电脑i7-1065G7cpu.turbostat
报告
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
(这些是 4 个物理/8 个虚拟核心)当我在 CPU 上投入大量单线程负载(使用 计算 pi mpfr
)时,我观察到两个核心(可能是一个物理核心?)以 3500 MHz 的速度运行,而其他核心的频率较低。但它们从未达到更高的涡轮增压频率。
echo 0 > /sys/devices/system/cpu/cpu[2-7]*/online
如果我禁用笔记本电脑上的某些 CPU 核心(例如做达到相应的更高的涡轮增压频率,从而提高性能(之前平均需要 18.5 秒的任务现在需要 16.8 秒)。
当不需要所有核心时,如何让我的新笔记本电脑达到其最大时钟速度?
我在 HP Envy x360 笔记本电脑上使用带有内核 5.4.0 的 Ubuntu 20.04。
我的期望是:
在我的旧笔记本电脑上i7-4712MQ turbostat
给出
30 * 100.0 = 3000.0 MHz max turbo 4 active cores
30 * 100.0 = 3000.0 MHz max turbo 3 active cores
32 * 100.0 = 3200.0 MHz max turbo 2 active cores
33 * 100.0 = 3300.0 MHz max turbo 1 active cores
(这也是一台 4/8 核机器)。在这台机器上,单核负载使一个核心加速到近 3.3 GHz,双核负载使两个核心加速到 3.2 GHz 等。
我还没有检查 Windows 上的单个 CPU 频率,但任务管理器有时会显示高于 3.7GHz 的频率。
更新:所以问题就消失了……我不知道为什么。我确实卸载了linux-cloud-tools
,但我不认为这是原因。
答案1
你写了...
当我抛出一个很大的单线程负载时
如果您的程序是单线程的,它就不需要在其他线程上达到最大频率,所以它不会。
您的链接适用于英特尔® 酷睿™ i7-1065G7 处理器。
您链接的英特尔文档称最大值为 3900 MHz。您的数据似乎显示有一个核心为 3900 MHz,所以我不知道您为什么认为它没有达到最大值。您发布了这个...
35 * 100.0 = 3500.0 MHz max turbo 8 active cores
35 * 100.0 = 3500.0 MHz max turbo 7 active cores
35 * 100.0 = 3500.0 MHz max turbo 6 active cores
35 * 100.0 = 3500.0 MHz max turbo 5 active cores
35 * 100.0 = 3500.0 MHz max turbo 4 active cores
35 * 100.0 = 3500.0 MHz max turbo 3 active cores
38 * 100.0 = 3800.0 MHz max turbo 2 active cores
39 * 100.0 = 3900.0 MHz max turbo 1 active cores
一般来说,如果读数不是最大频率,那是因为它只是间歇性地这样做,所以测量结果只会间歇性地显示出来,或者它不需要达到最大频率,因为存在一些限制,例如 IO。不用担心。如果你编写了一个没有限制的程序,换句话说,它是一个计算受限的线程,我保证它会达到最大频率。
18.5 秒的运行时间可能没有意义,因为您不想使用随机效应来得出结论。200 秒或更长时间运行的作业可能会为您提供更有意义的数据。
答案2
我在类似的设置(i7-9700K CPU,Ubuntu 18.04)上也遇到了类似的情况。我认为我的机器使用情况可能类似:它是一台台式机,我用它来运行一些密集型(但单线程)应用程序,同时可能还打开了 Web 浏览器和一些消息应用程序。我发现原始帖子下评论中的建议可行 - 设置进程的 CPU 亲和性。我曾经taskset
这样做过 [1]。
第一次测试(亲和性设置未发生任何变化):所有 8 个核心都处于“空闲”状态,利用率约为 10%。我启动了一个单线程、CPU 密集型任务。一个核心跳到 100%,我看到所有核心都使用 3.6 GHz(未使用 Turbo 时的最大值)i7z
。
第二项测试:将所有正在运行的进程限制在 CPU 核心 0 和 1 上,使用:for i in `sudo ps -aux | awk '{ print $2 }'`; do sudo taskset -a -p -c 0-1 $i; done
。现在这两个核心的使用率为 30-40%,其余核心的使用率为 0%(尽管随着操作系统启动进程,其他一些核心可能会开始活动)。然后启动相同的单线程 CPU 密集型任务。一个核心跳到 100%,但现在我看到它达到了 4.9 GHz 的最大涡轮频率。之后,我将亲和力重新设置为使用所有核心,将范围替换0-1
为0-7
(在我的情况下)。
[1]http://manpages.ubuntu.com/manpages/focal/man1/taskset.1.html