SMT有利也有弊,我們究竟該如何掌控?
作者 | Matt Fleming
譯者 | 彎月,責(zé)編 | 屠敏
以下為譯文:
無(wú)論你在哪臺(tái)計(jì)算機(jī)上閱讀此文,操作系統(tǒng)顯示的CPU很有可能并非是實(shí)際的物理處理器。這是因?yàn)榇蠖鄶?shù)現(xiàn)代處理器都使用同時(shí)多線程(simultaneous multithreading,即SMT),通過(guò)并行執(zhí)行任務(wù)來(lái)提高性能。
英特爾的SMT實(shí)現(xiàn)是眾所周知的超線程(hyperthreading),最初于2002年引入,旨在不增加時(shí)鐘頻率的前提下提高奔騰4和志強(qiáng)CPU的性能。直到2008年英特爾推出Nehalem微體系結(jié)構(gòu)之前,除了酷睿產(chǎn)品線之外的大多數(shù)英特爾的CPU都支持超線程技術(shù)(HTT)。最近,英特爾宣布他們的酷睿產(chǎn)品線將不再使用超線程。
AMD也涉足了SMT,下圖顯示了Zen微體系結(jié)構(gòu)中SMT的工作方式。
如上圖所示,有些組件專屬于每個(gè)線程,而有些組件則被共享。哪些部分被共享了?這取決于實(shí)現(xiàn)方式,不同的微體系結(jié)構(gòu)也不盡相同。但通常都是執(zhí)行單元的某部分被共享。
對(duì)于x86架構(gòu),SMT線程通常成對(duì)出現(xiàn),這些線程在訪問(wèn)共享處理器硬件時(shí)需要互相競(jìng)爭(zhēng)。SMT有效地利用了線程在硬件使用方面的天然差距。或者如Pekka Enberg所說(shuō):
使用SMT有利也有弊。
SMT的好處
與完整地復(fù)制處理器資源相比,SMT實(shí)現(xiàn)在芯片尺寸和功耗方面的效率要高很多。
英特爾聲稱,如果用SMT處理多線程工作負(fù)載,那么芯片尺寸只需增加不到5%,就可以換來(lái) 30%的性能提升。
實(shí)際的效果在很大程度上取決于工作負(fù)載,而且正如一切性能相關(guān)的問(wèn)題一樣,確定效率提升的唯一方法就是自己進(jìn)行測(cè)試。
我支持SMT的另一個(gè)原因是現(xiàn)代 x86 CPU 統(tǒng)統(tǒng)使用了SMT。因此,這是最簡(jiǎn)單的提高性能的方式。你只需要確保在BIOS配置中打開(kāi)SMT即可。
SMT的弊端
SMT最大的優(yōu)勢(shì)以及最大的劣勢(shì)之一就在于,操作系統(tǒng)并不會(huì)明確指示SMT是否已啟用。在大多數(shù)情況下,這都沒(méi)問(wèn)題的,因?yàn)檫@是不必要的干擾。但是,在諸如容量規(guī)劃、對(duì)系統(tǒng)調(diào)優(yōu)以處理實(shí)時(shí)負(fù)載等問(wèn)題上,人們的確需要知道SMT是否已經(jīng)啟用。
比如,在把物理CPU分配給虛擬機(jī)時(shí),如果不知道SMT是否已啟用,那么很容易認(rèn)為將CPU數(shù)量加倍就能讓性能加倍,但在絕大多數(shù)情況下這種希望都會(huì)落空,因?yàn)檫@些CPU實(shí)際上是SMT,它們會(huì)互相競(jìng)爭(zhēng)處理器資源。
現(xiàn)代x86處理器擁有很多核心(最新的AMD Rome CPU擁有64個(gè)核心,頂配的英特爾酷睿i9有18個(gè)核心),即使不需要啟用SMT也能獲得很多性能。
但不利于SMT的最大原因,也是最主要的原因,就是近年來(lái)層出不窮的安全漏洞,包括L1TF和MDS。
2018年8月,OpenBSD建議完全禁用SMT,它是第一個(gè)提出這種建議的操作系統(tǒng),因?yàn)樗J(rèn)為SMT會(huì)出現(xiàn)更多的漏洞。事實(shí)證明這種做法是正確的。
上個(gè)月,Greg Kroah Hartman 在 Open Source Summit 上發(fā)表的演講中,對(duì)OpenBSD的前瞻性做法大為贊賞,他表示他十分“敬重”O(jiān)penBSD這個(gè)項(xiàng)目,因?yàn)樗麄冏龀隽似D難的決定,在性能和安全中選擇了安全。
如何禁用SMT
許多用戶都在考慮完全禁用SMT。至于是否應(yīng)該禁用,取決于你的個(gè)人情況。
但如果你想禁用,那么首先應(yīng)該進(jìn)行性能測(cè)試,以理解禁用SMT對(duì)性能的影響。也就是說(shuō),你需要一種方便的做法來(lái)啟用或禁用SMT。
通常你需要修改BIOS設(shè)置,但如果你無(wú)法訪問(wèn)BIOS,并且使用的是Linux,那么可以在/sys/devices/system/cpu/smt/control文件中指定"off"來(lái)禁用SMT,如下所示:
$ nproc
4
$ echo off > /sys/devices/system/cpu/smt/control
$ nproc
2
如果想重新啟用 SMT,則只需要在同一個(gè)文件中指定"on"即可。
那么,我們是否應(yīng)該保留SMT?我們無(wú)法保證今后不會(huì)發(fā)生芯片級(jí)別的安全漏洞,因此如果你擔(dān)心安全問(wèn)題,那么最可靠的做法就是禁用SMT。如果你擔(dān)心會(huì)損失性能,那就需要運(yùn)行性能測(cè)試。
原文:https://codeblueprint.co.uk/2019/11/05/does-smt-make-sense.html
本文為 CSDN 翻譯,轉(zhuǎn)載請(qǐng)注明來(lái)源出處。


