5.2. 对外部内核参数的重要更改

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

新内核参数
acpi_no_watchdog = [HW,ACPI,WDT]
启用这个参数来忽略基于 Advanced Configuration 和 Power Interface(ACPI)的 watchdog 接口(WDAT),而让原生驱动程序控制 watchdog 设备。
dfltcc = [HW,S390]

这个参数配置 IBM Z 构架的 zlib 硬件支持。

格式:{ on | off | def_only | inf_only | always }

这些选项是:

  • on(默认)- IBM Z zlib 硬件支持一级压缩和解压缩
  • off - 不支持 IBM Z zlib 硬件
  • def_only - IBM Z zlib 硬件只支持 deflate 算法(级别 1 压缩)
  • inf_only - IBM Z zlib 硬件只支持 inflate 算法(解压缩)
  • always - 与 on 类似,但会忽略所选的压缩级别,并且始终使用硬件支持(用于调试)
irqchip.gicv3_pseudo_nmi = [ARM64]

此参数启用对内核中伪不可屏蔽中断(NMI)的支持。

要使用这个参数,您需要使用 CONFIG_ARM64_PSEUDO_NMI 配置项目构建内核。

panic_on_taint =

使用位掩码来有条件地调用 add_taint() 中的 panic()

格式:<hex>[,nousertaint]

代表一组 TAINT 标签的十六进制数字,当使用这个组中的任何标记调用 add_taint() 系统调用时,会导致内核 panic。可选的 nousertaint 选项通过将与panic_on_taint 中的 bitmask 匹配的 flagset 写入 /proc/sys/kernel/tainted 文件来防止用户空间强制崩溃。

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

prot_virt = [S390]

格式: <bool>

如果硬件支持,此参数允许被保护的虚拟机的托管与 hypervisor 隔离。

rcutree.use_softirq = [KNL]

这个参数启用对 Tree-RCU softirq 处理的淘汰。

如果您将此参数设置为零,它会将所有 RCU_SOFTIRQ 进程移动到每个 CPU rcuc kthreads 中。如果将 rcutree.use_softirq 设置为非零值(默认), 则默认使用 RCU_SOFTIRQ。指定 rcutree.use_softirq=0 来使用 rcuc kthreads。

split_lock_detect = [X86]

这个参数启用分割锁定检测。启用并存在硬件支持后,访问缓存行边界数据的原子指令将导致协调检查异常。

这些选项是:

  • off - 未启用
  • warn - 内核将发出关于触发 Alignment Check Exception(#AC)的应用程序的速率限制警告。这个模式是支持分割锁定检测的 CPU 的默认模式。
  • fatal - 内核将向触发 #AC 异常的应用程序发送总线错误(SIGBUS)信号。

    如果在用户模式中遇到了 #AC 异常,而未执行,则内核将在 warnfatal 模式下发出一个 oops 错误。

srbds = [X86,INTEL]

这个参数控制特殊寄存器缓冲区数据采样(SRBDS)缓解。

某些 CPU 容易受到类似于 Microarchitectural Data Sampling(MDS)的攻击,该漏洞可能会从随机数字生成器中泄漏位。

默认情况下,microcode 可缓解这个问题。但是, microcode 修复可能会导致 RDRANDRDSEED 指令变得非常慢。除其它影响外,这将减少 urandom 内核随机源设备吞吐量。

要禁用 microcode 缓解方案,请设置以下选项:

  • off - 禁用缓解方案并消除对 RDRANDRDSEED 的性能影响
svm = [PPC]

格式:{ on | off | y | n | 1 | 0 }

这个参数控制 pSeries 系统中的 Protected Execution Facility 的使用。

nopv = [X86,XEN,KVM,HYPER_V,VMWARE]

此参数禁用 PV 优化功能,它可强制客户端作为无 PV 驱动程序的通用客户端运行。

目前支持 XEN HVM、KVM、HYPER_V 和 VMWARE 客户端。

更新的内核参数
hugepagesz = [HW]

这个参数指定巨页大小。这个参数与 hugepages 参数一起使用,预先分配特定大小的巨页。

在对中指定 hugepageszhugepages 参数,例如:

hugepagesz=2M hugepages=512

hugepagesz 参数只能在命令行中为特定的巨页面大小指定一次。有效的巨页大小取决于具体的构架。

hugepages = [HW]

这个参数指定预先分配的巨页数量。这个参数通常遵循有效的 hugepageszdefault_hugepagesz 参数。

但是,如果 hugepages 是第一个或者唯一的 HugeTLB 命令行参数,它将隐式指定要分配的巨页数。如果隐式指定默认大小的巨页数量,则默认大小的 hugepagesz + hugepages 参数无法对其进行覆盖。

例如,在有 2M 默认巨页大小的构架中:

hugepages=256 hugepagesz=2M hugepages=512

从上面示例中的设置结果是分配 256 个 2M 巨页以及一个忽略 hugepages=512 参数的警告信息。如果 hugepages 之前有无效的 hugepageszhugepages 会被忽略。

default_hugepagesz = [HW]

这个参数指定默认的巨页大小。您只能在命令行中指定 default_hugepagesz 一次。另外,您还可以根据 hugepages 参数的 default_hugepagesz,来预分配默认大小的一定数量的巨页。另外,您可以隐式指定预分配的默认巨页数量。

例如,在有 2M 默认巨页大小的构架中:

hugepages=256
default_hugepagesz=2M hugepages=256
hugepages=256 default_hugepagesz=2M

以上示例中的设置会导致分配 256 2M 巨页。有效的默认巨页大小取决于构架。

efi = [EFI]

格式:{ "old_map", "nochunk", "noruntime", "debug", "nosoftreserve" }

这些选项是:

  • old_map [X86-64] - 切换到旧的基于 ioremap 的 EFI 运行时服务映射。32 位仍默认使用这个
  • nochunk - 禁止读取 EFI 启动存根的"块"中的文件,因为块可能会导致某些固件实现出现问题
  • noruntime - 禁用 EFI 运行时服务支持
  • debug - 启用其他调试输出
  • nosoftreserve - EFI_MEMORY_SP (特定用途)属性有时会导致内核为要声明的内存映射驱动程序保留内存范围。指定 efi=nosoftreserve 禁用此保留并根据基本类型处理内存(例如 EFI_CONVENTIONAL_MEMORY / "System RAM")。
intel_iommu = [DMAR]

Intel IOMMU 驱动程序 Direct Memory Access Remapping(DMAR)。

添加的选项有:

  • nobounce (默认 off)- 对不可信设备(如 Thunderbolt 设备)禁用 bounce 缓冲。这将把不被信任的设备视为可信的设备。因此,此设置可能会暴露直接内存访问(DMA)攻击的安全风险。
mem = nn[KMG] [KNL,BOOT]

这个参数强制使用特定数量的内存。

在以下情况下使用的内存量:

  1. 用于测试。
  2. 当内核无法查看系统内存时。
  3. 位于 mem 边界后的内存不包括在 hypervisor 中,不会分配给 KVM 客户系统。

    [x86] 以限制最大地址的方式工作。与 emmap 参数一起使用以避免物理地址空间冲突。没有 memmap,Peripheral Component Interconnect(PCI)设备可以使用属于未使用内存的地址。

    请注意,由于上面情况 3 的原因,此设置仅在启动期间生效,如果 hypervisor 的系统内存不够,则可能需要在启动后热添加内存。

pci = [PCI]

各种 PCI 子系统选项。

此处的某些选项针对特定的设备或一组设备(<pci_dev>)而操作。它们使用以下格式之一指定:

[<domain>:]<bus>:<dev>.<func>[/<dev>.<func>]*
pci:<vendor>:<device>[:<subvendor>:<subdevice>]

请注意,第一种格式指定了 PCI 总线/设备/功能地址,如果主板固件发生了变化,或者因为其他内核参数而导致变化,则该地址在插入新硬件时可能会发生变化。如果未指定域,它将被视为零。另外,通过多个设备/功能地址到设备的路径可以在基础地址后指定(这对于重新编号问题更有效)。第二种格式选择使用 ID 的设备,该配置空间中可能与系统中的多个设备匹配。

这些选项是:

  • hpmmiosize - 为热插拔桥的 Memory-mapped I/O(MMIO)窗口保留的固定总线空间量。默认大小为 2MB。
  • hpmmioprefsize - 为热插拔桥的 MMIO_PREF 窗口保留的固定总线空间。默认大小为 2MB。
pcie_ports = [PCIE]

外设 Component Interconnect Express(PCIe)端口服务处理。

这些选项是:

  • native - 使用原生 PCIe 服务(PME、AER、DPC、PCIe 热插拔),即使平台未授予操作系统权限来使用它们。如果平台也尝试使用这些服务,则此设置可能会造成冲突。
  • dpc-native - 只为 DPC 使用原生 PCIe。如果固件使用 AER 或 93C,则此设置可能会导致冲突。
  • compat - 禁用原生 PCIe 服务(PME、AER、DPC、PCIe 热插拔)。
rcu_nocbs = [KNL]
参数是一个 CPU 列表。字符串 "all" 可以用来指定系统中的每个 CPU。
usbcore.authorized_default = [USB]

默认 USB 设备授权。

这些选项是:

  • -1 (默认)- 授权,无线 USB 除外
  • 0 - 不授权
  • 1 - 授权
  • 2 - 如果设备连接到内部端口时,授权
usbcore.old_scheme_first = [USB]
这个参数允许从旧设备初始化方案开始。这个设置只适用于低速和全速设备(默认值为 0 = off)。
usbcore.quirks = [USB]

添加内置 USB 内核 quirk 列表的 quirk 条目列表。列表条目用逗号分开。每个条目的格式为 VendorID:ProductID:Flags,例如 quirks=0781:5580:bk,0a5c:5834:gijID 是 4 位十六进制数,Flags 是一组字母。每个字母都会改变内置的 quirk ; 如果当前被清除,则设置它,如果当前是设置的,则清除它。

添加的标记:

  • O - USB_QUIRK_HUB_SLOW_RESET,重置端口后,集线器需要额外的延迟
新的 /proc/sys/fs 参数
protected_fifos

此参数基于 Openwall 软件中的限制,并通过允许避免意外写入攻击者控制的 FIFO 来提供保护,而程序打算在此创建一个常规文件。

这些选项是:

  • 0 - 写入 FIFO 是不受限制的。
  • 1 - 除非它们归目录的所有者所有,否则不允许对 FIFO 打开 O_CREAT 标志,我们在全局可写的粘性目录中并不拥有这些 FIFO 。
  • 2 - 适用于组可写入粘性目录。
protected_regular

这个参数与 protected_fifos 参数类似,但它可避免写入攻击者控制的常规文件,而程序打算在此创建一个文件。

这些选项是:

  • 0 - 写入常规文件是不受限制的。
  • 1 - 除非它们归该目录所有者所有,否则不允许对常规文件打开 O_CREAT 标志,我们在全局可写的粘性目录中并不拥有这些常规文件。
  • 2 - 适用于组可写入粘性目录。