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

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

新内核参数

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

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