我们是否应该保留同时多线程?

SMT有利也有弊,我们究竟该如何掌控?

作者 | Matt Fleming

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

无论你在哪台计算机上阅读此文,操作系统显示的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 翻译,转载请注明来源出处。

【End】

热 文 推 荐 

春晚亲民,快手上行:探秘春晚红包的另一种打开方式

拼多多求变 200 天:撒钱百亿元,江湖人称拼爹爹?

面对疫情,AI 能做什么?

☞小网站的容器化(上)

区块链第一,情商上榜,2020找工作需要哪些技能?

你点的每个“在看”,我都认真当成了喜欢

©️2020 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值