1. Dotnet9首页
  2. 更多分享
  3. 最佳实践
  4. 技术分享

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

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

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

以下为译文:

无论你在哪台计算机上阅读此文,操作系统显示的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,如下所示:

$ nproc4$ echo off > /sys/devices/system/cpu/smt/control$ nproc2

如果想重新启用 SMT,则只需要在同一个文件中指定”on”即可。

那么,我们是否应该保留SMT?我们无法保证今后不会发生芯片级别的安全漏洞,因此如果你担心安全问题,那么最可靠的做法就是禁用SMT。如果你担心会损失性能,那就需要运行性能测试。

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

本文为 CSDN 翻译,转载请注明来源出处。

【End】

原文出处:微信公众号【CSDN】,作者【Matt Fleming】

原文链接:https://mp.weixin.qq.com/s/k3YnheqN0zE1b4xScdjNbQ

本文观点不代表Dotnet9立场,转载请联系原作者。


.NET课程推荐
  1. 《.NET Core开发实战》  -  .NET Core微服务架构最佳实践                     点击了解更多
  2. 《.NetCore实战精品集》-  分布式/跨平台/微服务/前后分离/IOC/ORM  点击了解更多

发表评论

登录后才能评论

联系我们

186-2806-45xx

在线咨询:点击这里给我发消息

邮件:632871194@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code