第 4 章 对外部内核参数的重要更改
本章为系统管理员提供了与 Red Hat Enterprise Linux 9.6 一起发布的内核有显著变化的总结。这些更改可能包括,例如,添加或更新的 proc
条目、sysctl
和 sysfs
默认值、引导参数、内核配置选项或任何明显的行为更改。
新内核参数
arm64.no32bit_el0=
[ARM64]
无条件禁用 32 位应用程序的执行。
con3215_drop=
[S390]
格式: y|n|Y|N|1|0
当设置为 true 时,当控制台缓冲区满时,在 3215 控制台上丢弃数据。在这种情况下,使用 3270 终端模拟器(如 x3270)的运算符不需要提前输入控制台输出的清晰密钥,以及要继续内核。当 3270 终端模拟器处于活跃状态时,这会更快地引导时间。如果没有使用 3270 终端模拟器,则此参数无效。
stress_hpt=
[PPC]
限制哈希页表中的内核 HPT 条目数量,以增加内核地址上的哈希页表错误的速度。
kvm.enable_virt_at_load=
[KVM,ARM64,LOONGARCH,MIPS,RISCV,X86]
如果启用,KVM 会在 KVM 加载时启用虚拟化,并在 KVM 卸载时禁用虚拟化(如果将 KVM 作为模块构建)。
如果禁用,KVM 会在创建和销毁虚拟机时动态启用和禁用虚拟化,例如,在 0 swig1 和 1 choosing0 转换虚拟机的数量。
在模块环境中启用虚拟化可避免创建 03271 虚拟机的潜在延迟,因为 KVM 在所有在线 CPU 间实现虚拟化序列化。加载 KVM 时启用虚拟化的"成本",即,这样做可能会干扰使用想要"拥有"虚拟化硬件的树外虚拟机监控程序。
kvm-arm.wfe_trap_policy=
[KVM,ARM]
控制如何为 KVM 虚拟机设置 WFE 指令陷阱。陷阱被 CPU 架构允许但不保证。
trap: 设置 WFE 指令陷阱
notrap: 清除 WFE 指令陷阱
kvm-arm.wfi_trap_policy=
[KVM,ARM]
控制如何为 KVM 虚拟机设置 WFI 指令陷阱。陷阱被 CPU 架构允许但不保证。
trap: set WFI 指令 trap
notrap: 清除 WFI 指令陷阱
config_acs=
格式: <ACS flags>@<pci_dev>[; …]
指定一个或多个 PCI 设备(在上面指定的格式)前(带有标记并用分号分隔)。根据标志中指定的内容,将启用、禁用或更改特定功能。
ACS 标记定义如下:
bit-0
- ACS 源验证
bit-1
- ACS 转换块
bit-2
- ACS P2P 请求重定向
bit-3
- ACS P2P Completion Redirect
bit-4
- ACS 上游转发
bit-5
- ACS P2P Egress 控制
bit-6
- ACS Direct Translated P2P
每个位都可以被标记为:
0
- force disabled
启用 1
强制
X
- unchanged
例如,pci=config_acs=10x 将配置支持 ACS 的所有设备,以启用 P2P 请求重定向、禁用转换块,并将 Source Validation 从任何电源或固件设置为不动。
这可能会在设备间删除隔离,并可能会将更多设备放在 IOMMU 组中。
rcutree.nocb_nobypass_lim_per_jiffy=
[KNL]
在 callback-offloaded (rcu_nocbs) CPU 中,RCU 可减少锁定争用,否则由回调使用 →nocb_bypass 列表导致的。但是,在常见的非暴露的情况中,RCU 队列直接发送到主 →cblist,以避免 →nocb_bypass 列表及其锁定的额外开销。但是,如果在单个 jiffy 中排队了太多回调,RCU 会将回调排队到 →nocb_bypass 队列中。"too many"的定义由这个内核引导参数提供。
rcutree.nohz_full_patience_delay=
[KNL]
在回调卸载(rcu_nocbs) CPU 上,避免干扰 RCU,除非宽限期已达到指定的年龄(以毫秒为单位)。默认值为零。大型值将上限为 5 秒。所有值都将舍入到最接近的值,由 netobserv 代表。
rcutree.rcu_divisor=
[KNL]
将右移数设置为用来计算此 CPU 上排队的回调批处理限制 bl。结果将通过 rcutree.blimit 内核参数的值绑定。每个 bl 回调,softirq 处理程序将退出,以允许 CPU 执行其他工作。
请注意,这个 callback-invocation 批处理限制只适用于非卸载的回调调用。在 rcuoc kthread 的上下文中会调用卸载的回调,调度程序会像执行任何其他任务一样抢占它。
rcutree.enable_rcu_lazy=
[KNL]
为节省电源,批处理 RCU 回调并在延迟后清空,内存压力或回调列表会太大。
rcutree.rcu_normal_wake_from_gp=
[KNL]
减少 synchronize_rcu ()调用的延迟。此方法自行跟踪 synchronize_rcu ()调用者,因此它不会与常规回调交互,因为它不使用 call_rcu[_hurry]()路径。请注意,这是正常的宽限期。
如何启用它:
echo 1 > /sys/module/rcutree/parameters/rcu_normal_wake_from_gp 或传递引导参数 "rcu_normal_wake_from_gp=1"
默认值为 0。
删除的内核参数
clocksource.max_cswd_read_retries=
[KNL]
时钟将标记为不稳定之前因为外部延迟而重试的 clocksource_watchdog () 的数量。默认为两个重试,即三个尝试读取测试下的时钟。
disable_cpu_apicid=
[X86,APIC,SMP]
格式:<int>
在引导时禁用相应 CPU 的初始 APIC ID 数,用于 kdump 2nd 内核禁用 BSP 来唤醒多个 CPU,而不会导致系统重置或挂起,因为将 INIT 从 AP 发送到 BSP。
更改了内核参数
amd_iommu=
[HW,X86_64]
将参数传递给系统中的 AMD IOMMU 驱动程序。
可能的值有:
fullflush
- 弃用,等同于 iommu.strict=1
off
- 不要初始化系统中找到的任何 AMD IOMMU
force_isolation
- 为所有设备强制进行设备隔离。不再允许 IOMMU 驱动程序根据需要解除隔离要求。这个选项不会覆盖 iommu=pt
force_enable
- 在启用了 IOMMU 且已知有 bug 的平台上强制启用 IOMMU。请谨慎使用这个选项。
pgtbl_v1
- 对 DMA-API (默认)使用 v1 页表。
pgtbl_v2
- 对 DMA-API 使用 v2 页表。
irtcachedis
- 禁用中断重新映射表(IRT)缓存。
nohugepages
- 将 v1 page-tables 用于 v1 page-tables 的 page-size 限制为 4 KiB。
v2_pgsizes_only
- 将 v1 page-tables 使用的 page-sizes 限制为 4KiB 或 2Mib 或 1GiB。
debug_guardpage_minorder=
[KNL]
当设置了 CONFIG_DEBUG_PAGEALLOC 时,此参数允许控制将由 buddy 分配器有意保留空闲(从而受到保护)的页面的顺序。较大的值提高了捕获随机内存损坏的可能性,但减少了正常系统使用的内存量。最大可能的值是 MAX_PAGE_ORDER/2。当 CPU 写入(或从)随机内存位置读取时,将此参数设置为 1 或 2 应该足以识别内核或驱动程序代码中出现的大多数随机内存崩溃问题。请注意,存在由 buggy 硬件或固件导致的一系列内存损坏问题,或者由驱动程序错误地编程 DMA (当内存在总线级别上写入时,会绕过 CPU MMU),它们不会被 CONFIG_DEBUG_PAGEALLOC 检测,因此此选项将无法帮助跟踪这些问题。
page_reporting.page_reporting_order=
[KNL]
报告顺序的最小页。
格式:<integer>
调整报告顺序的最小页。当页面报告超过 MAX_PAGE_ORDER 时,它被禁用。
preempt=
[KNL]
如果您有 CONFIG_PREEMPT_DYNAMIC none - Limited to cond_resched ()调用 voluntary - Limited to cond_resched ()和 may_sleep ()调用 full - 任何未明确被抢占禁用的部分都可以被抢占。任务也会获得连续的 spinlocks (如果关键部分没有在锁定本身之外明确禁用)。
sched_thermal_decay_shift=
[deprecated] [KNL, SMP]
为调度程序热压力信号设置 decay shift。Thermal pressure signal 遵循其他调度程序 pelt 的默认 decay 周期。
usb-storage.delay_use=
[UMS]
为逻辑单元扫描新设备前的延迟(默认为 1)。如果值带有 "ms" 的后缀,可选,以毫秒为单位。示例: delay_use=2567ms。
新的 sysctl 参数
skb_defer_max
分配它们的 CPU 会释放每个 CPU 的 per-cpu 列表的最大大小(以 skbs 为单位)。目前供 TCP 堆栈使用。
默认:64
更改了 sysctl 参数
overcommit_memory
这个值包含一个启用内存过量使用的标志。
当此标志为 0 时,内核会将用户空间内存请求大小与总内存加上交换进行比较,并拒绝明显过量使用。
当此标志为 1 时,内核会假定有足够的内存,直到实际耗尽为止。
当此标志为 2 时,内核使用"never overcommit"策略,该策略会尝试防止内存过量使用。请注意,user_reserve_kbytes 会影响此策略。
这个功能可能会很有用,因为存在 malloc ()大量内存"just-in-in-case"的程序,且不使用大部分程序。
默认值为 0。
如需更多信息,请参阅 Documentation/mm/overcommit-accounting.rst 和 mm/util.c::__vm_enough_memory ()。