代码之家  ›  专栏  ›  技术社区  ›  Simon Hughes

超线程是否会导致系统不稳定?

  •  6
  • Simon Hughes  · 技术社区  · 16 年前

    我正在用新的Inteli7四核处理器构建一台个人电脑。打开超线程后,它将在任务管理器中报告8个核心。

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

    你们中的任何一个好人能启发我和StockOverflow的其他用户吗?

    接下来:我一直在使用超线程,它一直在现场。没有任何不稳定。我正在使用:

    • Microsoft Server 2008 64位
    • Microsoft SQL Server 2008 64位
    • Microsoft Visual Studio 2008
    • 磁盘服务器
    • 很多控件(telerik、dundas、rebex、resharper)
    15 回复  |  直到 13 年前
        1
  •  9
  •   Jay    16 年前

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

    老实说,我不能说这是否仍然是事实,但至少当启用了HT的CPU第一次出现时,至少有些应用程序存在已知的问题。例如,MySQL和多线程应用程序,如支持我的日常工作的Java应用程序,已知在启用HT时性能降低。我们总是建议删除它,至少对于服务器端企业应用程序的特定用例是这样的。

    这可能不再是一个问题,在桌面环境中,对于大多数用例来说,这不太可能是一个问题。当CPU被大量利用时,在CPU上拆分工作的能力通常会导致更具响应性的应用程序。然而,当应用程序已经具有很强的线程性和CPU密集型(如数据库服务器)时,上下文切换和开销可能会有所下降。

        2
  •  4
  •   Rob McCready    16 年前

    从我的头脑中,我可以想到一些你的同事可能会这么说的原因。

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

    • 早期从单进程到多进程,或者对大多数人来说更可能是多线程进程,导致了许多线程问题公开化。他们从未见过的比赛条件、僵局等。尽管这是一个代码问题,但也有人指责procs。

    他们对多核/多进程的声明是相同的还是仅仅是关于超线程的?

    对于我来说,我已经在一个超线程的盒子上开发了4年了,唯一的问题是我自己制造的UI死锁问题。

        3
  •  3
  •   Claude Plasse    16 年前

    当将线程调度到同一个CPU时,与不同的CPU相比,超线程处理主要会影响调度程序的行为/性能。

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

    所以通常设计/代码不好……突然发现故障模式条件

        4
  •  2
  •   Mehrdad Afshari    16 年前

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

        5
  •  2
  •   SQLMenace    16 年前

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

        6
  •  2
  •   dkretz    16 年前

    无论Windows在多大程度上不稳定,超线程都不太可能产生重大影响(或者到目前为止它已经产生了重大新闻)。

        7
  •  1
  •   Eddie Parker    16 年前

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

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

        8
  •  1
  •   Steven Evers    16 年前

    超线程CPU中的线程共享相同的缓存,因此不会受到多个CPU体系结构所能解决的缓存一致性问题的影响。但是,如果一个软件的开发人员考虑到多个CPU的编程,那么他们(或者应该)将使用读取语义(IIRC,这是术语)进行编写。也就是说,所有写操作都会立即从缓存中刷新。

        9
  •  1
  •   Keithius    16 年前

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

    因此,除了超线程的“额外核心”不是“真实的”(严格地说是技术意义上的)并且没有“真实的”CPU核心的完整性能之外,我看不出它的可靠性会有任何下降。在一些罕见的情况下,可能会更慢,但可靠性也不低。

    当然,这取决于您运行的是什么——我想有些应用程序可能会因为CPU而“故障”并且超线程可能会混淆它们,但这可能非常罕见。

    我自己操作一台带有超线程的PC已经有好几年了,我没有看到任何稳定性问题。

    对不起,我没有更具体的数据!

        10
  •  1
  •   Giovanni Galbo    16 年前

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

    如果它与多个内核一起工作,它将与超线程一起工作。

        11
  •  0
  •   nezroy    16 年前

    简短的回答:是的。

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

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

    首先,我不会禁用它,因为坦率地说,它可能会在99.99%的日常使用中正常工作。但要知道,是的,它有时会导致奇怪的行为,所以不要排除它如果你碰巧是故障排除一些非常奇怪的事情。

        12
  •  0
  •   Kibbee    16 年前

    就我个人而言,我发现,超线程虽然不会造成任何问题,但实际上也没有多大帮助。它可能像是有一个额外的.1处理器。在我工作的高温机器上,我只能很自主地看到我的CPU超过50%。我不知道在i7这样的新处理器上,HT是否有所改善,但我并不乐观。

        13
  •  0
  •   Brian Knoblauch    16 年前

    除了听到一些关于SQL Server的报告,我所能报告的都是肯定的。我得到大约25%的性能更好的重型多线程应用程序与高温。从来没有遇到过问题,我使用的是第一代高温处理器…

        14
  •  0
  •   John MacIntyre    16 年前

    迟交给当事人,但供将来参考;

    我现在对SQLServer有一个问题。基本上,我的理解是在同一个处理器上超线程共享同一个l1&l2缓存,这可能导致两个处理器之间出现问题。Citrix也有这个问题,这是我读到的。

    斯拉夫写了一封信 good blog post 关于它。

        15
  •  0
  •   Fred Bosick    15 年前

    我在这里 非常 很晚才通过谷歌找到这个页面。我可能发现了一个非常微妙的问题。我有一个运行2003服务器的i7 950,非常好。最初,我在BIOS中留下了超线程,但在一些测试和强制执行过程中,我运行了一个由Carrette编写的名为“crashme”的程序。这个程序试图通过生成一个进程并将其作为垃圾来尝试运行来崩溃操作系统。我的双翼机装置一直没有问题,但950在一小时内就坠毁了。除非我做了一些愚蠢的事情,否则它不会因为其他任何事情而崩溃,所以它是非常令人惊讶的。一时兴起,我关掉了电脑,重新运行程序。它会运行一整夜,甚至是多个实例。一件轶事并不重要,但试试看会发生什么。此外,如果关闭了HT,处理器在任何给定负载下似乎都会稍微冷却。YMMV。