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

我将Linux内核2.6.32移植到Intel(R)Xeon(R)CPU E31275 @ 3.40GHz。 如果我在BIOS中启用了超线程,我可以看到8个CPU核心(CPU0〜CPU7)。 大多数中断发生在CPU 4中,这个内核的CPU使用率比其他CPU高出近两倍。 我不太了解它,因为我认为我没有设置任何IRQ绑定操作。

如果我禁用BIOS中的超线程,那么一切都OK。 IRQ已经平衡,所有内核(CPU0〜CPU3)的CPU使用率也接近平衡。

有人可以解释吗? 与BIOS有关吗? 我应该在内核中做一些特殊的设置吗?

有些程序会受到HT(超线程)的负面影响,为了解释这个,你必须了解HT是什么。 正如你所说的,你看到了7个(0-7是8个)cpu核心,这是不正确的,你的CPU有4个核心,8个核心是虚拟核心,所以一个核心有2个线程(就像他是2核心)。 通常,由于CPU / OS能够运行(同时执行这些程序所做的事情),所以HT有助于更快地运行程序,同时没有HT,只能同时运行4个程序。 你不必设置任何设置,因为你不能改变这个外观,如果你是这个程序的开发者,你应该重新检查代码并优化它,如果你想HT,或者你可以禁用HT。

另外一些信息是由于一些胡说的人正在谈论:HT正在增加CPU的力量,这是不正确的! 即使你看到8个核心用可以说4GHz(GHz说不了,应该在触发器中测量),你得到了与4GHz的HT转换和4核心相同的功率。 如果你在2个虚拟内核上有HT,那么你的CPU就共享1个物理内核。

这里有一些关于HT的更多信息: http : //www.makeuseof.com/tag/hyperthreading-technology-explained/

我不能找到我的旧链接到一个非常好的网站,其中有代码片段显示不好的代码为HT和良好的代码(在坏的比没有HT和相反的速度慢)。

TL; DR:由于其发展,并不是每一个计划都从HT中获益。