第 3 章 对外部内核参数的重要更改

本章为系统管理员提供了 Red Hat Enterprise Linux 8.1 随附的内核有显著变化的总结。这些更改包括添加或更新的 proc 条目、sysctlsysfs 默认值、引导参数、内核配置选项或任何可见的行为更改。

新内核参数

perf_v4_pmi = [X86,INTEL]

这个参数禁用 Intel PMU 计数器冻结功能。

该功能仅从 Arch Perfmon v4(Skylake 和更新版本)开始。

格式: <bool>

hv_nopvspin [X86,HYPER_V]
此参数禁用半虚拟跳锁优化,允许管理程序在锁定争用时"隔离"客户机。
ipcmni_extend [KNL]
此参数将唯一 System V IPC 标识符的最大数量从 32,768 扩展至 16,777,216。
kpti = [ARM64]

这个参数控制用户和内核地址空格的页表隔离。

这些选项是:

  • Default: 在需要缓解的内核上启用。
  • 0: force disabled
  • 1: force enabled
mds = [X86,INTEL]

此参数控制 Micro-architectural Data Sampling(MDS)漏洞的缓解方案。

某些 CPU 容易遭受 CPU 内部缓冲区的攻击,在某些情况下可将信息转发到泄漏小工具。在存在安全漏洞的处理器中,缓存侧频道攻击可以利用预测的数据转发,访问到应该无法直接访问到的数据。

这些选项是:

  • full - 在存在安全漏洞的 CPU 上启用 MDS 缓解。
  • full,nosmt - 在存在安全漏洞的 CPU 上启用 MDS 缓解措施并禁用 Simultaneous Multi Threading(SMT)。
  • off - 无条件禁用 MDS 缓解措施。

    不指定这个参数等同于 mds=full

    详情请查看上游内核文档

mitigations = [X86,PPC,S390,ARM64]

此参数控制 CPU 漏洞的可选缓解方案。这是一组策展的、架构独立的选项,每个选项都是现有的特定架构选项的聚合。

这些选项是:

  • off - 禁用所有可选 CPU 缓解方案。这提高了系统性能,但也可能会为用户提供几个 CPU 漏洞。

    等同于:

    • nopti [X86,PPC]
    • kpti=0 [ARM64]
    • nospectre_v1 [X86,PPC]
    • nobp=0 [S390]
    • nospectre_v2 [X86,PPC,S390,ARM64]
    • spectre_v2_user=off [X86]
    • spec_store_bypass_disable=off [X86,PPC]
    • ssbd=force-off [ARM64]
    • l1tf=off [X86]
    • mds=off [X86]
  • auto (默认)- 匹配所有 CPU 漏洞,但让 Simultaneous Multi Threading(SMT)保持启用,即使它存在安全漏洞。这个选项适用于 SMT 在内核升级过程中被禁用,或者有其它方法避免基于 SMT 攻击的用户。

    等同于:

    • (默认行为)
  • auto,nosmt - 缓解所有 CPU 漏洞,根据需要禁用 Simultaneous Multi Threading(SMT)。这个选项适用于始终希望完全缓解的用户,即使它意味着丢失 SMT。

    等同于:

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]
novmcoredd [KNL,KDUMP]

这个参数禁用设备转储。

设备转储允许驱动程序将转储数据附加到 vmcore,以便您可以收集驱动程序指定的调试信息。驱动程序可以在没有任何限制的情况下附加数据,此数据存储在内存中,因此可能会产生大量内存压力。

禁用设备转储可帮助保存内存,但驱动程序调试数据将不再可用。

这个参数只有在设置了 CONFIG_PROC_VMCORE_DEVICE_DUMP 内核配置时才可用。

nospectre_v1 [X86]

这个参数禁用对 Spectre 变体 1(跳过绑定检查)的缓解方案。

使用这个选项时,系统中可能会出现数据泄漏。

psi = [KNL]

这个参数启用或禁用压力停滞的信息跟踪。

格式: <bool>

random.trust_cpu={on,off} [KNL]
这个参数启用或禁用信任使用 CPU 的随机数字生成器(如果可用)来完全查看内核的加密随机数字生成器(CRNG)。默认由 CONFIG_RANDOM_TRUST_CPU 内核配置控制。
vm_debug[=options] [KNL]

可用于 CONFIG_DEBUG_VM=y

启用这个参数可能会减慢系统引导速度,特别是在有大量内存的系统中。

所有选项都默认启用,此接口允许有选择地启用或禁用特定的虚拟内存调试功能。

这些选项是:

  • P - 启用页面结构 init 时间投毒。
  • - (短划线)- 禁用上述所有选项。

更新的内核参数

cgroup_no_v1 = [KNL]

此参数在版本 1(v1)中禁用 cgroup 控制器和命名层次结构。

参数类似于 cgroup_disable 内核参数,但只适用于 cgroup v1。黑名单控制器在 cgroup2 中仍然可用。"all"选项将所有控制器和"named"选项列入黑名单,禁用命名挂载。指定"all"和"named"可禁用所有 v1 层次结构。

格式:{ { controller | "all" | "named" } [,{ controller | "all" | "named" }…​] }

crashkernel = size[KMG][@offset[KMG]][KNL]

kexec 系统调用允许 Linux 在 panic 时切换到 'crash 内核'。此参数保留该内核镜像的物理内存区域 [offset, offset + size]。如果省略 @offset,则会自动选择合适的偏移。

[KNL, x86_64] 首先选择 4G 下的区域,并在未指定 @offset 时回退以保留 4G 以上的地区。

如需更多信息,请参阅上游 kdump 文档

l1tf = [X86]

此参数控制受影响 CPU 上 L1 Terminal Fault(L1TF)漏洞的缓解。

这些选项是:

  • off - 禁用虚拟机监控程序缓解措施,且不会发出任何警告。它还会在系统管理程序和裸机上丢弃交换大小和可用 RAM 限制限制。
  • flush - 是默认值。

    详情请查看上游内核文档

nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64]

此参数禁用 Spectre 变体 2(直接分支预测)漏洞的所有缓解方案。

系统可能会允许使用此参数出现数据泄漏。

pci=option[,option…​] [PCI]

各种 PCI 子系统选项.

这些选项是:

  • force_floating [S390] - 强制使用浮动中断。
  • nomio [S390] - 不使用内存输入/输出(MIO)指令。

新的 /proc/sys/kernel 参数

hyperv_record_panic_msg

这个参数控制 panic 内核信息(kmsg)数据是否向 Hyper-V 报告。

值是:

  • 0 - 不报告 panic kmsg 数据。
  • 1 - 报告 panic kmsg 数据。这是默认的行为。

新的 /proc/sys/net 参数

bpf_jit_limit

此参数对分配给 Berkeley Packet Just-in-Time(BPF JIT)编译器的内存分配实施全局限制,以便在超过非特权 JIT 请求后拒绝它。

bpf_jit_limit 参数包含全局限制的值,以字节为单位。

更新了 /proc/sys/fs 参数

dentry-state

dentry 是动态分配和取消分配的。

用户可以通过读取 /proc/sys/fs/dentry-state 文件检索以下值:

  • nr_dentry - 显示分配的目录项总数(活跃 + 未使用)。
  • nr_unused - 显示未使用但当前使用的 Least 中的目录项数(LRU)列表供以后重复使用。
  • age_limit - 显示内存不足时可重新声明 dcache 条目的年龄(以秒为单位)。
  • want_pages - 当调用了 shrink_dcache_pages() 函数且 dcache 尚未修剪时,则为非零。
  • nr_negative - 显示也没有映射到任何文件的负目录项的数量。相反,它们有助于加快拒绝用户提供的非现有文件。

更新了 /proc/sys/kernel 参数

msg_next_id, sem_next_id, and shm_next_id

备注:

  1. 内核不保证新对象具有所需的 ID。它取决于用户空间,以及如何使用"wrong" ID 处理对象。
  2. 在成功分配进程间通信(IPC)对象分配后,内核将使用非默认值切换回 -1。如果 IPC 对象分配 syscall 失败,如果值未修改或重置为 -1,则该值将被取消定义。