第 5 章 对外部内核参数的重要更改
本章为系统管理员提供了 Red Hat Enterprise Linux 8.6 附带的有关内核中显著变化的摘要。这些更改包括添加或更新的 proc
条目、sysctl
和 sysfs
默认值、引导参数、内核配置选项或者任何可见的行为更改。
新内核参数
- fw_devlink.strict = [KNL]
格式: <bool>
使用这个参数,您可以将所有推断的依赖项视为强制依赖项。此设置仅在
fw_devlink=on|rpm
时才适用。- no_hash_pointers
-
通过这个参数,您可以强制打印到控制台或缓冲区的指针未被哈希。默认情况下,当使用
%p
格式字符串打印指针时,指针的值会被哈希掩盖。这是一个安全功能,其对非特权用户隐藏了实际内核地址。但是,它也使调试内核变得更加困难,因为您无法比较不相等的指针。如果指定了此命令行参数,则所有正常的指针都会打印其真正的值。使用%pK
格式字符串打印的指针仍然可以被哈希。仅在调试内核且不在生产环境中使用它时才指定no_hash_pointers
。 - no_entry_flush = [PPC]
- 使用这个参数,可以在进入内核时避免清除 L1-D 缓存。
- no_uaccess_flush = [PPC]
- 使用这个参数,可以在访问用户数据后避免清除 L1-D 缓存。
- rcutorture.nocbs_nthreads = [KNL]
使用这个参数,您可以设置 Read-copy-update(RCU) 回调-卸载切换器的数量。
默认值为 0(零),禁用切换。
- rcutorture.nocbs_toggle = [KNL]
- 使用这个参数,您可以在连续的回调卸载切换尝试之间设置延迟(以毫秒为单位)。
- refscale.verbose_batched = [KNL]
使用此参数,您可以批量处理其他
printk()
语句。您可以通过指定零(默认值)或负值来打印任何内容。否则,打印每个第 N 个详细语句,其中 N 是指定的值。
- strict_sas_size = [X86]
格式: <bool>
使用这个参数,您可以启用或禁用针对所需的信号帧大小的严格的
sigaltstack
大小检查,这取决于支持的浮点单元(FPU)功能。您可以使用这个参数来过滤二进制文件,这些二进制文件尚未解AT_MINSIGSTKSZ
辅助向量。- torture.verbose_sleep_frequency = [KNL]
这个参数指定了每次休眠之间应发出多少详细的
printk()
语句。默认值 0(零)会禁用 verbose-printk()修眠。
- torture.verbose_sleep_duration = [KNL]
- 此参数指定 jiffies 中每个 verbose-printk()修眠的持续时间。
- tsc_early_khz = [X86]
格式:<unsigned int>
这个参数允许跳过早期时间戳计数器(TSC)校准,而使用给定的值。当早期的 TSC 频率发现过程不可靠时,该参数很有用。例如,在支持 CPUID.16h 和部分支持 CPUID.15h 的超频系统上。
更新的内核参数
- amd_iommu = [HW,X86-64]
您可以将参数传递给系统中的 AMD IOMMU 驱动程序。
可能的值有:
-
fullflush
- 在未映射时启用 IO/TLB 条目的清除。否则,会在重新使用之前清除它们,这快很多。 -
off
- 不要初始化系统中发现的任何 AMD IOMMU。 -
force_isolation
- 强制隔离所有设备。不再允许 IOMMU 驱动程序根据需要解除隔离要求。此选项不会覆盖iommu=pt
。 -
force_enable
- 在已知启用 IOMMU 会存在缺陷的平台上强制启用 IOMMU。请谨慎使用这个选项。
-
- acpi.debug_level = [HW,ACPI,ACPI_DEBUG]
格式:<int>
必须启用
CONFIG_ACPI_DEBUG
来生成任何高级配置和电源接口(ACPI)调试输出。debug_layer
中的位对应于 ACPI 源文件中的_COMPONENT
。例如,debug_level 中的#define _COMPONENT ACPI_EVENTS
位对应于ACPI_DEBUG_PRINT
语句中的级别。例如ACPI_DEBUG_PRINT((ACPI_DB_INFO, …
debug_level 掩码默认为 "info"。有关调试层和级别的更多信息,请参阅
Documentation/acpi/debug.txt
。启用处理器驱动程序信息消息:
acpi.debug_layer=0x20000000
启用 AML "Debug" 输出,例如,在解释 AML 过程中存储到调试对象:
acpi.debug_layer=0xffffffff
,acpi.debug_level=0x2
启用与 ACPI 硬件有关的所有消息:acpi.debug_layer=0x2
,acpi.debug_level=0xffffffff
有些值生成系统无法使用的输出。如果您需要捕获更多输出,则
log_buf_len
参数是很有用的。- acpi_mask_gpe = [HW,ACPI]
格式:<byte> 或 <bitmap-list>
由于
_Lxx/_Exx
的存在,一些由不支持的硬件或固件功能所触发的通用事件(GPE)可能会导致 GPE 泛滥,而无法被 GPE 分派程序自动禁用。您可以使用这个功能来防止这种不受控制的 GPE 泛滥。- cgroup_disable = [KNL]
格式:<要禁用的控制器或功能的名称>
使用这个参数,您可以禁用特定的控制器或可选功能。
cgroup_disable = <controller/feature>
的影响是:-
如果您在单一层次结构中挂载所有
cgroup
,则控制器/功能
将不会被自动挂载 -
控制器/功能
作为单独的可挂载子系统不可见 如果
controller/feature
是一个可选功能,则这个功能会被禁用,且不会创建相应的cgroups
文件目前,仅内存控制器处理这个问题,并削减开销,其他的只是禁止使用。因此,只有
cgroup_disable=memory
才是真正值得注意的。指定 "pressure" 会禁用按 cgroup 的失速信息记帐功能。
-
如果您在单一层次结构中挂载所有
- clearcpuid = BITNUM[,BITNUM…] [X86]
-
使用这个参数,您可以禁用内核的 CPUID 功能 X。如需有效的位数,请参见
arch/x86/include/asm/cpufeatures.h
。Linux 特定的位不一定比内核选项稳定,但供应商特定的位应该是稳定的。直接调用 CPUID 的用户程序或使用不需要检查任何事情的功能仍可以看到它。这只是防止它被内核使用,或者在/proc/cpuinfo
中显示。另外请注意,如果您禁用了一些关键位,内核可能会出问题。 - iommu.strict = [ARM64, X86]
格式:<"0" | "1">
使用这个参数,您可以配置转换查找缓冲区(TLB)无效行为。
可能的值有:
- 0 - lazy 模式,使用直接内存访问(DMA)取消映射操作的请求会延迟
1 - 严格模式(默认),DMA 取消映射操作会使同步 IOMMU 硬件 TLB 失效。
在 AMD64 和 Intel 64 上,默认行为取决于等价的特定于驱动程序的参数。但是,由任一方法显式指定的严格模式优先。
- rcutree.use_softirq = [KNL]
如果此参数设为零,它会将所有
RCU_SOFTIRQ
处理移到按 CPU 的 rcuc kthreads 。默认值为非零值。这意味着默认使用RCU_SOFTIRQ
。指定
rcutree.use_softirq = 0
以使用 rcuc kthreads。但请注意,CONFIG_PREEMPT_RT=y
内核禁用此内核引导参数(强制将其设为零)。- rcupdate.rcu_normal_after_boot = [KNL]
这个参数允许引导完成后只使用正常的宽限期原语。这是在
rcu_end_inkernel_boot()
调用被调用之后。这对CONFIG_TINY_RCU
内核没有影响。带有
CONFIG_PREEMPT_RT=y
设置的内核,启用此内核引导参数并强制将其设为值 1 。也就是说,将快速 Read-copy-update(RCU)宽限期内的任何后引导尝试转换为使用正常的非快速宽限期处理。- spectre_v2 = [X86]
通过这个参数,您可以控制 Spectre 变体 2(间接分支推测)漏洞的缓解。
默认的操作可以防止内核免受用户空间的攻击。
可能的值有:
-
on - 无条件启用,意味着
spectre_v2_user=on
-
off - 无条件禁用,意味着
spectre_v2_user=off
auto - 内核检测您的 CPU 型号是否存在安全漏洞
选择 'on' 将会在运行时根据 CPU 选择一个缓解方法,而选择 'auto' 则可能会在运行时根据 CPU 选择一个缓解方法。可用的微码、
CONFIG_RETPOLINE
配置选项的设置,以及用于构建内核的编译器。选择 'on' 也会启用对用户空间到用户空间任务攻击的缓解。
选择"off"将禁用内核和用户空间保护。
您也可以手动选择特定的缓解方案:
- retpoline - 替换间接分支
- retpoline,generic - Retpolines
- retpoline,lfence - LFENCE; 间接分支
- retpoline,amd - retpoline,lfence 的别名
- eibr - 增强的间接分支限制投机(IBRS)
- eibrs,retpoline - 增强的 IBRS + Retpolines
- eibrs,lfence - 增强的 IBRS + LFENCE
- ibrs - 使用 IBRS 来保护内核
- ibrs_always - 使用 IBRS 来保护内核和 userland
- retpoline,ibrs_user - 使用 retpolines 替换间接分支,使用 IBRS 来保护 userland
-
on - 无条件启用,意味着
不指定这个选项等同于 spectre_v2=auto
。