启用超线程后为什么性能变差?

4
我将Linux内核2.6.32移植到Intel(R) Xeon(R) CPU E31275 @ 3.40GHz。如果我在BIOS中启用超线程,我可以看到8个CPU核心(CPU0 ~ CPU7)。大多数中断发生在CPU 4上,并且此核心的CPU使用率远高于其他核心(几乎是其他核心的两倍)。我不太理解这一点,因为我认为我没有设置任何IRQ绑定操作。
如果我在BIOS中禁用超线程,那么一切都正常。中断已经平衡,所有核心的CPU使用率(CPU0 ~ CPU3)也几乎平衡。
有人能解释一下吗?这与BIOS有关吗?我应该在内核中做一些特殊的设置吗?

性能很大程度上取决于你正在做什么。一个处理数字的程序,一个进行大量磁盘I/O的程序和一个进行大量网络I/O的程序将表现出非常不同的行为。 - ugoren
1个回答

4
一些程序会受到超线程(HT)的负面影响,要解释这个问题,您需要了解什么是HT。 正如您所说,您看到了7(0-7虽然是8)个CPU核心,这不是真的,您的CPU中有4个核心,8个核心是虚拟核心,因此一个核心有2个线程(并且像2个核心一样运行)。 通常情况下,由于CPU /操作系统能够同时运行8个程序(执行这些程序所需的任何操作),因此HT有助于更快地运行程序,如果没有HT,则只能同时运行4个程序。 您无需设置任何设置,因为您无法更改此外观,如果您是此程序的开发人员,则应重新检查代码并将其优化为HT(如果需要),或者您可以禁用HT。
由于某些人在胡说八道,还有另一个信息:HT正在增加CPU的功率 这是不正确的!即使您看到具有4GHz(GHz无意义,应以flops为单位测量)的8个核心,当您关闭HT并获得具有4GHz的4个核心时,您获得的功率相同。 如果您启用了HT,则2个虚拟内核共享您的CPU中的1个物理内核。

以下是有关HT的更多信息: http://www.makeuseof.com/tag/hyperthreading-technology-explained/

我找不到我以前看过的一个非常好的网站链接,里面有代码片段展示了HT的错误代码和正确代码(指比没有使用HT慢和比没有使用HT快的情况)。

简而言之,由于开发原因,并非每个程序都受益于HT。


鉴于这是关于Linux部分的说明,请注意。在Linux上,超线程(HT)效果很好,但在Winblows上,尽管仍然会有一些减速。因此,如果你不得不(希望你不会)在启用了超线程的机器上使用Winblows,请禁用它。 - K1773R
谢谢您的信息。我认为我需要找到HT的错误代码。但是对于Linux内核,我没有修改过太多内容,所以我不知道为什么调度会出现问题。 - flypen
不是内核代码,而是你的应用程序代码需要查看。调度并不奇怪,它只是一种技术。如果这回答了你的问题,请接受这个答案(否则其他人可能会回答),如果你需要更多信息,只需问。问候 - K1773R
当你说“power”时,你是指能量/时间吗?如果使用超线程可以稍微更好地利用执行引擎,那么你将有稍微更高的功率耗散。话虽如此,静态功率很大(至少1/3),在流水线气泡期间仍会发生大量开关操作,因此在大多数情况下,所做的有用工作量将增加得比功率耗散快。 - Timothy Miller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接