我们是否应该保留同时多线程?
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找工作需要哪些技能?
你点的每个“在看”,我都认真当成了喜欢
我们是否应该保留同时多线程?相关推荐
- python难度大的题_早看少被坑!Python 最难的问题
超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...
- 分享成为高效程序员的7个重要习惯
作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友.这里的"高效",我指的是按时完符合要求的项目 ...
- python中最难的是什么_Python 最难的问题你猜是什么?
超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个问题就会让人惊讶.之前是整 ...
- Python 最难的问题
Python 最难的问题 超过十年以上,没有比解释器全局锁(GIL)让Python新手和专家更有挫折感或者更有好奇心. 未解决的问题 随处都是问题.难度大.耗时多肯定是其中一个问题.仅仅是尝试解决这个 ...
- 15 年老程序员自述:8 个影响我职业生涯的重要技能
作者 | 崮德 来源 | 阿里巴巴中间件(ID:Aliware_2018) 我是上个世纪, 1998 年考入浙江大学的,读的是电子工程,但是在大学期间情不自禁爱地上了计算机,当时在学校学的是汇编语言, ...
- python最难的地方_最令人头疼的 Python 问题
Python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降 ...
- python版权问题_最令人头疼的Python问题
Python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降 ...
- 阅读_分享成为高效程序员的7个重要习惯
Tags:优化编程,把工作当真,理解代码,理解需求,高效程序员 作者:Phil Chu 作为软件工程师,你希望从工作中获得的是:稳定的薪水.参与好项目的机会.好工作的跳板或只是和其他程序师成为好基友. ...
- [Java Path Finder][JPF学习笔记][8]几篇使用JPF的论文
今天开小组会的时候,谈到JPF的扩展和使用,就想总结一下10-11年相关会议上使用JPF的几篇论文,这里简单整理下: 1. P. Joshi, M. Naik, K. Sen, and D. Gay, ...
最新文章
- Redis中哈希hash数据类型(增加修改(设置单一属性、设置多个属性)、获取(获取键所有属性、获取单一属性值、获取多个属性值)、删除、使用hash可能出现的问题)
- pandas中DataFrame的apply()方法和applymap()方法,以及python内置函数map()
- Visual Studio下载、安装、运行教程
- nuxt2.0 设置 webpack 路径别名
- 计算虚拟化涉及的关键技术有哪几项_都开始商用了 5G的这些关键技术还不知道?...
- [转] ASP.NET中使用javascript
- 解决pandas读取parquet报错ImportError:Unable to find a usable engine;tried using: ‘pyarrow‘, ‘fastparquet‘
- 被拘捕 353 天后,三星“太子”李在镕被判缓刑当庭获释!
- FileUtils类 使用举例
- SUBMAIL API如何帮助您构建企业云通信平台?
- 系统集成项目管理工程师(项目经理)笔记
- 腾讯裁员范围扩大;研究称人类或能喝到月球冰火水;苹果考虑取消京东方3000万块屏幕订单;近视手术无法治愈近视
- ARM开发板编译----MYS-6ULX
- 大数据技术领域介绍及学习方法和发展规划
- Linux locale命令
- 第三章:Solr4.7以DIH的方式从数据库导数据
- 前端企业级的开源项目
- 区块链BaaS云服务(23)网易天玄区块链
- 光场相机lytro的安装和使用
- 千人千面智能淘宝店铺背后的算法研究登陆人工智能顶级会议AAAI 2017