了解cpu频率,线程选择等

时间:2014-07-23 18:25:33

标签: multithreading performance cpu cpu-usage single-threaded

使用1270v3和单线程应用程序我的表现已经结束但是当我看到像atop这样的监控工具时,我不明白这些东西是如何工作的。我试图找到一篇关于这类话题的好文章,但是他们要么用我不懂的语言解释,要么用我想知道的东西解释。我希望在这里问这种东西是可以的。

根据我的理解,单线程应用程序仅对所有/大部分工作使用一个线程。因此性能由CPU的单线程功率定义。 在我写这个问题之前的一刻,我玩了CPU频率,并注意到虽然只有两个应用程序运行实例,但所有内核共享使用情况。 所以我假设线程在这些核心之间跳转。 因此,我使用cpufreq-set -g performance将CPU缩放设置为性能。结果是所有CPU核心/线程都保持在2GHz左右,而不是像以前那样永久在3.5GHz(100%)。由于我只更改了一个核心的扩展,为什么仍然在所有核心共享使用?我的意思是该应用程序的运行速度约为300%,为什么它不会以100%的速度粘在CPU核心上?

此外,当我注意到只有一个CPU扩展时,我查看了帮助页面,发现-r应该使用性能设置来扩展所有核心。不幸的是没有任何改变(这是Ubuntu 1404中的一个错误吗?)所以我使用-c编号8(8个主题) - >没用。 4 - >有效,但只能扩展8个核心。7 - >缩放4个核心。所以我想知道,这不支持超线程,还是整个程序都是错误的?

然而据我了解,具有最大频率的CPU和线程在监视工具中跳跃,因为它们显示平均使用情况,而不是看起来像共享。我认为这是对的吗?

将一个cpu强制到3.5GHz并强制应用程序到这个核心可以提高性能,或者所有的东西我只想知道它们每秒显示的数据之间的avg计算。 如果是这样,我是对的,如果功耗无关紧要,我应该最好用cpufreq-set -c 7 -g performance

感谢阅读到目前为止,我希望你有时间帮助我理解整个事情。

Atop示例屏幕截图:

http://i.imgur.com/VFEBvLx.png

http://i.imgur.com/cBKOnJM.png

http://i.imgur.com/bgQfwfU.png

1 个答案:

答案 0 :(得分:2)

我相信你的很多困惑都与cpufreq的功能模糊映射到硬件的实际功能有关。

以下是对硬件和操作系统中发生的事情的描述。

处理器是同一硅基板上的核心集合。核心是我们用来调用CPU的一些增强功能。 CPU现在具有运行多个HW线程(超线程)的能力,每个硬件线程等同于一个旧类型的CPU。综上所述,1270v3是四核(如果我没记错的话),意味着它在同一硅衬底上有4个核心。每个内核可以支持两个HW线程,每个HW线程等同于操作系统调用CPU(我称之为虚拟CPU)。因此从操作系统的角度来看,1270v3有8个(虚拟)CPU。

操作系统没有看到软件包,内核或硬件线程。它看到CPU,并且它看起来有8个。

为了使问题进一步复杂化,现代处理器具有各种硬件支持省电状态,称为P状态,C状态和封装C状态。为什么我提这些?这是因为它们与处理器的频率密切相关。 cpufreq声称可以让用户控制处理器的频率。

现在,除了阅读网页上的联机帮助页和其他资料外,我对cpufreq并不熟悉。从我的阅读来看,它有很多特质,所以我将从广泛的角度谈论它的作用。

从一般意义上讲,cpufreq具有很多通用功能,可能由HW或内核支持也可能不支持。这是令人困惑的,因为看起来就像功能在那里,但事情并没有像你期望的那样发生。例如,cpufreq给人的印象是你可以独立设置每个CPU的频率。实际上,在超线程系统上,两个“CPU”与每个核心相关联,并且必须具有相同的频率。

cpufreq应该控制的许多功能与处理器的功率效率特性相关联,但同样,它与处理器的实际硬件功能的映射是不完整和误导的。虽然cpufreq似乎允许您设置最大和最小频率,但处理器硬件不能以这种方式工作。在现代的英特尔处理器中,例如1270v3,有一种称为P状态的东西。这些P状态是频率 - 电压对,可降低处理器的频率(并降低其电压),从而降低处理器的功耗,但代价是应用程序运行时间更长。这些频率 - 电压配对并不是任意的,尽管cpufreq给人的印象是它们。

这一切意味着什么?除了评论者提到的线程迁移问题之外,cpufreq不会按照您期望的方式运行,因为它似乎具有实际上没有的功能,并且它实际上具有的功能仅大致映射到实际硬件和操作系统的功能。

我在你的文字中嵌入了一些其他评论。

在演出结束时使用1270v3和单线程应用程序,但是当我观看监视工具时,我不明白这些内容是如何工作的。我试图找到一篇关于这类话题的好文章,但是他们要么用我不了解的语言来解释,要么不是我想知道的东西。我希望在这里问这种东西是可以的。

根据我的理解,单线程应用程序仅对所有/大部分工作使用一个线程。 [是的,但这并不意味着线程被锁定到特定的虚拟CPU或核心。]因此性能由CPU的单线程功率定义。 [事情并非如此简单。操作系统迁移线程,它有自己的维护过程等等]在我写这个问题的那一刻之前,我玩了CPU频率,并注意到尽管只有两个应用程序运行实例,但所有内核共享使用情况。所以我假设线程在这些核心之间跳转。所以我使用cpufreq-set -g性能将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和线程在监视工具中跳跃,因为它们显示了平均使用情况,而不是看起来像是共享的。我认为这是对的吗? [再次,我不确定你在观察什么。在物理上和在顶上,CPU名称不应该改变,这意味着CPU001将始终引用相同的虚拟CPU。尽管用户线程可能,但具有最大频率的核心不应该物理跳转。值得注意的是,监控工具可能是CPU的相当重要的用户。如果这会导致线程跳转到不同的虚拟CPU,那么这种大量使用会使您难以确定处理器的使用情况。]

强制一个cpu到3.5GHz并强制应用程序到这个核心可以提高性能,或者我只想知道他们每秒显示的数据之间的avg计算。 [我发现了一个非常好的解释,有很多有用的屏幕截图:http://www.unixmen.com/linux-basics-monitor-system-resources-processes-using-atop/]如果是这样我是对的,如果功耗不高,我应该最好用cpufreq-set -c 7 -g性能物? [这一切都取决于您的系统上正在运行的其他进程。如果您的系统大部分处于空闲状态,除了您的进程,那么将核心强制到某个频率将不会产生任何影响。 [我怀疑“州长”的作用。该语言似乎指的是功率效率/性能(“平衡”,“功率”,“性能”等),但细节与当今硬件的功能不匹配。]

感谢阅读到目前为止,我希望你有时间帮助我