来源:内容整理自互联网 ,谢谢。
这是一篇极具可读性的短文,有趣地揭示了英特尔x86指令集架构(ISA)最近发生的事情。我们看到了扩展的数量和复杂度的急剧增加,及其对系统研究人员(和英特尔)产生的一些有趣的影响。我们也看到越来越多的微代码的使用模糊了ISA作为硬件和软件之间的界限这一角色。
我们认为,这些扩展现在正在逼近类似软件层面的复杂程度,但同时也包含了硬件实现的所有缺点,以及缓慢的部署周期。我们怀疑当前的路径可能是不可持续的,并假设了一个可替代的未来,最终目标是将新的ISA特性与底层硬件分离。
过去:稳定且可控的增长
386参考手册列出了96条指令。随着时间的推移,新的指令在诸如浮点支持,向量扩展,加密加速器,64位等领域都在不断增加。至关重要的是:
……过去的系统设计人员极大程度上忽略了这种变化……除了64位模式和虚拟化扩展之外,x86系统开发人员偶尔也会进行一些调整,以提高性能或纠正明显的缺点,但除此之外,其他方面都被忽略了。即使是64位模式也不会显著增加架构的复杂性……
为什么要购买新CPU?
随着摩尔定律的放缓,英特尔传统的两年“Tick-Tock”发展模式也在放缓。这就提出了一个显而易见的问题:
……如果没有微架构方面的改进,他们的CPU就不会有大幅提速,也不会有更高的效率,而且他们相同价位的CPU的核心数量与先前的CPU完全相同。为什么会有人购买新的CPU?
如果你站在英特尔的角度思考一会儿,你就能明白为什么会有这样的麻烦。你还能做些什么可以让购买新CPU变得有吸引力呢?
英特尔似乎正在转向的一个理由是:如果新的CPU实现了一个重要的ISA扩展——例如,软件提出了一个需求,因为它对于安全至关重要——消费者就会有一个强大的理由去升级。
换言之,加快发布速度很可能是英特尔有意让我们继续购买的策略。结果……
在过去的两年里,ISA的复杂性急剧地增加了(例如:在下图中,我们可以看到架构手册的大小),在此过程中有更多的扩展。
图1:英特尔x86 CPU和ISA的复杂性的增加
上图仍然遵循摩尔定律(注意左侧坐标轴上的对数刻度),最近公布的节奏放缓尚未出现。在手册中使用文字作为复杂性的代表,我们可以看到在2015-16年间因Skylake引入的而引起的大幅增长。
(出于兴趣,我估计手册有200万词,平均阅读速度为每分钟200词,以每周阅读40小时计算,需要一个月才能读完,而这仅仅是为了阅读一份手册!)
下表总结了最近的ISA扩展以及引入的新指令的数量。
复杂性的增加不仅仅来自于新指令的数量,更重要的是来自于与现有指令的交互:
这些最近的扩展引入了新的系统级功能,这经常改变现有指令的语义,并与其他扩展和先前的体系结构特性进行复杂的交互。
SGX和CET示例
鲍曼引用SGX和CET扩展作为主要例子。我们以前一定在《晨报》上看到过SGX很多次吧。
功能强大的组合以及强大的物理安全(内存加密)使得SGX对研究人员和从业者都有吸引力……但是,SGX引入了大量的复杂性:用近200页的英文/伪代码规范描述了26条指令。
在这200页中,有近20页专门用于介绍SGX与先前架构特征的交互。而事实证明,其中一种交互可能会破坏SGX寻求提供的安全保障。这对我来说是新鲜的,尽管我读过很多关于研究SGX系统的文章。
如果你感兴趣的话,你可以在这里参考“防止页面错误告诉你的秘密”(CCS’16)。攻击依赖于操作系统控制下的侧面通道(因此在SGX威胁模型中被认为是攻击者的控制):页面错误。通过在几乎每条指令上诱导一个页面错误,足够的信息被泄漏出去,平均27%的密钥位可以恢复,如果使用OpenSSL和libgcrypt的加密密钥则可以恢复100%的密钥位。
也许具有讽刺意味的是,已知的最优方法利用了与事务内存扩展的看似无意的交互:事务中止而不是页面错误,因此操作系统不能观察事务性的扩展内存访问。
老实说,CET(控制流程执行技术)扩展听起来很酷。它通过维护影子堆栈和间接分支跟踪来防御代码重用攻击(如ROP)。影子堆栈只包含返回地址,并且无法访问正常代码。在返回的时候,来自常规和影子堆栈的地址会被弹出并进行比较——如果它们不匹配,就会有麻烦了!
CET承诺为不安全的C / C ++代码增加强大的防御,代价是牺牲大量的架构复杂度……主要的复杂性来自于功能交互。在x86上的控制传输已经非常复杂,包括许多调用和返回的形式,比如对不同的段或特权级别的调用。总共有9条指令(其中一些有很多变体,如JMP)被CET修改。
我们能保持这种速度吗?
随着复杂交互的系统级特性的复杂性的快速增长,我们看到了很高的变化速度。然而,“x86语义的忠实实现对于x86兼容的处理器、虚拟机、仿真器、JIT编译器、动态翻译器、反汇编器、调试器、评测器等都是至关重要的。”
……我们不得不质疑,在许多实现中,x86承诺的无限向后兼容性是否可持续。
当改进通过新的指令进行时,取得收益需要更长的时间
第一个SGX规格发布于2013年,首颗实现它的CPU直到2015年才发货,而支持SGX的服务器级CPU仍然在2017年初出现。另外再加上充分部署的时间,那么从初始规格到广泛适用便需要10年时间。在这个周期的某个时刻,软件开发人员将能够以合理的假设来开始SGX的开发。
这代表了软件开发人员的一个艰难的权衡;之前ISA扩展也花了很长时间部署,但是它们通常只能加速现有的功能;具有像SGX这样的功能,开发人员面临着一个严峻的选择;无限期地为安全性而等待,或者立即就部署它。
加上这个软件的滞后,我们可能会看到,新功能的普遍开发大概需要十多年的时间。
硬件和软件之间的界限正在变得模糊
仔细阅读英特尔的专利,你会看到,SGX指令完全以微代码实现。如果新的ISA功能是新的微代码,那么就可以在现有的CPU上支持它们。例如,或许(许多)新指令的(性能较差的)版本可以通过这种方式实现,从而为新特性的采用提供了一个更快的途径。它的许可和收入模式是一个开放的问题(与出售新CPU的愿望的相互作用)。
……现在比以往任何时候都更需要重新考虑指令集的概念,它不再是硬件和软件之间的界限,而是堆栈中的另一个翻译层。
今天是《半导体行业观察》为您分享的第1319期内容,欢迎关注。
摩尔邀请您加入精英微信群
关注微信公众号 半导体行业观察,后台回复关键词获取更多内容
回复 雄心 ,看《苹果的芯片帝国雄心》
回复 张汝京 ,看《中国半导体教父张汝京的“三落三起”》
回复 国产 ,看《国产手机崛起背后的最大受益者》
回复 ASR ,看《ASR收购Marvell MBU背后:一段有关RDA的爱恨情仇》
回复 IC ,看《一文看懂 IC 产业结构及竞争关系》
回复 展会 ,看《2017最新半导体展会会议日历》
回复 投稿 ,看《如何成为“半导体行业观察”的一员 》
回复 搜索 ,还能轻松找到其他你感兴趣的文章!
【关于转载】:转载仅限全文转载并完整保留文章标题及内容,不得删改、添加内容绕开原创保护,且文章开头必须注明:转自“半导体行业观察icbank”微信公众号。谢谢合作!
【关于征稿】:欢迎半导体精英投稿(包括翻译、整理),一经录用将署名刊登,红包重谢!签约成为专栏专家更有千元稿费!来稿邮件请在标题标明“投稿”,并在稿件中注明姓名、电话、单位和职务。欢迎添加我的个人微信号 MooreRen001或发邮件到 jyzhang@moore.ren