5.2. 对外部内核参数的重要更改
本章为系统管理员提供了与 Red Hat Enterprise Linux 8.3 附带的内核有显著变化的总结。这些更改包括添加或更新的 proc
条目、sysctl
和 sysfs
默认值、引导参数、内核配置选项或者任何可见的行为更改。
新内核参数
- 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 Zzlib
硬件支持一级压缩和解压缩 -
off
- 不支持 IBM Zzlib
硬件 -
def_only
- IBM Zzlib
硬件只支持deflate
算法(级别 1 压缩) -
inf_only
- IBM Zzlib
硬件只支持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 异常,而未执行,则内核将在
warn
或fatal
模式下发出一个 oops 错误。
-
- srbds = [X86,INTEL]
这个参数控制特殊寄存器缓冲区数据采样(SRBDS)缓解。
某些 CPU 容易受到类似于 Microarchitectural Data Sampling(MDS)的攻击,该漏洞可能会从随机数字生成器中泄漏位。
默认情况下,microcode 可缓解这个问题。但是, microcode 修复可能会导致
RDRAND
和RDSEED
指令变得非常慢。除其它影响外,这将减少urandom
内核随机源设备吞吐量。要禁用 microcode 缓解方案,请设置以下选项:
-
off
- 禁用缓解方案并消除对RDRAND
和RDSEED
的性能影响
-
- 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
参数一起使用,预先分配特定大小的巨页。在对中指定
hugepagesz
和hugepages
参数,例如:hugepagesz=2M hugepages=512
hugepagesz
参数只能在命令行中为特定的巨页面大小指定一次。有效的巨页大小取决于具体的构架。- hugepages = [HW]
这个参数指定预先分配的巨页数量。这个参数通常遵循有效的
hugepagesz
或default_hugepagesz
参数。但是,如果
hugepages
是第一个或者唯一的 HugeTLB 命令行参数,它将隐式指定要分配的巨页数。如果隐式指定默认大小的巨页数量,则默认大小的hugepagesz
+hugepages
参数无法对其进行覆盖。例如,在有 2M 默认巨页大小的构架中:
hugepages=256 hugepagesz=2M hugepages=512
从上面示例中的设置结果是分配 256 个 2M 巨页以及一个忽略
hugepages=512
参数的警告信息。如果hugepages
之前有无效的hugepagesz
,hugepages
会被忽略。- 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]
这个参数强制使用特定数量的内存。
在以下情况下使用的内存量:
- 用于测试。
- 当内核无法查看系统内存时。
位于
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:gij
。ID 是 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
- 适用于组可写入粘性目录。
-