我相信您的很多困惑与 cpufreq 的功能与硬件的实际功能的模糊映射有关。
这是对硬件和操作系统上发生的事情的描述。
处理器是同一硅基板上的内核集合。这些内核是我们过去所说的带有一些增强功能的 CPU。CPU 现在具有运行多个硬件线程(超线程)的能力,每个硬件线程都相当于一个旧类型的 CPU。综上所述,1270v3 是一个四核(如果我没记错的话),这意味着它在同一个硅衬底上有 4 个内核。每个内核可以支持两个硬件线程,每个硬件线程相当于操作系统所说的 CPU(我将称之为虚拟 CPU)。所以从操作系统的角度来看,1270v3 有 8 个(虚拟)CPU。
操作系统看不到包、内核或硬件线程。它看到 CPU,对它来说似乎有 8 个。
为了使问题进一步复杂化,现代处理器具有各种支持省电状态的硬件,称为 P 状态、C 状态和封装 C 状态。为什么我要提到这些?这是因为它们与处理器的频率密切相关。而cpufreq声称为用户提供对处理器频率的控制。
现在,除了阅读联机帮助页和网络上的其他材料之外,我对 cpufreq 并不熟悉。从我的阅读来看,它有很多特质,所以我将从广泛的角度来谈谈它在做什么。
一般来说,cpufreq 有很多通用能力,硬件或内核可能支持也可能不支持。这很令人困惑,因为看起来功能在那里,但事情并没有像您期望的那样发生。例如,cpufreq 给人的印象是您可以独立设置每个 CPU 的频率。实际上,在超线程系统上,两个“CPU”与每个内核相关联,并且必须具有相同的频率。
cpufreq 应该控制的许多功能都与处理器的功率效率特性相关,但同样,它与处理器实际硬件功能的映射是不完整且具有误导性的。尽管 cpufreq 似乎允许您设置最大和最小频率,但处理器硬件不能以这种方式工作。在现代英特尔处理器(例如 1270v3)中,有一种称为 P 状态的东西。这些 P 状态是频率-电压对,可降低处理器的频率(并降低其电压)以降低处理器的功耗,但代价是应用程序需要更长的运行时间。尽管 cpufreq 给人的印象是它们是任意的,但这些频率-电压配对并不是任意的。
这是什么意思呢?除了评论者提到的线程迁移问题之外,cpufreq 的行为方式不会像您期望的那样,因为它似乎具有它实际上没有的功能,并且它实际上具有的功能仅大致映射到实际硬件和操作系统的功能。
我在您的文字中嵌入了一些进一步的评论。
使用 1270v3 和单线程应用程序时,我的性能已经接近尾声,但是当我观看像 atop 这样的监控工具时,我不明白这一切是如何工作的。我试图找到一篇关于这类主题的好文章,但它们要么是用我不懂的语言解释的,要么不是关于我想知道的东西。我希望在这里问这种东西是可以的。
据我了解,单线程应用程序只使用一个线程来完成所有/大部分工作。[是的,但这并不意味着线程被锁定到特定的虚拟 CPU 或内核。] 所以性能是由 CPU 的单线程能力决定的。【没那么简单。操作系统会迁移线程,它有自己的维护进程等] 在我写这个问题之前,我玩了一下 CPU 频率,并注意到虽然只有两个应用程序实例在运行,但使用情况是在所有内核之间共享的。所以我假设线程在这些核心之间跳转。因此,我使用 cpufreq-set -g performance 将 CPU 缩放设置为性能。结果是所有 CPU 内核/线程都像以前一样保持在大约 2GHz,除了一个永久在 3.5GHz (100%) 上。因为我只改变了一个核心的缩放比例,为什么仍然在所有内核之间共享使用?我的意思是应用程序以大约 300% 的速度运行,为什么它不坚持 100% 的 CPU 内核?[由于我看不到你在观察什么,我不太明白你在问什么。]
此外,当我注意到只有一个 CPU 进行了扩展时,我查看了帮助页面并发现 -r 应该使用性能设置扩展所有内核。不幸的是,什么都没有改变。(这是 Ubuntu 1404 中的错误吗?)所以我使用 -c 和数字 8(8 个线程)-> 不起作用。4 -> 有效,但只能从 8 个内核中扩展 2 个内核。 7 -> 扩展 4 个内核。[我没有使用 cpufreq 所以不能直接说明它的行为,但是手册页暗示“-c”指的是特定的虚拟 CPU,而不是虚拟 CPU 的数量。]所以我想知道,这不是支持超线程还是整个程序有问题?[再一次,从你的解释中我不确定你在做什么,但 n->n/2 的行为对我来说是有意义的。您可以更改核心的频率,但由于每个核心都有两个超线程/虚拟 CPU,
但是,据我了解,具有最大频率的 CPU 和线程在监视工具中跳来跳去,因为它们显示了平均使用率,这看起来像是共享的。我想对了吗?[再说一次,我不确定你在观察什么。无论是在物理上还是在顶部,CPU 名称都不应更改,这意味着 CPU001 将始终指代同一个虚拟 CPU。尽管用户线程可以,但具有最大频率的内核不应该在物理上跳来跳去。需要注意的是,监控工具可能是 CPU 的重度用户。如果它导致线程跳转到不同的虚拟 CPU,那么这种大量使用可能会使您难以确定您的处理器使用情况。]
将一个 cpu 强制到 3.5GHz 并将应用程序强制到这个内核可以提高性能,或者我想知道的只是关于它们每秒显示的数据之间的平均计算。[我找到了一个很好的解释 atop 有很多有用的屏幕截图:http://www.unixmen.com/linux-basics-monitor-system-resources-processes-using-atop/]如果是这样,如果功耗无关紧要,我应该以 cpufreq-set -c 7 -g 性能运行最佳吗?[这完全取决于您的系统上正在运行的其他进程。如果您的系统除了您的进程之外大部分时间都是空闲的,那么将核心强制到某个频率不会有任何影响。[我怀疑“州长”的所作所为。该语言似乎指的是能效/性能(“平衡”、“节能”、“性能”等),但细节与当今硬件的能力不匹配。]
感谢您到目前为止的阅读,希望您有时间帮助我