频率缩放调速器扩展了太多核心

频率缩放调速器扩展了太多核心

我有两台机器,运行相同的操作系统、相同的内核、相同的 CPU 频率缩放驱动器,以及相同的 CPU 频率缩放调节器。

如果一个进程固定一个核心,则将提高所有核心频率。

如果有一个进程固定一个核心,则只会提升一个物理核心。

机器A

CPU: Intel(R) Xeon(R) W-2140B CPU @ 3.20GHz
Scaling driver: intel_pstate
Scaling governor: powersave
OS: Ubuntu 21.10
Kernel: 5.13.0-22-generic

机器B

CPU: 11th Gen Intel(R) Core(TM) i5-11600K @ 3.90GHz
Scaling driver: intel_pstate
Scaling governor: powersave
OS: Ubuntu 21.10
Kernel: 5.13.0-22-generic

观察这些例子:

将两个核心固定在机器 A 上:(请注意,该机器具有超线程,因此可扩展 16 个可用虚拟核心中的 4 个。)

在此输入图像描述

将两个核心固定在机器 B 上:(请注意,该机器有 6 个具有 HT 的核心,并可扩展所有 12 个虚拟核心。)

在此输入图像描述

截图是频率顶部,我自己编写的开源频率监视器。橙色勾号显示每个核心上的负载,定义为用户+内核周期相对于总周期(用户+内核+空闲)的百分比。

为什么 i5-11600K CPU 会限制所有核心的运行,即使只需要一个核心?

更新:我发现机器之间的一个区别是 pstate 的数量。

因为Xeon/sys/devices/system/cpu/intel_pstate设置为33,而corei5设置为42。我不确定这有什么意义。

答案1

在 Intel CPU 中,有几种不同的方法来处理核心限制。学习所有这些是非常技术性的。大多数人只是了解他们使用的CPU。但我确信是固件(BIOS、UEFI)允许的控制级别和/或处理器的内部结构给您带来了这些不同的结果。

我在我们的两台机器上看到了同样的情况,都运行 Debian Bullseye,但处理器不同。有时$ powertop可以揭示真相。它的目的是调整笔记本电脑的功耗,但由于不同的原因,台式机上显示的信息很有趣。

我使用 powertop 检查内核是否在 Turbo 模式下运行,以及它们的节流程度等。它也适用于 AMD。

你已经写了那个监视器,所以看来你在这个主题上可能比我知道得更多。

这个论坛不适合讨论很多细节,因为材料是如此大量和技术性。我希望这有帮助。

答案2

我已经能够使 corei5 机器表现得更合适,并且只提高我们实际工作的核心的频率。

为此,我发现我必须切换 intel_pstate 驱动程序模式。

您可以在/sys/devices/system/cpu/intel_pstate/status之间切换积极的被动的模式。

主动模式: 在此模式下,驱动程序绕过 CPUFreq 的缩放调节器层,并为 P 状态选择提供自己的缩放算法。

被动模式: ...该驱动程序的行为类似于常规 CPUFreq 缩放驱动程序。也就是说,当需要与硬件通信以更改 CPU 的 P 状态时,通用缩放调节器会调用它......

如果我读这个正确的是,我认为在主动模式下,CPU 来自操作系统本身的反馈较少。我认为 CPU 错误地猜测所有核心都需要节流。

仍然无法解释的是,Xeon CPU 在以下方面表现得很好:积极的使用相同的 intel_pstate 驱动程序进行移动。但这可能只是一种猜测,并非所有 CPU 都是一样的。或者甚至可能是可疑的主板或 BIOS 无法正确执行 pstates。

相关内容