cnBeta.COM - 中文业界资讯站 ( ) • 2021-06-23 10:10
Travis Downs 在一篇新文章中指出,某件原以为可以给 CPU 提速的事情,最终被证实反而拖了处理器的后腿。在基于英特尔 Skylake 和 Ice Lake 芯片的基准测试平台上,他尝试了用 0 来填充给定大小(于 x 轴上变化)区域的吞吐量。可即便是相同的二进制文件,其在不同日期的基准测试成绩却显现了较大的差异。

0.png

据悉,两次测试分别发生于 6 月 7 / 8 号(周二 / 周三),但前一次用零填充的表现、较后一次跑同样的基准测试要快得多,让人不得不怀疑是 L2 缓存策略要背锅。

Travis Downs 指出,两套主机运行的是 Ubuntu 20.24 Linux 发行版,而 6 月 8 号(周三)那天恰好迎来了英特尔微码的操作系统更新。CPU 会在系统重启后加载新版微码,结果就出现了这种诡异的现象。

1 Skylake.png

Skylake 平台 - 跑分对比

仔细查看后可知,该微码禁用了 Travis Downs 在上一篇文章中讨论过的“硬件零存储优化”功能,以缓解 CVE-2020-24512 安全漏洞(英特尔在 INTEL-SA-00464 安全公告中有详细解释)。

虽然英特尔明面上没有提及,但微码禁用了零存储优化这件事的证据还是铺天盖地。更新后,填充零数据时的性能,已经变得和其它值相同了。

2 Ice Lake.png

Ice Lake 平台 - 跑分对比

追踪 CPU L2 缓存的性能计数器表明,零存储优化有重要作用的 Silent Evictions 操作,现几乎都是 non-silent 了。

考虑到大多数 Linux 发行版和 Windows 操作系统都会默认启用相关更新,Travis Downs 建议有疑惑的朋友也尝试重现一下对比跑分。