如何让 Linux 系统在 Intel CPU 上运行得更快

你可能听说过 崩溃幽灵漏洞 这影响了许多现代处理器,包括英特尔、AMD、System Z、Power 和 ARM 的某些处理器。 值得庆幸的是,内核开发人员已经发布了安全补丁来解决 Meltdown/Spectre 问题。 在最近的内核版本中,补丁是默认实现的。 尽管安全补丁有助于缓解漏洞,但它们也影响了系统的性能。 是的,缓解措施会导致性能下降。 如果您确信您的系统得到了很好的保护,并且想要从您的个人系统中获得每一盎司的性能,那么本指南就是为您准备的。 本简要指南介绍了如何通过关闭 Spectre 和 Meltdown 缓解措施使 Linux 系统在 Intel CPU 上运行得更快。

一个警告

在实施以下解决方案之前,我必须警告您 – 这是非常不安全的,不推荐. 这将禁用 Intel CPU 上的所有 Spectre 和 Meltdown 缓解措施,并使您的 Linux 系统对所有安全风险敞开大门。 除非您清楚地知道自己在做什么,否则不要这样做。 你被警告了!

如果您根本不关心安全性,请继续禁用缓解措施,如下所述。

让 Linux 系统在 Intel CPU 上运行得更快

使用您喜欢的文本编辑器编辑您的 GRUB 文件。

Debian, Ubuntu

$ sudo nano /etc/default/grub

如果您使用的是 Linux 内核版本 5.1.13 和更高版本,请添加/编辑以下内核参数,如下所示:

GRUB_CMDLINE_LINUX="mitigations=off"

这将禁用所有可选的 CPU 缓解措施。 这提高了系统性能,但也可能使用户面临多个 CPU 漏洞。

如果您使用的是早于 5.1.13 的内核版本,请添加/编辑以下内容:

GRUB_CMDLINE_LINUX="noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off tsx=on tsx_async_abort=off mitigations=off"

用于禁用所有 Spectre 和 Meltdown 缓解措施的内核参数

这些是可用于禁用所有减慢 Linux 系统的 Spectre/Meltdown 缓解措施的内核参数。

了解每个标志的作用:

  • 黑人 – 在微码中禁用间接分支受限推测。
  • 无脑 – 禁用间接分支预测障碍。
  • 晚上 – 与 pti=off 相同。 控制用户和内核地址空间的页表隔离。 禁用此功能会消除强化,但会提高系统调用和中断的性能。
  • nospectre_v2 – 禁用 Spectre 变体 2(间接分支预测)漏洞的所有缓解措施。 使用此选项,系统可能允许数据泄漏,相当于 spectre_v2=off。
  • nospectre_v1 – 禁用 Spectre Variant 1 的缓解措施(边界检查绕过)。 使用此选项,系统中可能会发生数据泄漏。
  • l1tf=关闭 – 控制缓解受影响 CPU 上的 L1TF 漏洞。 内核 PTE 反转保护无条件启用且无法禁用。 禁用管理程序缓解并且不发出任何警告。 它还降低了虚拟机管理程序和裸机上的交换大小和可用 RAM 限制限制。
  • nospec_store_bypass_disable – 禁用 Speculative Store Bypass 漏洞的所有缓解措施。
  • no_stf_barrier – 禁用存储转发屏障(仅限 PPC)。
  • mds=关闭 – 控制微架构数据采样 (MDS) 漏洞的缓解措施。
  • tsx=on – 启用 Intel 的 TSX(事务同步扩展)支持。
  • tsx_async_abort=关闭 – 禁用 TAA(TSX 异步中止)缓解。
  • 缓解=关闭 – 禁用所有缓解措施。

有关每个标志的更多详细信息,请进行快速谷歌搜索。

添加内核参数后,使用以下命令更新 GRUB 配置:

$ sudo update-grub

最后,重启系统:

$ sudo reboot

在基于 RPM 的系统上,例如 CentOS RHEL, 编辑 /etc/sysconfig/grub 文件:

$ sudo /etc/sysconfig/grub

在 GRUB_CMDLINE_LINUX 中添加上述参数。 然后使用命令更新 GRUB 配置:

$ sudo grub2-mkconfig

最后重启:

$ sudo reboot

在某些 Linux 系统中,您可能需要将这些内核参数添加到 “GRUB_CMDLINE_LINUX_DEFAULT=”…”.

我们现在禁用了所有 Spectre 和 Meltdown 缓解措施。 这将稍微提高系统性能,但也可能使用户面临多个 CPU 漏洞。

检查 Spectre/Meltdown 缓解措施是否已禁用

我们可以用 “幽灵熔毁检查器” 帮助您识别 Linux 中的 Spectre 和 Meltdown 漏洞的工具。 它在一些 Linux 发行版的官方存储库中可用。

在 Debian、Ubuntu 上:

$ sudo apt install spectre-meltdown-checker

在 CentOS、RHEL 上:

$ sudo yum install epel-release
$ sudo yum install spectre-meltdown-checker

在 Fedora:

$ sudo dnf install $ sudo apt install spectre-meltdown-checker

安装 spectre-meltdown-checker 后,以 root 用户或使用 sudo 检查 Spectre 和 Meltdown 缓解措施是否已关闭的权限:

您应该会看到如下所示的消息。

[...] > STATUS: VULNERABLE (Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers) [...] > STATUS:  VULNERABLE  (IBRS+IBPB or retpoline+IBPB is needed to mitigate the vulnerability) [...] > STATUS:  VULNERABLE  (PTI is needed to mitigate the vulnerability) 

或者,您可以检查 Spectre/Meltdown 漏洞,如下所示。

$ ls /sys/devices/system/cpu/vulnerabilities/

示例输出:

itlb_multihit l1tf mds meltdown spec_store_bypass spectre_v1 spectre_v2 tsx_async_abort

和..

$ grep . /sys/devices/system/cpu/vulnerabilities/*

示例输出:

/sys/devices/system/cpu/vulnerabilities/itlb_multihit:KVM: Vulnerable /sys/devices/system/cpu/vulnerabilities/l1tf:Mitigation: PTE Inversion /sys/devices/system/cpu/vulnerabilities/mds:Vulnerable; SMT Host state unknown /sys/devices/system/cpu/vulnerabilities/meltdown:Vulnerable /sys/devices/system/cpu/vulnerabilities/spec_store_bypass:Vulnerable /sys/devices/system/cpu/vulnerabilities/spectre_v1:Vulnerable: __user pointer sanitization and usercopy barriers only; no swapgs barriers /sys/devices/system/cpu/vulnerabilities/spectre_v2:Vulnerable, STIBP: disabled /sys/devices/system/cpu/vulnerabilities/tsx_async_abort:Not affected