【问题标题】:Does hyperthreading lead to unstable systems?超线程会导致系统不稳定吗?
【发布时间】:2009-01-20 18:44:27
【问题描述】:

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

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

各位好心人能否启发我和其他 stockoverflow 用户。

Follow on:我一直在使用超线程,而且它一直在使用。一点不稳定都没有。我正在使用:

  • Microsoft Server 2008 64 位
  • Microsoft SQL Server 2008 64 位
  • Microsoft Visual Studio 2008
  • Diskeeper 服务器
  • 大量控件(Telerik、Dundas、Rebex、Resharper)

【问题讨论】:

    标签: intel hyperthreading


    【解决方案1】:

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

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

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

    【讨论】:

    • 我的理解是,英特尔使用的超线程实现与奔腾 4 系列中使用的完全不同,而且这个实现要好得多。我做过一些实验,i7 上的单线程程序无论 HT 是打开还是关闭,速度都差不多,而 Pentium 4 则不然。
    • P4 上的超线程问题在于巨大的管道。如果您停止等待缓慢的主内存,那么超线程是一个优势。如果您主要从缓存操作,那么超线程是一个严重的劣势。恕我直言。这就是为什么数据库经常被排除在外的原因。
    【解决方案2】:

    我能想到你的同事可能会这么说的几个原因。

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

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

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

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

    【讨论】:

    • 当我看到你的回答时,我正准备回答你的第二点。早期的超线程 procs 可能会在桌面上暴露出许多非线程安全的应用程序代码,并且将应用程序故障归咎于超线程,而不是应用程序本身。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      【解决方案5】:

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

      【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        我拥有一台超线程 PC 已有几年了。内核数量不多,但对我来说效果很好。

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 这句话很有意思。由于没有使用 Itanium 的经验,我通常会像在 LOCK INC 中那样在指令前加上 LOCK,或者只使用 OS Intrinsic,但就是您所说的,我将如何确保“立即从缓存中刷新所有写入” “嗯。
          • LOCK 用于锁定总线,防止在写入的同时读取,而不是直接刷新到 RAM。缓存窥探无需担心直写与回写。
          【解决方案9】:

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

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

          当然,这取决于您正在运行的内容 - 我想某些应用程序可能会因 CPU 而“宕机和变脏”,而超线程可能会使它们感到困惑,但这可能很少见。

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

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

          【讨论】:

            【解决方案10】:

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

            如果它支持多核,则它适用于超线程。

            【讨论】:

              【解决方案11】:

              简短的回答:是的。

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

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

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

              【讨论】:

                【解决方案12】:

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

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

                    聚会迟到了,但供将来参考;

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

                    Slava Ok 在上面写了good blog post

                    【讨论】:

                      【解决方案15】:

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

                      【讨论】:

                        猜你喜欢
                        • 2023-03-17
                        • 1970-01-01
                        • 2020-10-16
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-11-20
                        • 2020-01-11
                        • 1970-01-01
                        相关资源
                        最近更新 更多