看一下Spectre / Meltdown三年后的CPU安全缓解成本

2021-01-09 15:37:30

自从Spectre和Meltdown公开发布以来,本周已经过去了三年,随后又引发了一系列CPU安全性披露,并且缓解措施常常导致可衡量的性能下降,下面我们来看看当今各种新旧设备的性能成本如何变化英特尔CPU和AMD处理器也是如此。本文研究的是使用默认缓解措施在Linux下当前的性能成本,然后在运行时禁用每个被测处理器的相关缓解措施,同时使用最新的Ubuntu 20.10与新的Linux 5.10 LTS配对核心。

为了了解在首次披露Meltdown和Spectre三年后的性能,我度过了假期重新测试了一系列Intel和AMD台式机处理器,以了解当前的默认缓解成本。测试了多种台式机处理器,同时使用了最新的Linux软件堆栈和Ubuntu 20.10,并提供了所有可用的稳定版本更新,并且还选择使用全新的Linux 5.10内核,该内核在长期支持方面也很重要( LTS)内核系列至少要维持五年。

在过去的三年中,我们继续看到新的漏洞被披露,从而导致了新的缓解措施。我们还继续看到正在进行的工作,这些工作试图尽量减少诸如返回蹦床(Retpolines)之类的性能损失,发现容易受Spectre V1问题影响的新内核代码等。

在三年的缓解期间,已经测试了多种台式机系统。在每个系统上,以默认配置引导Linux 5.10内核时使用了相同的软件堆栈,然后使用" mitigations = off"引导它之后的第二次运行。内核命令行标志,用于在运行时禁用过去三年来所有适用的CPU安全缓解措施。

下面是针对本文测试过的处理器的混合以及每个处理器的相关(默认)缓解措施。本文仅研究默认配置与关闭配置,并且不会切换SMT / HT或任何其他替代/额外的预防措施。

核心i7 4770K-itlb_multihit:KVM:禁用VMX缓解+ l1tf:缓解PTE反转; VMX:有条件的缓存刷新了SMT易受攻击者+ mds:清除了Clear缓冲区; SMT易受攻击+崩溃:缓解PTI + spec_store_bypass:通过prctl和seccomp禁用了SSB缓解+ spectre_v1:减轻了usercopy / swapgs障碍和__user指针清理+ spectre_v2:减轻了通用通用repoline IBPB:有条件的IBRS_FW STIBP: srbds:缓解微码+ tsx_async_abort:不受影响

核心i7 5775C-tlb_multihit:KVM:禁用VMX缓解+ l1tf:缓解PTE反转; VMX:有条件的缓存刷新了SMT易受攻击者+ mds:清除了Clear缓冲区; SMT易受攻击+崩溃:缓解PTI + spec_store_bypass:通过prctl和seccomp禁用了SSB缓解+ spectre_v1:减轻了usercopy / swapgs障碍和__user指针清理+ spectre_v2:减轻了通用通用repoline IBPB:有条件的IBRS_FW STIBP: srbds:减轻微码+ tsx_async_abort:减轻清除缓冲区; SMT脆弱

酷睿i7 7700K-itlb_multihit:KVM:禁用VMX缓解+ l1tf:缓解PTE反转; VMX:有条件的缓存刷新了SMT易受攻击者+ mds:清除了Clear缓冲区; SMT易受攻击+崩溃:缓解PTI + spec_store_bypass:通过prctl和seccomp禁用了SSB缓解+ spectre_v1:减轻了usercopy / swapgs障碍和__user指针清理+ spectre_v2:减轻了通用通用repoline IBPB:有条件的IBRS_FW STIBP: srbds:减轻微码+ tsx_async_abort:减轻清除缓冲区; SMT脆弱

核心i7 8700K-itlb_multihit:KVM:禁用VMX缓解+ l1tf:缓解PTE反转; VMX:有条件的缓存刷新了SMT易受攻击者+ mds:清除了Clear缓冲区; SMT易受攻击+崩溃:缓解PTI + spec_store_bypass:通过prctl和seccomp禁用了SSB缓解+ spectre_v1:减轻了usercopy / swapgs障碍和__user指针清理+ spectre_v2:减轻了通用通用repoline IBPB:有条件的IBRS_FW STIBP: srbds:减轻微码+ tsx_async_abort:减轻清除缓冲区; SMT脆弱

核心i9 9900K-itlb_multihit:KVM:禁用VMX缓解+ l1tf:不受影响+ mds:清除Clear缓冲区; SMT易受攻击+崩溃:未受影响+ spec_store_bypass:通过prctl和seccomp禁用了SSB的缓解+ spectre_v1:减轻了usercopy / swapgs障碍和__user指针清理+ spectre_v2:减轻了完全通用的repoline IBPB:有条件的IBRS_FW STIBPs:有条件的rbds :缓解微码+ tsx_async_abort:缓解清除缓冲区; SMT脆弱

Core i9 10900K-itlb_multihit:KVM:禁用VMX缓解+ l1tf:不受影响+ mds:不受影响+崩溃:不受影响+ spec_store_bypass:通过prctl和seccomp禁用了SSB缓解+ spectre_v1:缓解了用户复制/交换障碍和__user指针消毒+ spectre_v2:增强的IBRS IBPB的缓解:有条件的RSB填充+ srbds:不受影响+ tsx_async_abort:不受影响

Core i9 10980XE-itlb_multihit:KVM:禁用VMX + l1tf:不受影响+ mds:不受影响+崩溃:不受影响+ spec_store_bypass:通过prctl和seccomp禁用了SSB + spectre_v1:减轻了用户复制/交换障碍和__user指针清理+ spectre_v2:增强的IBRS缓解IBPB:有条件的RSB填充+ srbds:不受影响+ tsx_async_abort:禁用TSX

Ryzen 7 1800X-itlb_multihit:不受影响+ l1tf:不受影响+ mds:不受影响+崩溃:不受影响+ spec_store_bypass:通过prctl和seccomp + spectre_v1禁用了SSB的缓解:减少了usercopy / swapgs障碍和__user指针清理+ spectre_v2:完全AMD瑞波林IBPB的缓解:有条件的STIBP:禁用RSB填充+ srbds:不受影响+ tsx_async_abort:不受影响

Ryzen 9 3950X-itlb_multihit:不受影响+ l1tf:不受影响+ mds:不受影响+崩溃:不受影响+ spec_store_bypass:通过prctl和seccomp + spectre_v1禁用了SSB的缓解:减轻了usercopy / swapgs障碍和__user指针清理+ spectre_v2:完全AMD瑞波林IBPB的缓解:有条件的STIBP:有条件的RSB填充+ srbds:不受影响+ tsx_async_abort:不受影响

Ryzen Threadripper 3970X-itlb_multihit:不受影响+ l1tf:不受影响+ mds:不受影响+崩溃:不受影响+ spec_store_bypass:通过prctl和seccomp + spectre_v1禁用了SSB的缓解:减少了usercopy / swapgs障碍和__user指针清理:spectre_v2完全AMD瑞波林IBPB的缓解:有条件的STIBP:有条件的RSB填充+ srbds:不受影响+ tsx_async_abort:不受影响

Ryzen 9 5950X-itlb_multihit:不受影响+ l1tf:不受影响+ mds:不受影响+崩溃:不受影响+ spec_store_bypass:通过prctl和seccomp + spectre_v1禁用了SSB缓解:减少了usercopy / swapgs障碍和__user指针清理+ spectre_v2:完全AMD瑞波林IBPB的缓解:有条件的IBRS_FW STIBP:永远在线的RSB填充+ srbds:不受影响+ tsx_async_abort:不受影响

在每个测试的系统上都使用了相同的固态存储,并且每个系统都以RAM以及每个平台的最佳存储通道数和频率运行。通过Phoronix测试套件,使用Linux 5.10以后的默认内核保护,然后以mitigations = off模式,执行了与这些CPU安全缓解相关的各种工作负载。