当担心单线程应用程序的性能时,我应该禁用超线程吗?

tsh*_*ang 5 linux performance multiprocessor hyperthreading parallelism

我使用 i5-2410M 处理器,默认情况下,它在我的笔记本电脑上设置为执行超线程。考虑到这是一个 2 核处理器,这意味着它一次可以执行 4 个线程。这也意味着单线程应用程序最多只能使用 25% 的处理能力,而我宁愿让它们最多使用 50%。禁用超线程会不会有不良影响(这是开发机,运行的是桌面)?我什至阅读top正确吗?

bah*_*mat 3

对于单线程应用程序的超线程,如果您运行其中两个应用程序,您将看到速度的提升。超线程意味着 CPU 在第一个线程完成其正在执行的操作之前开始处理第二个线程(无论是来自多线程应用程序的两个线程还是两个单线程应用程序)。有效禁用此功能意味着您已将 CPU 容量削减一半(但不是真的,HT 会提高约 30%,但我说的是 top 告诉您的内容),这就是为什么线程现在显示为 50%而top不是 25%。

更多解释

然而,这并不意味着当今绝大多数应用程序不会从超线程中获益。只要多个应用程序同时运行(换句话说,多任务处理),即使是单线程应用程序也可以从超线程中获得性能优势。当一个应用程序将其流(线程)发送到一个逻辑处理器时,第二个应用程序同时将其流发送到第二个逻辑处理器。但是,如果您仅运行一个单线程应用程序,则超线程不会带来性能提升。事实上,由于与管理超线程的两个逻辑处理器相关的开销,在仅运行单线程应用程序时甚至可能会出现一些性能下降。

对于引导的 UNIX 系统,您至少运行内核、init 和 shell。你总是同时处理多项任务。在所有实际方面,HT 始终会让您受益。

  • 不会。CPU 将花费相同的时间来完成其任务。但随着 HT 的开启,第二个单线程任务将更快开始执行。例如,假设您有两个单线程任务,每个任务需要 1 秒的 CPU 时间才能完成。当 HT 关闭时,两个任务开始和完成的实时时间将为 2 秒。在实时 HT 下,两个任务将花费 1.5 秒,但每个任务在 CPU 上花费 1 秒。 (3认同)