下图显示了填充给定尺寸(在X轴上变化)的区域的吞吐量,在Skylake(和第二个标签中的冰湖)上的零1。
这两个系列在显然相同的条件下产生:同一台机器上的相同二进制文件。只有基准运行的日期都会有所不同。也就是说,在星期二(6月7日)填充零的填充基本上比周三相同的基准更快,至少当区域不再适合L2高速缓存2时。
这里发生了什么?我的天窗和冰湖主持人只是在周三工作,并没有尽可能多地努力吗?是否有一个新的加密硬币基于谁可以存储最大的零,这是一个对策,以避免在这种新工作负载面前的膨胀CPU价格?
这些主机运行Ubuntu 20.04,并在6月8日星期三发布了对Intel-Microdode OS包的更新。重新启动3后,这将CPU加载新的微代码,导致上面显示的行为。具体而言,该微码4禁用我们在先前帖子中讨论的硬件零存储优化。在英特尔安全咨询英特尔-A-00464中,将CVE-2020-24512进一步描述了CVE-2020-24512。
要清楚,我不确定确定微码是否禁用零存储优化 - 但证据相当压倒性。更新后,在将零作为任何其他值填充零时,性能是相同的,并且跟踪L2的性能计数器驱逐的建议,即现在所有驱逐的建议现在是非沉默(从先前的帖子中召回沉默的驱逐是优化的标志) 。
虽然我怀疑性能影响将平均划分为6,但这意外仍然是提醒,原始CPU性能可以由于微码更新而默默地更改,并且大多数Linux发行版和现代窗口默认启用了这些更新。我们以前见过这个。如果您正在尝试运行可重复的基准,您应该始终重新运行整个套件,以便进行准确的比较,即使在相同的硬件上,也不仅仅是运行您认为已更改的内容。
在撰写本主题的早期博客条目时,我对这种优化的性能方面感兴趣,而不是其作为攻击矢量的潜力。但是,仅通过观察(和发布)结果,优化受到影响:由于观察结果,测量下的系统发生变化。我无法确保优化最终不禁用,但似乎近似原因这对微码的变化是我的早期帖子。
我不相信去除可以在基于时刻的侧通道中使用的任何优化是可持续的。我不确定这是一个要继续拉动的线程:实际上,现代CPU的各个方面都可以在基于内部状态7的性能和时序中变化。试图围绕共同位于实体紧密绘制安全范围(例如,进程在同一CPU,特别是在同一核心上),在没有完全大修CPU设计的情况下,没有允许任何泄漏似乎无法进行故障,可能是大量性能的成本。插头只有太多孔。
我希望一旦漏洞的漏洞和披露的浪潮,令人遗憾地登出,我们就可以开始使用测量的方法来分类和减轻时机和其他侧频攻击。这可以首先枚举哪些性能特征是合理保证的,并且不是。例如,可以指定内存访问定时是否可以基于访问的值而变化。如果允许变化,则允许零存储优化。
在任何情况下,我仍然计划写下与性能相关的微架立细节。我只是希望这一结果不再重复。
如果您有问题或任何类型的反馈,您可以在下面发表评论。
具体来说,它使用STD ::填充零参数,其中包含一些内联的预防,这最终导致使用一系列32字节向量的填充物,存储器和存储存储256个字节,每个展开的迭代将256个字节存储在一起,具有这样的循环体:
vmovdqu ymmword ptr [rax],ymm1 vmovdqu ymmword ptr [rax + 0x20],ymm1 vmovdqu ymmword ptr [rax + 0x40],ymm1 vmovdqu ymmword ptr [rax + 0x60],ymm1 vmovdqu ymmword ptr [rax + 0x80],ymm1 vmovdqu ymmword ptr [rax + 0xa0],ymm1 vmovdqu ymmword ptr [rax + 0xc0],ymm1 vmovdqu ymmword ptr [rax + 0xe0],ymm1
所以编译器做得很好:你不能要求比这更好。 ↩
我在这里做了一点retcon。根据日期描述的效果,我观察并在星期三开始标记并基准,但是当我有时间在相对噪声中正确地收集数据时,将生成一周的图情节的具体数据系列环境。因此,这两个系列在同一天重新收集,只有隐藏参数,您将从现在开始学习两个段落。 ↩
要清除,微码不是持久的,因此需要在每个启动时加载。如果删除或降级Intel-Microcode包,您将返回下一个引导后的较旧的微代码。也就是说,除非您还更新您的BIOS,除非您的Microdode更新,否则这将是持久的,除非您降级BIOS。 ↩
新的6月8日微码版本是SkyLake(先前与0xe2)的0xea,冰湖(先前与0xA0)的0xA6)。 ↩
图中所示的性能回归靠近最坏的情况:基准仅填充零,而不是别的。实际代码不花那么多的时间填充零,虽然零是毫无疑问的大块填充中的主导价值,至少因为操作系统必须归零页面,然后将其进程返回给用户进程和Java等内存安全语言将零一些物体和批量中的数组类型。 ↩
一旦考虑任何操作涉及的值影响功率使用,这种观察将变为几乎是普遍的(参见例如Schöne等人或Cornebize和Legrand)。由于电力使用可以直接(例如,Rapl或外部测量)或间接地(例如,由于热依赖性频率变化)观察到,这意味着理论上任何操作,即使是那些被广泛认为是恒定时间的操作,也可能泄漏信息。 ↩