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

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

新内核参数

idxd.tc_override = [HW]

使用 <bool> 格式的此参数,您可以允许覆盖设备的默认流量类配置。

默认值设为 false (0)。

kvm.eager_page_split = [KVM,X86]

有了这个参数,您可以控制 KVM 在脏日志记录期间是否主动分割所有巨页。Eager 页面分割通过消除写保护错误和内存管理单元(MMU)锁定争用而减少 vCPU 执行中断,否则需要延迟分割大页面。

很少执行写或只写入虚拟机内存的一小部分区域的虚拟机工作负载可从禁用 eager 页分割中受益,从而使巨页仍被用于读。

eager 页分割行为取决于是否启用或禁用了 KVM_DIRTY_LOG_INITIALLY_SET 选项。

  • 如果禁用了,则 memslot 中的所有巨页在对那个 memslot 启用脏日志时,都会被急切地分割。
  • 如果启用了,在 KVM_CLEAR_DIRTY ioctl() 系统调用期间会执行 eager 页分割,并且仅对被清除的页。

    Eager 页分割目前只支持分割由两个维度的分页(TDP) MMU 映射的巨页。

    默认值设为 Y (on)。

kvm.nx_huge_pages_recovery_period_ms = [KVM]

有了这个参数,您可以控制 KVM zaps 4 KiB 页面回到巨页的时间段。

  • 如果值为非零 N,KVM 会每 N 毫秒切换一部分页面。
  • 如果值为 0, KVM 根据比例选择一个时间段,从而使页面平均 1 小时后切换。

    默认值设为 0

mmio_stale_data = [X86,INTEL]

有了这个参数,您可以控制对 Processor Memory-mapped I/O (MMIO) Stale 数据漏洞的缓解。

处理器 MMIO Stale Data 是一个漏洞,其可在 MMIO 操作后暴露数据。暴露的数据可能源自或结束于受元数据服务器(MDS)和事务性异步中止(TAA)影响的相同的 CPU 缓冲区。因此,与 MDS 和 TAA 类似,缓解是为了清除受影响的 CPU 缓冲区。

可用的选项有:

  • full: 对存在安全漏洞的 CPU 启用缓解
  • full,nosmt: 对存在安全漏洞的 CPU 启用缓解并禁用 SMT。
  • off: 无条件禁用缓解

    在 MDS 或 TAA 受影响的机器上,活跃的 MDS 或 TAA 缓解可以防止 mmio_stale_data=off,因为这些漏洞使用同样的机制缓解。因此,为了禁用这个缓解,您还需要指定 mds=offtsx_async_abort=off

    不指定这个选项等同于 mmio_stale_data=full

    如需更多信息,请参阅 Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst

rcutree.rcu_delay_page_cache_fill_msec = [KNL]
有了这个参数,您可以在响应低内存情况下设置页面缓冲回填延迟(毫秒)。允许的值的范围是 0:100000
rcuscale.kfree_rcu_test_double = [KNL]
有了这个参数,您可以测试 kfree_rcu () 函数的双参数变体。如果此参数有与 rcuscale.kfree_rcu_test_single 一样的值,则将测试单参数和双参数变体。
rcuscale.kfree_rcu_test_single = [KNL]
有了此参数,您可以测试 kfree_rcu() 函数的单参数变体。如果此参数的值与 rcuscale.kfree_rcu_test_double 的值相同,则将测试单参数和双参数变体。
retbleed = [X86]

有了这个参数,您可以控制具有返回说明(RETBleed)漏洞的 Arbitrary Speculative Code Execution 的缓解。可用的选项有:

  • off:没有缓解
  • auto: 自动选择一个缓解
  • auto,nosmt: 自动选择一个缓解,如果需要完全缓解,禁用 SMT (只在 Zen1 和没有 STIBP 的旧 Zen1 上)。
  • ibpb :缓解基本块边界上的短期投机窗口。安全,最高的性能影响。
  • unret :强制启用未训练的返回 thunks,仅对基于 AMD f15h-f17h 的系统有效。
  • unret,nosmt: 与 unret 选项一样,当 STIBP 不可用时禁用 SMT。

    根据 CPU,选择 auto 选项来在运行时选择缓解方法。

    不指定这个选项等同于 retbleed=auto

s390_iommu_aperture = [KNL,S390]

有了此参数,您可以指定通过 DMA 和 IOMMU API 可访问的每个设备 DMA 地址空间的大小,来作为主内存大小的十进制因子。

  • 默认值设为 1,意味着您可以并发使用尽可能多的安装的物理内存的 DMA 地址,如果硬件支持,因此一次性映射所有内存。
  • 有了值 2,您可以映射所有内存两次。
  • 0 不会对硬件提供的内存进行限制,代价是需要大量额外的内存用于表。

更新的内核参数

acpi_sleep = [HW,ACPI]

格式:{s3_bios, s3_mode, s3_beep, s4_hwsig, s4_nohwsig, old_ordering, nonvs, sci_force_enable, nobl}

  • 有关 s3_bioss3_mode 的更多信息,请参见 Documentation/power/video.rst
  • s3_beep 用于调试;它使得 PC 的扬声器在调用内核实模式入口点时发出嘟嘟声。
  • s4_hwsig 会导致内核在从休眠状态恢复过程中检查 ACPI 硬件签名,如果其更改了,则拒绝恢复。默认行为是允许恢复,并在签名更改时简单警告,除非启用了 s4_hwsig 选项。
  • s4_nohwsig 可防止在恢复过程中使用 ACPI 硬件签名或警告。old_ordering 会导致关于将设备置于低功耗状态的 _PTS 控制方法的 ACPI 1.0 排序的强制执行。默认使用 _PTS 的 ACPI 2.0 排序。
  • nonvs 可防止内核在挂起、休眠和恢复过程中保存和恢复 ACPI NVS 内存。
  • sci_force_enable 可使内核在从 S1/S3 恢复时直接设置 SCI_EN。即使此行为与 ACPI 规范相反,一些损坏的系统没有它也无法正常工作。
  • nobl 会导致已知的在某些方面与系统挂起和恢复的不正确的行为有关的系统的内部拒绝列表被忽略。明智地使用这个选项。

    如需更多信息,请参阅 Documentation/power/video.rst

crashkernel=size[KMG],high = [KNL, X86-64, ARM64]

有了这个参数,您可以按如下方式从顶部分配物理内存区域:

  • 如果系统安装了超过 4 GB RAM,则物理内存区域可能会超过 4 GB。
  • 如果系统安装了少于 4 GB RAM,则物理内存区域将在 4 GB 下分配(如果可用的话)。

    如果指定了 crashkernel=X 参数,则忽略此参数。

crashkernel=size[KMG],low = [KNL, X86-64]

当您传递 crashkernel=X,high 时,内核可以分配超过 4 GB 的物理内存区域。这会导致在需要一些低内存的系统上出现第二次内核崩溃(例如,swiotlb 需要至少 64M+32K 低内存),需要足够的低内存以确保 32 位设备的 DMA 缓冲区不会被耗尽。内核尝试自动分配低于 4 GB 的至少 256 M 内存。有了此参数,您可以为第二个内核指定 4 GB 的低范围。

  • 0: 禁用低分配。当 crashkernel=X,high 未使用或保留的内存低于 4 GB 时,它将会被忽略。
kvm.nx_huge_pages_recovery_ratio = [KVM]

有了这个参数,您可以控制有多少 4KiB 页会被定期切换回巨页:

  • 0 禁用恢复
  • N KVM 每个时间段监切换 4KiB 页的1/Nth

    默认值设为 60

module.sig_enforce = norid [S390]
有了这个参数,您可以忽略 RID 字段,并强制每个 PCI 功能使用一个 PCI 域。
rcu_nocbs[=cpu-list] = [KNL]

可选参数是一个 CPU 列表。

在使用 CONFIG_RCU_NOCB_CPU=y 构建的内核中,您可以启用 no-callback CPU 模式,这可防止从 softirq 上下文调用此类 CPU 回调。这类 CPU 的 RCU 回调的调用将会被卸载到为那个目的创建的 rcuox/N kthreads ,其中 x 是 RCU-preempt 的 p ,RCU-sched 的 s ,调解宽限期的 kthreadsgN 是 CPU 号。这可减少卸载 CPU 上的 OS 抖动,这对于 HPC 和实时工作负载非常有用。它还可提高非对称多处理器的能源效率。

  • 如果将 cpulist 作为参数传递,则指定的 CPU 列表被设置为启动的 no-callback 模式。
  • 如果省略 = 符号和 cpulist 参数,则不会将 CPU 设置为启动的 no-callback 模式,但您可以使用 cpusets 在运行时切换模式。
spectre_v2_user = [X86]

有了这个参数,您可以控制用户空间任务之间的 Spectre 变体 2 (直接分支推测)漏洞的缓解。

  • auto :内核根据可用的 CPU 功能和漏洞选择缓解。
  • 默认缓解被设置为 prctl
  • 不指定这个选项等同于 spectre_v2_user=auto
spec_store_bypass_disable = [X86]

有了这个参数,您可以控制是否使用 Speculative Store Bypass (SSB)优化来缓解 SSB 漏洞。

  • 不指定这个选项等同于 spec_store_bypass_disable=auto
  • 默认缓解被设置为 prctl

新的 sysctl 参数

perf_user_access = [ARM64]

有了这个参数,您可以控制读取性能事件计数器的用户空间的访问。

  • 当设置为 1 时,用户空间可以直接读取性能监控计数器寄存器。
  • 默认值设为 0,这表示 访问被禁用

    如需更多信息,请参阅 Documentation/arm64/perf.rst

force_cgroup_v2_swappiness

有了此参数,您可以弃用仅在 cgroupV1 中可用的每个组的 swappiness 值。由于 systemd 设计选择,大多数系统和用户进程都在 cgroup 中运行。另外,这些 cgroup swappiness 值默认为 60。这会导致不希望的影响,其中系统 swappiness 值对系统的交换行为有较小的影响。

如果要使用每个cgroup swappiness 功能,您可以使用 force_cgroup_v2_swappiness=1 配置系统,以便在整个系统中有更加一致的 swappiness 行为。

请注意,这是 RHEL 的专有功能。