6

我正在使用新的 Intel I7 四核处理器构建 PC。打开超线程后,它会在任务管理器中报告 8 个内核。

我的一些同事说超线程会使系统不可靠并建议将其关闭。

你们中的任何一个好人都可以启发我和其余的 stockoverflow 用户。

继续:我一直在使用超线程,并且一直在使用。一点不稳定都没有。我正在使用:

  • 微软服务器 2008 64 位
  • 微软 SQL Server 2008 64 位
  • 微软视觉工作室 2008
  • 管理员服务器
  • 很多控件(Telerik、Dundas、Rebex、Resharper)
4

15 回答 15

9

稳定性不太可能受到影响,因为抽象级别非常低,操作系统只是将其视为另一个 CPU 来提供工作。但是,性能是另一回事。

老实说,我不能说这种情况是否仍然存在,但至少在启用 HT 的 CPU 首次问世时,至少在某些应用程序中存在已知问题。例如,众所周知,启用 HT 后,MySQL 和多线程应用程序(如我在日常工作中支持的 Java 应用程序)会降低性能。我们始终建议将其删除,至少对于我们的服务器端企业应用程序的特定用例而言。

这可能不再是问题,并且在桌面环境中,对于大多数用例而言,这不太可能成为问题。当 CPU 被大量使用时,在 CPU 上拆分工作的能力通常会导致应用程序响应速度更快。但是,当应用程序已经具有大量线程和 CPU 密集型(例如在数据库服务器的情况下)时,上下文切换和开销可能会成为一种阻碍。

于 2009-01-20T18:50:34.797 回答
4

在我的脑海中,我能想到你的同事可能会这样说的几个原因。

  • 几篇关于超线程下 SQL 性能受损的文章。我相信它最终会做太多的上下文切换或缓存抖动。记不清了。

  • 早期从单进程到多进程或更可能对大多数人来说超线程进程,带来了许多线程问题。他们以前从未见过的竞争条件、死锁等。尽管它是一个代码问题,但有些人指责了过程。

他们是否对多核/多进程或只是关于超线程提出相同的要求?

至于我,我已经在超线程机器上开发 4 年了,唯一的问题是我自己造成的 UI 死锁问题。

于 2009-01-20T19:00:52.343 回答
3

当将线程分派到同一个 CPU 而不是不同的 CPU 时,超线程主要会影响调度程序的行为/性能......

它将显示在一个编码错误的应用程序中,该应用程序不处理线程之间的竞争条件......

所以通常是糟糕的设计/代码....突然发现故障模式条件

于 2009-01-20T19:01:19.097 回答
2

不可靠?我怀疑是这样。我能想到的超线程的唯一缺点是,如果操作系统不知道它,它可能会在其他物理处理器空闲时在一个物理处理器上调度两个线程,这会降低性能。

于 2009-01-20T18:48:02.353 回答
2

SQL server 和某些查询的超线程存在问题,因为 SQL server 有自己的调度程序,maxdop 1 可以解决这个问题

于 2009-01-20T18:51:52.313 回答
2

无论 Windows 在何种程度上不稳定,超线程都不太可能做出重大贡献(或者现在它会成为大新闻。)

于 2009-01-20T18:55:14.460 回答
1

我已经拥有一台超线程 PC 已有几年了。没有那么多核心,但对我来说效果很好。

希望我有测试数据来证明你的同事是错的,但听起来这只是我与他们的观点。;)

于 2009-01-20T18:47:01.060 回答
1

超线程 CPU 中的线程共享相同的缓存,因此不会遇到多 CPU 架构可能会遇到的缓存一致性问题。但是,如果一个软件的开发人员正在考虑使用多个 cpu 进行编程,那么他们将(或应该)使用读取语义(iirc,这就是术语)进行编写。即,所有写入都立即从缓存中刷新。

于 2009-01-20T18:53:23.310 回答
1

据我所知,从操作系统的角度来看,它认为超线程与拥有实际的多核没有任何不同。从操作系统的角度来看,没有区别 - 它是孤立的。

所以,除了超线程的“额外核心”不是“真实的”(严格的技术意义上)并且没有“真实”CPU核心的全部性能之外,我看不出它会是更不可靠。在某些罕见的情况下,速度可能会更慢,但可靠性并不低。

当然,这取决于你正在运行什么——我想一些应用程序可能会因为 CPU 而“宕机和变脏”,而超线程可能会让它们感到困惑,但这可能很少见。

我本人已经使用超线程运行 PC 好几年了,我没有发现稳定性问题。

抱歉,我没有更具体的数据!

于 2009-01-20T19:04:48.717 回答
1

我有一个i7系统,我没有任何问题。

如果它适用于多个内核,则它适用于超线程。

于 2009-01-20T19:09:40.937 回答
0

简短的回答:是的。

与几乎所有问题一样,长答案是“视情况而定”。取决于操作系统、软件、CPU 版本等。我个人必须两次禁用超线程才能使软件正常工作(一次,使用 Synergy 应用程序,两次,使用 Windows NT 4.0 安装程序),但是您的里程可能会有所不同。

只要您安装的 Windows 从一开始就检测到多个 HT 内核(它会加载一些相关的驱动程序等),您始终可以“事后”禁用(并重新启用)HT。如果您无法解决特定软件的奇怪稳定性问题,禁用 HT 以查看它是否有任何影响并不难。

我不会一开始就禁用它,因为坦率地说,它可能在您日常使用的 99.99% 中都能正常工作。但是请注意,是的,它偶尔会导致奇怪的行为,所以如果您碰巧在解决非常奇怪的问题时,请不要排除它。

于 2009-01-20T18:51:47.633 回答
0

就个人而言,我发现超线程虽然不会造成任何问题,但实际上也没有太大帮助。这可能就像拥有一个额外的 .1 处理器。在我工作的 HT 机器上,我很少看到我的 CPU 超过 50%。我不知道 HT 在 i7 等较新的处理器上是否会变得更好,但我并不乐观。

于 2009-01-20T19:16:04.090 回答
0

除了听到一些关于 SQL Server 的报告外,我所能报告的都是正面的。在启用 HT 的重型多线程应用程序上,我的性能提高了大约 25%。从来没有遇到过问题,我使用的是第一代 HT 处理器......

于 2009-01-20T19:23:36.447 回答
0

晚会迟到,但供将来参考;

我目前在使用 SQLServer 时遇到了这个问题。基本上,我的理解是同一处理器上的超线程共享相同的 L1 和 L2 缓存,这可能会导致两者之间出现问题。从我正在阅读的内容来看,思杰似乎也有这个问题。

Slava Ok 写了一篇很好的博客文章

于 2009-02-11T16:19:51.053 回答
0

我在这里迟到了,但通过谷歌找到了这个页面。我可能发现了一个非常微妙的问题。我有一个运行 2003 Server 的 i7 950,它很棒。最初我在 BIOS 中保留了超线程,但在一些测试和努力推动的过程中,我运行了一个 Carrette 名为“crashme”的程序。该程序试图通过生成一个进程并为其提供垃圾来尝试运行来使操作系统崩溃。我的双 Opteron 设置永远运行它没有问题,但 950 在一个小时内崩溃了。除非我做了一些愚蠢的事情,否则它不会因为其他任何事情而崩溃,所以这非常令人惊讶。一时兴起,我关闭了 HT 并再次运行该程序。它整夜运行,甚至它的多个实例。一个轶事并不意味着什么,但尝试一下,看看会发生什么。此外,如果关闭 HT,处理器在任何给定负载下似乎都会稍微凉一些。YMMV。

于 2009-12-23T10:25:55.453 回答