这是一个非常好的和相关的问题。众所周知,超线程内核并不是真正的 CPU/内核。相反,它是一个虚拟 CPU/核心(从现在开始我会说核心)。从 Windows XP 开始,Windows CPU 调度程序应该能够区分超线程(虚拟)内核和真实内核。您可能会想象,在这个完美的世界中,它“恰到好处”地处理它们,这不是问题。你会错的。
Microsoft 自己的优化 Windows 2008 BizTalk 服务器的建议建议禁用超线程。这表明,对我来说,超线程内核的处理并不完美,有时线程会在超线程内核上获得时间片并遭受惩罚(真实内核性能的一小部分,10% 我' d 猜测,微软猜测 20-30%)。
Microsoft 文章参考,他们建议禁用超线程以提高服务器效率:http: //msdn.microsoft.com/en-us/library/cc615012 (BTS.10).aspx
这是 BIOS 更新后的第二个建议,这就是他们认为的重要性。他们说:
来自微软:
"在 BizTalk Server 和 SQL Server 计算机上禁用超线程
为BizTalk Server 计算机关闭超线程至关重要。这是 BIOS 设置,通常可以在 BIOS 设置的处理器设置中找到。超线程使服务器看起来比实际拥有更多的处理器/处理器内核;然而,超线程处理器通常提供物理处理器/处理器内核的 20% 到 30% 的性能。当 BizTalk Server 统计处理器数量以调整其自调整算法时;超线程处理器会导致这些调整出现偏差,这对整体性能不利。"
现在,他们确实说这是因为它抛弃了自调整算法,但接着又提到了争用问题(这表明这是一个更大的调度问题,至少对我来说是这样)。随意阅读,但我认为它说明了一切。超线程在使用单 CPU 系统时是一个好主意,但现在只是一个复杂的问题,可能会损害这个多核世界的性能。
除了完全禁用超线程之外,您还可以使用 Process Lasso(免费)等程序为关键进程设置默认 CPU 关联性,以便它们的线程永远不会被分配给虚拟 CPU。
所以....仍然不完美。事实上,它可能永远不会完美,因为操作系统不知道哪些线程最好放在这些较慢的虚拟内核上。这可能就是问题所在,也是微软建议在服务器环境中禁用超线程的原因。
还要记住,即使没有超线程,也会出现“核心抖动”的问题。如果您可以将线程保留在单个内核上,那是一件好事,因为它可以减少内核更改的损失。