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找工作需要哪些技能?

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

我们是否应该保留同时多线程?相关推荐

  1. python难度大的题_早看少被坑!Python 最难的问题

    超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...

  2. 分享成为高效程序员的7个重要习惯

    作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友.这里的"高效",我指的是按时完符合要求的项目 ...

  3. python中最难的是什么_Python 最难的问题你猜是什么?

    超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...

  4. Python 最难的问题

    Python 最难的问题 超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个 ...

  5. 15 年老程序员自述:8 个影响我职业生涯的重要技能

    作者 | 崮德 来源 | 阿里巴巴中间件(ID:Aliware_2018) 我是上个世纪, 1998 年考入浙江大学的,读的是电子工程,但是在大学期间情不自禁爱地上了计算机,当时在学校学的是汇编语言, ...

  6. python最难的地方_最令人头疼的 Python 问题

    Python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降 ...

  7. python版权问题_最令人头疼的Python问题

    Python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降 ...

  8. 阅读_分享成为高效程序员的7个重要习惯

    Tags:优化编程,把工作当真,理解代码,理解需求,高效程序员 作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友. ...

  9. [Java Path Finder][JPF学习笔记][8]几篇使用JPF的论文

    今天开小组会的时候,谈到JPF的扩展和使用,就想总结一下10-11年相关会议上使用JPF的几篇论文,这里简单整理下: 1. P. Joshi, M. Naik, K. Sen, and D. Gay, ...

最新文章

  1. Redis中哈希hash数据类型(增加修改(设置单一属性、设置多个属性)、获取(获取键所有属性、获取单一属性值、获取多个属性值)、删除、使用hash可能出现的问题)
  2. pandas中DataFrame的apply()方法和applymap()方法,以及python内置函数map()
  3. Visual Studio下载、安装、运行教程
  4. nuxt2.0 设置 webpack 路径别名
  5. 计算虚拟化涉及的关键技术有哪几项_都开始商用了 5G的这些关键技术还不知道?...
  6. [转] ASP.NET中使用javascript
  7. 解决pandas读取parquet报错ImportError:Unable to find a usable engine;tried using: ‘pyarrow‘, ‘fastparquet‘
  8. 被拘捕 353 天后,三星“太子”李在镕被判缓刑当庭获释!
  9. FileUtils类 使用举例
  10. SUBMAIL API如何帮助您构建企业云通信平台?
  11. 系统集成项目管理工程师(项目经理)笔记
  12. 腾讯裁员范围扩大;研究称人类或能喝到月球冰火水;苹果考虑取消京东方3000万块屏幕订单;近视手术无法治愈近视
  13. ARM开发板编译----MYS-6ULX
  14. 大数据技术领域介绍及学习方法和发展规划
  15. Linux locale命令
  16. 第三章:Solr4.7以DIH的方式从数据库导数据
  17. 前端企业级的开源项目
  18. 区块链BaaS云服务(23)网易天玄区块链
  19. 光场相机lytro的安装和使用
  20. 千人千面智能淘宝店铺背后的算法研究登陆人工智能顶级会议AAAI 2017

热门文章

  1. 第一次使用并配置Hibernate
  2. 如何编写一个好的测试用例
  3. 以links方式安装eclipse插件
  4. Hive 内嵌模式安装指导
  5. 记录——《C Primer Plus (第五版)》第九章编程练习第六题
  6. LinuxShell笔记3 条件控制和流程控制
  7. 中国机载预警雷达市场趋势报告、技术动态创新及市场预测
  8. 生成注释_SOLIDWORKS DimXpert 自动生成注释
  9. 11条规则教你如何玩转数据库设计
  10. 计算机网络月考题职专一年级,2014-2015学年获嘉职专一年级期末试卷_计算机应用基础...