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


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

新内核参数

numa_cma=<node>:nn[MG][,<node>:nn[MG]]

[KNL,CMA]

为连续内存分配设置内核 numa 内存区域的大小。它将为指定的节点保留 CMA 区域。

启用 numa CMA 后,节点 nid 上的 DMA 用户将首先尝试从位于节点 nid 的 numa 区域分配缓冲区,如果分配失败,它们将回退到全局默认内存区域。

reg_file_data_sampling=

[x86]

控制寄存器文件数据采样(RFDS)漏洞的缓解。RFDS 是一个 CPU 漏洞,它可能允许用户空间推断之前存储在浮点寄存器、向量寄存器或整数寄存器中的内核数据值。RFDS 仅影响 Intel Atom 处理器。

值:

  • on :: 打开缓解
  • off :: 关闭缓解

此参数覆盖 CONFIG_MITIGATION_RFDS 默认设定的编译时间。当启用了其他基于 VERW 的缓解(如 MDS)时,缓解无法被禁用。要禁用 RFDS 缓解,所有基于 VERW 的缓解方案需要被禁用。

详情请查看:Documentation/admin-guide/hw-vuln/reg-file-data-sampling.rst

locktorture.acq_writer_lim=

[KNL]

为锁获取设置时间限制(以 jiffies 为单位)。完成后,超出此限制的获取将导致失败。

locktorture.bind_readers=

[KNL]

指定读卡器要绑定到的 CPU 的列表。

locktorture.bind_writers=

[KNL]

指定写卡器要绑定到的 CPU 的列表。

locktorture.call_rcu_chains=

[KNL]

指定要设置的自传播 call_rcu() 链的数量。它们用于确保在任意给定时间都有很高的出现 RCU 宽限期的概率。默认为 0,它会禁用这些 call_rcu() 链。

locktorture.long_hold=

[KNL]

指定偶尔长时间锁定保持时间的持续时间(以毫秒为单位)。默认值为 100 毫秒。选择 0 来禁用。

locktorture.nested_locks=

[KNL]

指定锁定 torture 要进行的最大锁嵌套深度,最多为 8 (MAX_NESTED_LOCKS)。指定 zero 来禁用。请注意,此参数对不支持嵌套获取的锁类型无效。

workqueue.default_affinity_scope=

选择用于未绑定工作队列的默认关联性范围。可以是 "cpu", "smt", "cache", "numa" 和 "system" 之一。默认为 "cache"。如需更多信息,请参阅 Documentation/core-api/workqueue.rst 中的 Affinity Scopes 部分。

这可以在启动后通过写入匹配的 /sys/module/workqueue/parameters 文件来进行更改。带有 "default" 关联性范围的所有工作队列都会被相应地更新。

locktorture.rt_boost=

[KNL]

进行实时锁优先级的定期测试。选择 0 来禁用,1 来仅提升 rt_mutex,2 来无条件提升。默认值为 2,它似乎是一个奇数选择,但因为禁用了抢占功能,其对于非实时启动锁应该无害。请注意,非实时互斥锁禁用提升。

locktorture.writer_fifo=

[KNL]

sched_set_fifo() 实时优先级运行写侧 locktorture kthreads。

locktorture.rt_boost_factor=

[KNL]

执行优先级提升的频率和时长的数字。这根据写卡器的数量而缩减,以便每单元时间的提升数量随着写卡器数量的增加而大致保持不变。但是,每次提升的持续时间都会随着 writer 数而增加。

microcode.force_minrev=

[X86]

格式: <bool>

为运行时微代码加载程序启用或禁用微代码最小修订强制。

module.async_probe=<bool>

[KNL]

当设置为 true 时,模块默认将使用异步探测。要为特定模块启用或禁用异步探测,请使用 <module>.async_probe 下记录的特定于模块的控制。当同时指定了 module.async_probe<module>.async_probe 时,<module>.async_probe 优先于特定的模块。

module.enable_dups_trace

[KNL]

当设置了 CONFIG_MODULE_DEBUG_AUTOLOAD_DUPS 时,这意味着重复的 request_module() 调用将触发 WARN_ON() 而不是 pr_warn()。请注意,如果设置了 MODULE_DEBUG_AUTOLOAD_DUPS_TRACE,则始终将发出 WARN_ON(),这个选项不执行任何操作。

nfs.delay_retrans=

[NFS]

指定 NFSv4 客户端在服务器回复 NFS4ERR_DELAY 后,在返回 EAGAIN 错误之前重试请求的次数。仅在启用了 softerr 挂载选项且指定的值是 >= 0 时应用。

rcutree.do_rcu_barrier=

[KNL]

请求调用 rcu_barrier()。这是受到限制的,因此可以安全地对 sysfs 变量执行用户空间测试(如果他们选择的话)。如果在 RCU grace-period machinery 完全激活之前被触发了,则会出现 EAGAIN 错误。

rcuscale.minruntime=

[KNL]

设置最小测试运行时间(以秒为单位)。这不会影响数据收集间隔,而是允许更好地测量诸如 CPU 消耗的事情。

rcuscale.writer_holdoff_jiffies=

[KNL]

宽限期之间额外的写入端延迟,但以 jiffies 为单位。默认值零表示没有延迟。

rcupdate.rcu_cpu_stall_notifiers=

[KNL]

提供 RCU CPU 停滞通知程序,但在 RCU_CPU_STALL_NOTIFIER Kconfig 选项的帮助文本中看到警告。TL;DR :您几乎肯定不需要 rcupdate.rcu_cpu_stall_notifiers。

rcupdate.rcu_task_lazy_lim=

[KNL]

指定 CPU 上的回调次数,将取消该 CPU 上的惰性。使用 -1 禁用惰性的取消,但要注意这样做会因为回调泛滥而增加 OOM 的危险。

rcupdate.rcu_tasks_lazy_ms= ++

[KNL]

call_rcu_tasks() 的 RCU 任务异步批处理设置超时(以毫秒为单位)。负值将采用默认值。零值将禁用批处理。对于 synchronize_rcu_tasks(),始终禁用批处理。

rcupdate.rcu_tasks_rude_lazy_ms=

[KNL]

call_rcu_tasks_rude () 的 RCU 任务 Rude 异步回调批处理设置超时(以毫秒为单位)。负值将采用默认值。零值将禁用批处理。对于 synchronize_rcu_tasks_rude(),始终禁用批处理。

rcupdate.rcu_tasks_trace_lazy_ms=

[KNL]

对 call_rcu_tasks_trace()的 RCU 任务跟踪异步回调批处理设置超时(以毫秒为单位)。负值将采用默认值。零值将禁用批处理。对于 synchronize_rcu_tasks_trace (),始终禁用批处理。

spectre_bhi=

[X86]

控制 Branch History Injection (BHI)(BHI)漏洞的缓解。此设置会影响 HW BHI 控制和 SW BHB 清除顺序的部署。

值:

on
(默认)根据需要启用 HW 或 SW 缓解。
off
禁用缓解。

unwind_debug

[X86-64]

启用 unwinder 调试输出。这可用于调试某些展开器错误情况,包括损坏的堆栈和坏的或缺失的展开器元数据。

workqueue.cpu_intensive_thresh_us=

为超过这个阈值运行的每个 cpu 工作项目被自动被视为 CPU 密集型,并从并发管理中排除,以防止它们明显延迟其他每个 cpu 工作项目。默认值为 10000 (10ms)。

如果设置了 CONFIG_WQ_CPU_INTENSIVE_REPORT,内核将报告重复违反此阈值的工作功能。对于使用 WQ_UNBOUND 工作队列,它们可能是好的候选者。

workqueue.cpu_intensive_warning_thresh=<uint> ,如果设置了 CONFIG_WQ_CPU_INTENSIVE_REPORT,内核将报告反复违反 intensive_threshold_us 的工作功能。要防止假的警告,只有在工作函数违反了这个阈值多次数后才开始打印。

默认值为 4 次。0 禁用警告。

workqueue.default_affinity_scope=

选择用于未绑定工作队列的默认关联性范围。可以是 "cpu", "smt", "cache", "numa" 和 "system" 之一。默认为 "cache"。如需更多信息,请参阅 Documentation/core-api/workqueue.rst 中的 Affinity Scopes 部分。

这可以在启动后通过写入匹配的 /sys/module/workqueue/parameters 文件来进行更改。带有 "default" 关联性范围的所有工作队列都会被相应地更新。

xen_msr_safe=

[X86,XEN]

格式: <bool>

选择在作为 Xen PV 客户机运行时,始终使用非错误(安全)MSR 访问功能。默认值由 CONFIG_XEN_PV_MSR_SAFE 控制。

更新的内核参数

clearcpuid=

X[,X...] [X86]

为内核禁用 CPUID 功能 X。请参阅数字 X。

请注意,特定于 Linux 的位不一定比内核选项稳定,但特定于提供商的位应该比内核选项稳定。X 也可以是出现在标志中的字符串:/proc/cpuinfo 中的行,它没有上述不稳定问题。但是,并非所有功能都在 /proc/cpuinfo 中有名称。请注意,使用这个选项会玷污内核。

另请注意,直接调用 CPUID 或使用该功能而无需检查任何内容的用户程序仍会看到它。这只是防止它被内核使用,或者在 /proc/cpuinfo 中显示。另外请注意,如果您禁用了一些关键位,内核可能会出现故障。

cma_pernuma=nn[MG]

[KNL,CMA]

设置用于连续内存分配的每个内存区域的内核的大小。值 0 完全禁用每个 numa CMA。并且未指定这个选项,则默认值为 0 。启用每个numa CMA 后,节点 nid 上的 DMA 用户首先尝试从节点 nid 中的 pernuma 区域分配缓冲区,如果分配失败,它们将回退到全局默认内存区域。

csdlock_debug=

[KNL]

启用跨 CPU 功能调用处理的调试附加组件。当打开时,如果检测到 CPU 挂起,会将额外的调试数据打印到控制台,并且再次 ping CPU 以尝试解决挂起的情况。这个选项的默认值取决于 CSD_LOCK_WAIT_DEBUG_DEFAULT Kconfig 选项。

<module>.async_probe[=<bool>]

[KNL]

如果没有指定 <bool> 值,或者指定的值不是有效的 <bool>,请对此模块启用异步探测。否则,按照 <bool> 值的指示,对此模块启用或禁用异步探测。另请参阅:module.async_probe

earlycon=

[KNL]

输出早期控制台设备和选项。

当与无选项一起使用时,早期控制台是由设备树选择的节点中的 stdout-path 属性或 ACPI SPCR (如果平台支持)决定的。

cdns,<addr>[,options] 在指定地址的 Cadence (xuartps)串行端口上启动一个早期的、轮询模式的控制台。唯一支持的选项是波特率。如果没有指定波特率,则必须已设置和配置了串行端口。

uart[8250],io,<addr>[,options[,uartclk]]uart[8250],mmio,<addr>[,options[,uartclk]]uart[8250],mmio32,<addr>[,options[,uartclk]]uart[8250],mmio32be,<addr>[,options[,uartclk]]uart[8250],0x<addr>[,options]

在位于指定的 I/O 端口或 MMIO 地址的 8250/16550 UART 上启动一个早期的、轮询模式的控制台。MMIO 寄存器间地址步幅是 8 位(mmio)或 32 位(mmio32 或 mmio32be)。如果没有 [io|mmio|mmio32|mmio32be], 假设 <addr> 等同于 'mmio'。'options' 的指定格式与 "console=ttyS<n>" 描述的格式相同;如果未指定,h/w 不会被初始化。"uartclk' 是 uart 时钟频率;如果未指定,它被设置为 'BASE_BAUD' * 16。

earlyprintk=

[X86,SH,ARM,M68k,S390]

earlyprintk=vga earlyprintk=sclp earlyprintk=xen earlyprintk=serial[,ttySn[,baudrate]] earlyprintk=serial[,0x…​[,baudrate]] earlyprintk=ttySn[,baudrate] earlyprintk=dbgp[debugController#] earlyprintk=pciserial[,force],bus:device.function[,baudrate] earlyprintk=xdbc[xhciController#]

当内核在正常的控制台被初始化前崩溃时,earprintk 很有用。默认情况下不会启用它,因为它有一些外观问题。

当实际控制台接管时,附加",keep"来不禁用它。

一次只能使用 vga、efi、serial 或 USB 调试端口之一。

目前,只能按照名称指定 ttyS0 和 ttyS1。通过将 ttySn 替换为 I/O 端口地址(如 earlyprintk=serial,0x1008,115200)来在某些架构 (至少 x86 和 arm )上明确指定其他 I/O 端口,您可以在 /proc/tty/driver/serial: 2: uart:ST16650V2 port:00001008 irq:18 中找到给定设备的端口。

与标准串行驱动程序的交互并不好。

VGA 和 EFI 输出最终被实际的控制台覆盖。

xen 选项只能在 Xen 域中使用。

sclp 输出只能在 s390 上使用。

可选的 "force" 到 "pciserial" 允许使用 PCI 设备,即使其类代码不是 UART 类。

iommu.strict=

[ARM64, X86, S390]

配置 TLB 无效行为。

格式:{ "0" | "1" }

0 - lazy 模式
请求 DMA 取消映射操作使用硬件 TLB 的延迟无效,以减少设备隔离为代价来提高吞吐量。如果相关 IOMMU 驱动程序不支持,将回退到 strict 模式。
1 - Strict 模式
DMA 取消映射操作会同步使 IOMMU 硬件 TLB 无效。
unset
使用 CONFIG_IOMMU_DEFAULT_DMA_{LAZY,STRICT} 的值。
注意

在 x86 上,通过传统的特定于驱动程序的一个选项指定的 strict 模式具有优先权。

mem_encrypt=

[x86_64]

AMD 安全内存加密(SME)控制。

有效参数:on、off

默认:off

mem_encrypt=on: Activate SME mem_encrypt=off: 不要激活 SME

mitigations=

[X86,PPC,S390,ARM64]

控制可选的 CPU 漏洞的缓解。这是一组策展的、架构独立的选项,每个选项都是现有的特定架构选项的聚合。

值: off

禁用所有可选的 CPU 缓解。这提高了系统性能,但可能将用户暴露给几个 CPU 漏洞。等同于:如果 nokaslr,则 kpti=0 [ARM64] gather_data_sampling=off [X86] kvm.nx_huge_pages=off [X86] l1tf=off [X86] mds=off [X86] mmio_stale_data=off [X86] no_entry_flush [PPC] no_uaccess_flush [PPC] nobp=0 [S390] nopti [X86,PPC] nospectre_bhb [ARM64] nospectre_v1 [X86,PPC] nospectre_v2 [X86,PPC,S390,ARM64] reg_file_data_sampling=off [X86] retbleed=off [X86] spec_rstack_overflow=off [X86] spec_store_bypass_disable=off [X86,PPC] spectre_bhi=off [X86] spectre_v2_user=off [X86] srbds=off [X86,INTEL] ssbd=force-off [ARM64] tsx_async_abort=off [X86]

nosmap

[PPC]

禁用 SMAP (Supervisor Mode Access Prevention),即使处理器支持它。

nosmep

[PPC64s]

禁用 SMEP (Supervisor Mode Execution Prevention),即使处理器支持它。

nox2apic

[x86_64,APIC]

不要启用 x2APIC 模式。

注意

这个参数将在 IA32_XAPIC_DISABLE_STATUS MSR 中设置了 LEGACY_XAPIC_DISABLED 位的系统上被忽略。

panic_print=

发生 panic 时用于打印系统信息的位掩码。用户可以选择以下位的组合:

  • 位 0:打印所有任务信息
  • 位 1:打印系统内存信息
  • 位 2:打印计时器信息
  • 位 3:如果 CONFIG_LOCKDEP 是 on ,则打印锁信息
  • 位 4:打印 ftrace 缓冲区
  • 位 5:打印缓冲区中的所有 printk 消息
  • 位 6:打印所有 CPU 回溯(如果 arch 中有)
重要

这个选项可能会打印 很多 行,因此有在日志中丢失旧消息的风险。谨慎使用这个选项,您可以考虑使用 "log_buf_len" 和此选项设置更大的日志缓冲。

pcie_aspm=

[PCIE]

强制启用或禁用 PCIe 活动状态电源管理。

值:

off
根本不要触碰 ASPM 配置。保持固件所完成的任何配置不变。
force
即使在声称不支持它的设备上也启用 ASPM。
警告

强制打开 ASPM 可能会导致系统锁定。

s390_iommu=

[HW,S390]

设置 s390 IOTLB 刷新模式。

值:

strict
使用严格的清除每个未映射操作将导致 IOTLB 刷新。
default
在重复使用前是惰性刷新,其速度更快。
Deprecated
equivalent to iommu.strict=1.

spectre_v2=

[x86]

控制 Spectre 变体 2(间接分支推测)漏洞的缓解。默认的操作可以防止内核免受用户空间的攻击。

值:

on
无条件启用,意味着 spectre_v2_user=on。
off
无条件禁用,意味着 spectre_v2_user=off。
auto
内核检测您的 CPU 型号是否存在漏洞。

选择 'on' 将会,选择'auto' 可能会在运行时根据 CPU、可用的微码、 CONFIG_MITIGATION_RETPOLINE 配置选项的设置以及构建内核的编译器选择缓解方法。

usbcore.quirks=

[USB]

添加内置 USB 内核 quirk 列表的 quirk 条目列表。列表条目用逗号分开。每个条目的形式为 VendorID:ProductID:Flags。ID 是 4 位十六进制数,标记是一组字母。每个字母都会改变内置的 quirk ; 如果当前被清除,则设置它,如果当前是设置的,则清除它。字母的含义如下:

  • a = USB_QUIRK_STRING_FETCH_255(不能使用 255 字节读获取字符串描述符);
  • b = USB_QUIRK_RESET_RESUME (设备无法正确恢复,因此重置它);
  • c = USB_QUIRK_NO_SET_INTF (设备无法处理 Set-Interface 请求);
  • d = USB_QUIRK_CONFIG_INTF_STRINGS (设备无法处理其配置或接口字符串);
  • e = USB_QUIRK_RESET (设备无法被重置(例如 morph 设备), 不要使用重置);
  • F = USB_QUIRK_HONOR_BNUMINTERFACES (设备有比 bNumInterfaces 计数更多的接口描述,无法处理与这些接口的通信);
  • g = USB_QUIRK_DELAY_INIT (在读设备描述符后,设备在初始化过程中需要暂停);
  • H = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL (对于高速和超高速中断端点,USB 2.0 和 USB 3.0 规范要求以微帧为单位的间隔(1微帧=125微秒)被计算为间隔 = 2 ^(bInterval-1)。具有此怪癖的设备会将其 bInterval 报告为此计算的结果,而不是计算中使用的指数变量);
  • i = USB_QUIRK_DEVICE_QUALIFIER (设备无法处理 device_qualifier 描述符请求);
  • J = USB_QUIRK_IGNORE_REMOTE_WAKEUP (设备产生假唤醒,忽略远程唤醒功能);
  • k = USB_QUIRK_NO_LPM (设备无法处理链路电源管理);
  • l = USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL (设备将其 bInterval 报告为线性帧,而不是 USB 2.0 计算);
  • M = USB_QUIRK_DISCONNECT_SUSPEND (在暂停前需要断开设备,以防止假唤醒);
  • n = USB_QUIRK_DELAY_CTRL_MSG (在每个控制消息后设备需要暂停);
  • o = USB_QUIRK_HUB_SLOW_RESET (在重置其端口后,Hub 需要额外的延迟);
  • P = USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT (将 SET_ADDRESS 请求的超时从 5000 ms 减到 500 ms);

示例:quirks=0781:5580:bk,0a5c:5834:gij

删除的内核参数

  • [BUGS=X86] noclflush:: 不要使用 CLFLUSH 指令。
  • Workqueue.disable_numa
  • [X86] noexec
  • [BUGS=X86-32] nosep:: 禁用 x86 SYSENTER/SYSEXIT 支持。
  • [X86] nordrand:: 禁用 RDRAND 的内核使用。
  • thermal.nocrt

新的 sysctl 参数

oops_limit

当未设置 panic_on_oops 时,内核应在多少个 oopses 后 panic 。把它设置为 0 来禁止检查计数。把它设置为 1 与设置 panic_on_oops=1 的作用一样。默认值为 10000

warn_limit

当未设置 panic_on_warn 时,内核应在多少内核警告后 panic 。把它设置为 0 来禁止检查警告计数。把它设置为 1 与设置 panic_on_warn=1 的作用一样。默认值为 0

kexec_load_limit_panic

这个参数指定了对通过 crash 镜像调用系统调用 kexec_loadkexec_file_load 的次数的限制。它只能使用比当前的值更严格的值进行设置。

值:

-1
对 kexec 的无限调用。这是默认设置。
N
剩余的调用数。

kexec_load_limit_reboot

kexec_load_limit_panic 类似,但用于普通镜像。

numa_balancing_promote_rate_limit_MBps

不同内存类型之间过高的提升或降级吞吐量可能会损害应用程序延迟。您可以使用此参数来对提升吞吐量进行速率限制。每节点的最大提升吞吐量(以 MB/s 为单位)被限制为不超过设置值。

将此参数设置为小于 PMEM 节点写带宽的 1/10。

更新了 sysctl 参数

kexec_load_disabled

一个切换开关,表示系统调用 kexec_loadkexec_file_load 是否被禁用了。这个值默认为 0 (false: kexec kexecload 启用了),但可以被设置为 1 (true: kexec observabilityload 禁用了)。

为 true 后,kexec 将不再被使用,切换开关无法被设置回 false。这允许在禁用 syscall 前加载 kexec 镜像,以允许系统在不更改的情况下设置(并在之后使用)镜像。通常与 'modules_disabled'_ sysctl 一起使用。

panic_print

发生 panic 时用于打印系统信息的位掩码。用户可以选择以下位的组合:

  • 位 0 打印所有任务信息
  • 位 1 打印系统内存信息
  • 位 2 打印计时器信息
  • 如果 CONFIG_LOCKDEP 为 on ,则位 3 打印锁信息
  • 位 4 打印 ftrace 缓冲区
  • 位 5 打印缓冲区中的所有 printk 消息
  • 位 6 打印所有 CPU 回溯追踪(如果在 arch 中可用)

sched_energy_aware

启用或禁用 Energy Aware Scheduling (EAS)。EAS 在其可运行的平台上自动启动(即具有非对称 CPU 拓扑的平台,并且有 Energy Model 可用)。如果您的平台恰好符合 EAS 的要求,但您不想使用它,请将此值更改为 0。在非 EAS 平台上,写操作失败,读不会返回任何内容。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.