最近最常见的问题之一是针对Meltdown / Spectre的防护以及现在针对L1TF / Foreshadow的防护如何影响Linux性能。 本月开始
Linux 4.19内核开发,不仅为x86_64,而且为POWER / s390 / ARM都增加了火力。 为了大致了解补丁程序对性能的影响,我测试了三个Intel Xeon系统和两个AMD EPYC系统,以及两边的虚拟机,以评估带或不带相应补丁程序的Linux 4.19内核的默认性能。

在所有机器上,都安装了上周末发布的Linux内核4.19-rc1的系统。 在Intel上,相应的修补程序包括用于Meltdown的页表隔离(PTI / KPTI)和各种Spectre修补程序,以防止推测性执行命令,包括通过IBPB IBRS_FW使用retpoline清除__user指针,使用prctl和seccomp的推测性存储绕过漏洞的修补程序,以及虚拟机中的PTE反转和条件缓存刷新-适用于L1TF / Foreshadow。
默认情况下,Linux内核不会通过禁用Intel HT / SMT支持来提供针对漏洞的“全面”保护,因此,如果您使用虚拟机并提供不受信任的代码或用户访问VM,请记住这一点。 如果选择完全保护并禁用SMT,则由于可用线程数减少了一半,因此
对性能的
影响要明显得多 。 云服务提供商似乎只是在配置调度程序,以使SMT流不会通过用户。 这避免了禁用超线程的明显巨大成本。 所以现在我们只比较标准/默认内核的保护。

默认情况下,AMD EPYC仅针对与其相关的相应漏洞提供保护:清除Spectre V1的__user指针,Spectre V2的AMD Retpoline IBPB并禁用Spectre V4的推测性存储绕过(SSBD)。

在测试Linux 4.19-rc1股票内核上的所有配置之后,
在运行时使用
各种保护开关重复进行测试。 所有系统均通过Ubuntu Mainline Kernel PPA,最新的微代码/ BIOS,GCC 7.3和EXT4文件系统在具有Linux内核4.19-rc1的Ubuntu 18.04.1 LTS x86_64上进行了测试。

测试中的系统配置:
- MSI Z170A SLI PLUS主板,16 GB DDR4和256 GB Toshiba RD400 NVMe SSD上的Intel Xeon E3-1280 v5 Skylake。
- MSI X299 SLI PLUS主板,32 GB DDR4和80 GB Intel 530 SATA 3.0 SSD上的Intel Xeon E5-2687W v3 Haswell。
- 两个Intel Xeon Gold 6138 Tyan 1U机架,具有96 GB RAM和三星970 EVO NVMe SSD 256 GB。
- 上述双处理器Xeon Gold服务器上的KVM虚拟机。 该VM是计算机上唯一活动的进程,并且配置为访问CPU的80%的内核/线程(64个线程),48 GB的RAM和118 GB的虚拟磁盘。 在测试期间,主机和VM均禁用了漏洞保护功能。
- Tyan 2U服务器上的AMD EPYC 7601,具有128 GB RAM和280 GB Intel Optane 900p NVMe SSD。
- 上述AMD EPYC 7601服务器上的KVM虚拟机,可以访问80%的CPU内核/线程(52个线程),48 GB的RAM和120 GB的虚拟磁盘。
- 技嘉MZ31-AR0主板上的AMD EPYC 7551服务器,带有32 GB RAM和Samsung 960 EVO 256GB NVMe SSD。
显然,机器的配置是不同的,并且它们不打算相互比较,即检查Linux 4.19内核上的处理器漏洞的开/关保护。 因此,为清楚起见,所有数据都针对每个系统的性能进行了标准化。
Phoronix测试套件中的所有测试。
对于本文,选择了与Spectre / Meltdown相关的测试,即具有密集的输入输出或内核交互的测试。 负载仅在CPU上,在很大程度上不依赖于处理器缓存。

CompileBench配置文件可能是显示Spectre / Meltdown影响的最简单方法。 在Linux 4.19内核上,激活保护后,英特尔处理器的性能下降7–16%,而AMD处理器的性能下降3–4%。

在子测试中,与读取已编译的树类似的情况。 英特尔处理器的性能下降了14–15%,AMD处理器的性能下降了4–5%。

在诸如编译Linux内核的实际任务中,性能差异将达到2%左右。

Hackbench内核调度程序基准测试也遭受安全性激活的困扰。 在英特尔处理器中,除至强金牌外,性能降低了约20%。 AMD EPYC系统没有太大区别。

PostgreSQL数据库服务器是在处理器上安装保护后性能下降的真正应用程序之一。 在此特定测试中,英特尔处理器的差异为5-8%,而EPYC的差异为1%。



另一个由于Spectre / Meltdown而导致性能下降的真实程序是GIMP图形编辑器。 英特尔的差异为5-10%,AMD为0-2%。

英特尔Skylake E3 v5系统上的Redis DBMS降低了11%,其他英特尔处理器上的Redis DBMS降低了5-7%,AMD EPYC系统之间的差异为1-5%。

在Linux 4.19内核的经过测试的Xeon系统上,Nginx Web服务器的性能差异高达20%,而在AMD EPYC上,性能差异高达1-2%至6%。

同样,在默认安装过程中,Apache Web服务器在Intel处理器上激活保护后运行的速度要慢得多,而实际上在AMD处理器上没有更改。

在测试创建OSBench文件的速度时,Intel Xeon上的系统速度降低了13-16%,EPYC系统的速度降低了6-9%。

创建线程的测试还显示出Intel和AMD处理器之间的明显差异。


在启动程序和创建进程时,与禁用保护相比,Linux 4.19内核的默认操作存在较小但明显的差异。
安装补丁后,Linux 4.19内核上的处理器的性能就是这样。 请记住,如果您的系统对不可靠的用户/代码开放,尤其是在虚拟机中,则可能需要采取其他措施来进行保护,例如l1tf = full,直至禁用SMT / HT或强制刷新L1缓存,还有其他会进一步降低系统性能。 在
上一篇文章中更详细地介绍了这些针对L1TF / Foreshadow的保护的作用。
也许将来,我们将在具有台式机处理器和相应工作负载的Linux 4.19上运行类似的测试。