我們是否應該保留同時多線程?

csdn 發佈 2020-01-25T16:47:31+00:00

通常你需要修改BIOS設置,但如果你無法訪問BIOS,並且使用的是Linux,那麼可以在/sys/devices/system/cpu/smt/control文件中指定"off"來禁用SMT,如下所示:$nproc4$ echo off > /sys/devices/system

SMT有利也有弊,我們究竟該如何掌控?

作者 | Matt Fleming

譯者 | 彎月,責編 | 屠敏

以下為譯文:

無論你在哪台計算機上閱讀此文,作業系統顯示的CPU很有可能並非是實際的物理處理器。 這是因為大多數現代處理器都使用同時多線程(simultaneous multithreading,即SMT),通過並行執行任務來提高性能。

英特爾的SMT實現是眾所周知的超線程(hyperthreading),最初於2002年引入,旨在不增加時鐘頻率的前提下提高奔騰4和志強CPU的性能。直到2008年英特爾推出Nehalem微體系結構之前,除了酷睿產品線之外的大多數英特爾的CPU都支持超線程技術(HTT)。最近,英特爾宣布他們的酷睿產品線將不再使用超線程。

AMD也涉足了SMT,下圖顯示了Zen微體系結構中SMT的工作方式。

如上圖所示,有些組件專屬於每個線程,而有些組件則被共享。哪些部分被共享了?這取決於實現方式,不同的微體系結構也不盡相同。但通常都是執行單元的某部分被共享。

對於x86架構,SMT線程通常成對出現,這些線程在訪問共享處理器硬體時需要互相競爭。SMT有效地利用了線程在硬體使用方面的天然差距。或者如Pekka Enberg所說:

使用SMT有利也有弊。

SMT的好處

與完整地複製處理器資源相比,SMT實現在晶片尺寸和功耗方面的效率要高很多。

英特爾聲稱,如果用SMT處理多線程工作負載,那麼晶片尺寸只需增加不到5%,就可以換來 30%的性能提升。

實際的效果在很大程度上取決於工作負載,而且正如一切性能相關的問題一樣,確定效率提升的唯一方法就是自己進行測試。

我支持SMT的另一個原因是現代 x86 CPU 統統使用了SMT。因此,這是最簡單的提高性能的方式。你只需要確保在BIOS配置中打開SMT即可。

SMT的弊端

SMT最大的優勢以及最大的劣勢之一就在於,作業系統並不會明確指示SMT是否已啟用。在大多數情況下,這都沒問題的,因為這是不必要的干擾。但是,在諸如容量規劃、對系統調優以處理實時負載等問題上,人們的確需要知道SMT是否已經啟用。

比如,在把物理CPU分配給虛擬機時,如果不知道SMT是否已啟用,那麼很容易認為將CPU數量加倍就能讓性能加倍,但在絕大多數情況下這種希望都會落空,因為這些CPU實際上是SMT,它們會互相競爭處理器資源。

現代x86處理器擁有很多核心(最新的AMD Rome CPU擁有64個核心,頂配的英特爾酷睿i9有18個核心),即使不需要啟用SMT也能獲得很多性能。

但不利於SMT的最大原因,也是最主要的原因,就是近年來層出不窮的安全漏洞,包括L1TF和MDS。

2018年8月,OpenBSD建議完全禁用SMT,它是第一個提出這種建議的作業系統,因為它認為SMT會出現更多的漏洞。事實證明這種做法是正確的。

上個月,Greg Kroah Hartman 在 Open Source Summit 上發表的演講中,對OpenBSD的前瞻性做法大為讚賞,他表示他十分「敬重」OpenBSD這個項目,因為他們做出了艱難的決定,在性能和安全中選擇了安全。

如何禁用SMT

許多用戶都在考慮完全禁用SMT。至於是否應該禁用,取決於你的個人情況。

但如果你想禁用,那麼首先應該進行性能測試,以理解禁用SMT對性能的影響。也就是說,你需要一種方便的做法來啟用或禁用SMT。

通常你需要修改BIOS設置,但如果你無法訪問BIOS,並且使用的是Linux,那麼可以在/sys/devices/system/cpu/smt/control文件中指定"off"來禁用SMT,如下所示:

$ nproc
4
$ echo off > /sys/devices/system/cpu/smt/control
$ nproc
2

如果想重新啟用 SMT,則只需要在同一個文件中指定"on"即可。

那麼,我們是否應該保留SMT?我們無法保證今後不會發生晶片級別的安全漏洞,因此如果你擔心安全問題,那麼最可靠的做法就是禁用SMT。如果你擔心會損失性能,那就需要運行性能測試。

原文:https://www.codeblueprint.co.uk/2019/11/05/does-smt-make-sense.html

本文為 CSDN 翻譯,轉載請註明來源出處。

關鍵字: