第 5 章 对外部内核参数的重要更改
本章为系统管理员提供了与 Red Hat Enterprise Linux 8.5 一起发布的内核中显著变化的总结。这些更改包括添加或更新的 proc
条目、sysctl
和 sysfs
默认值、引导参数、内核配置选项或者任何可见的行为更改。
新内核参数
- idxd.sva = [HW]
格式: <bool>
使用这个参数,您可以强制禁用对
idxd
内核模块的共享虚拟内存(SVA)的支持。默认值为
true
(1
)。- lsm.debug = [SECURITY]
- 使用这个参数,您可以启用 Linux 安全模块(LSM)初始化调试输出。
- lm = lsm1,…,lsmN [SECURITY]
使用这个参数,您可以选择 Linux 安全模块(LSM)初始化的顺序。
此参数覆盖
CONFIG_LSM
选项和security=
参数。- rcutree.qovld = [KNL]
使用这个参数,您可以设置排队的 Read-copy-update(RCU)回调的阈值。除这个阈值外,RCU 的 force-quiescent-state 扫描将积极争取
cond_resched()
系统调用的帮助,并调度 IPI,以帮助 CPU 更快地到达静默状态。您可以将此参数设置为小于零的值,以便在引导时根据
rcutree.qhimark
参数设置此参数。或者,将此参数设置为零,以禁用更积极的帮助加入。- rcutree.rcu_unlock_delay = [KNL]
使用这个参数,您可以在将配置布尔值设为
CONFIG_RCU_STRICT_GRACE_PERIOD=y
的内核中指定rcu_read_unlock()
-time delay。默认值为 0。
更大的延迟增加了捕获 Read-copy-update(RCU)指针泄漏的可能性。这是相关的
rcu_read_unlock()
完成后使用 RCU 保护的指针的缺陷。- rcutorture.irqreader = [KNL]
- 使用这个参数,您可以从中断请求(IRQ)处理程序或计时器处理程序运行 Read-copy-update(RCU)读取器。
- rcutorture.leakpointer = [KNL]
-
使用这个参数,您可以载读取器之外泄露 Read-copy-update(RCU)保护的指针。这可能会导致 splats,并旨在测试
CONFIG_RCU_STRICT_GRACE_PERIOD=y
等配置的能力来检测此类泄漏。 - rcutorture.read_exit = [KNL]
- 使用这个参数,您可以设置 read-then-exit kthreads 的数量,以测试 Read-copy-update(RCU)更新器和 task-exit 处理之间的交互。
- rcutorture.read_exit_burst = [KNL]
- 使用这个参数,您可以在给定的 read-then-exit 情况下指定生成一组 read-then-exit kthreads 的次数。
- rcutorture.read_exit_delay = [KNL]
- 使用这个参数,您可以指定连续的 read-then-exit 测情况之间的延迟(以秒为单位)。
- rcutorture.stall_cpu_block = [KNL]
- 使用这个参数,您可以在停滞时设置睡眠状态。因此,除了其它与停滞相关的活动外,还会出现来自抢占的 Read-copy-update(RCU)的警告。
- rcutorture.stall_gp_kthread = [KNL]
使用这个参数,您可以指定 Read-copy-update(RCU)gate-period kthread 中的强制睡眠的持续时间(以秒为单位),来测试 RCU CPU 停滞警告。
将此参数设为零来禁用此功能。
如果同时指定了
stall_cpu
和stall_gp_kthread
参数,则 kthread 首先会耗尽,然后是 CPU。- rcupdate.rcu_cpu_stall_suppress_at_boot = [KNL]
-
使用这个参数,您可以压制 RCU CPU 停滞警告信息,以及早期引导过程中发生的 rcutorture writer 停滞警告。这是载
init
任务之前的期间内生成的。 - rcupdate.rcu_task_ipi_delay = [KNL]
使用这个参数,您可以在哪一个 Read-copy-update(RCU)任务避免发送 IPI 期间设置的瞬间时间,从给定宽限期的开头开始。
设置大量数字可避免干扰实时工作负载,但会延长宽限期。
- refscale.holdoff = [KNL]
- 使用这个参数,您可以设置测试启动暂停时间。此参数的目的是将测试的启动延迟到引导完成,以避免干扰。
- refscale.loops = [KNL]
使用这个参数,您可以设置测试下同步原语的循环数量。增加这个数量可减少由于循环启动/结束开销产生的噪音。
在 2020 年 x86 笔记本电脑上,默认值已将每次传递的噪声降低到几皮秒。
- refscale.nreaders = [KNL]
使用这个参数,您可以设置读取器的数量。
默认值 -1 选择 N,其中 N 是大约 CPU 数量的 75%。
- refscale.nruns = [KNL]
- 通过这个参数,您可以设置运行的次数,每次运行都会转储到控制台日志中。
- refscale.readdelay = [KNL]
- 使用这个参数,您可以设置读取端关键部分持续时间,以微秒为单位。
- refscale.scale_type = [KNL]
- 使用这个参数,您可以指定要测试的读保护实现。
- refscale.shutdown = [KNL]
通过这个参数,您可以在性能测试结束时关闭系统。
默认值为 1,它会关闭系统 - refscale 构建到内核中。
值 0 并使系统保持运行 - refscale 作为模块构建。
- refscale.verbose = [KNL]
-
使用这个参数,您可以启用额外的
printk()
语句。 - scftorture.holdoff = [KNL]
使用这个参数,您可以指定开始测试前要等待的秒数。
对于模块插入,参数默认为零,对于内置
smp_call_function()
测试,参数默认为 10 秒。- scftorture.longwait = [KNL]
使用这个参数,您可以请求非常长的等待,这些等待会随机选择,最高为所选的限制(以秒为单位)。
默认值为零,它禁用了此功能。
请注意,即使请求很小的非零秒数也可能导致 Read-copy-update(RCU)CPU 停滞警告,以及软锁定投诉等。
- scftorture.nthreads = [KNL]
使用这个参数,您可以指定要生成的 kthreads 数来调用
smp_call_function()
函数系列。默认值 -1 指定等于 CPU 数的 kthreads 数。
- scftorture.onoff_holdoff = [KNL]
- 使用这个参数,您可以指定在启动 CPU 热插拔操作前测试开始后等待的秒数。
- scftorture.onoff_interval = [KNL]
使用这个参数,您可以指定连续的 CPU 热插拔操作之间等待的秒数。
默认值为零,它禁用了 CPU 热插拔操作。
- scftorture.shutdown_secs = [KNL]
使用这个参数,您可以指定测试开始后的秒数。测试后,系统关闭。
如果默认值为零,您可以避免关闭系统。非零值对自动测试很有用。
- scftorture.stat_interval = [KNL]
使用这个参数,您可以指定将当前测试统计信息输出到控制台之间的秒数。
值为零可禁用统计输出。
- scftorture.stutter_cpus = [KNL]
- 使用这个参数,您可以指定对测试中的每次修改 CPU 集合之间等待的 jiffies 数。
- scftorture.use_cpus_read_lock = [KNL]
-
使用这个参数,您可以使用
use_cpus_read_lock()
系统调用,而不是默认的preempt_disable()
系统调用来在调用其中一个smp_call_function*()
函数时禁用 CPU 热插拔。 - scftorture.verbose = [KNL]
-
使用这个参数,您可以启用额外的
printk()
语句。 - scftorture.weight_single = [KNL]
这个参数指定了用于具有零"wait"参数的
smp_call_function_single()
函数的可能性权重。如果所有其他权重均为 -1,则值 -1 为选择默认值。但是,如果至少一个权重具有其他值,则值为 -1 时选择 0 权重。
- scftorture.weight_single_wait = [KNL]
-
这个参数指定了用于具有非零"wait"参数的
smp_call_function_single()
函数的可能性权重。如需更多信息,请参阅weight_single
。 - scftorture.weight_many = [KNL]
这个参数指定了用于具有零"wait"参数的
smp_call_function_many()
函数的可能性权重。请注意,为这个权重设置高可能性可能会给系统带来严重的进程间中断(IPI)负载。
如需更多信息,请参阅
weight_single
。- scftorture.weight_many_wait = [KNL]
这个参数指定了用于带有非零 "wait" 参数的
smp_call_function_many()
函数的可能性权重。如需更多信息,请参阅
weight_single
和weight_many
。- scftorture.weight_all = [KNL]
这个参数指定了用于具有零"wait"参数的
smp_call_function_all()
函数的可能性权重。如需更多信息,请参阅
weight_single
和weight_many
。- scftorture.weight_all_wait = [KNL]
这个参数指定了用于带有非零 "wait" 参数的
smp_call_function_all()
函数的可能性权重。如需更多信息,请参阅
weight_single
和weight_many
。- sched_energy_aware
这个参数启用或禁用 能量感知调度(EAS)。
EAS 在具有非对称 CPU 技术的平台上自动启动,该平台提供能量模型。
如果您的平台满足 EAS 的要求,但您不想使用它,请将此值改为 0。
- torture.disable_onoff_at_boot = [KNL]
-
使用这个参数,您可以防止 CPU 热插拔组件在
init
任务生成前的苦恼。 - torture.ftrace_dump_at_shutdown = [KNL]
通过这个参数,您可以在 torture 测试关闭时转储
ftrace
缓冲区,即使没有错误也是如此。当许多 torture 测试同时运行时,这可能是一种非常昂贵的操作,特别是在具有旋转规则存储的系统上。
更新的内核参数
- iommu.forcedac = [ARM64, X86]
使用这个参数,您可以控制 PCI 设备的输入输出虚拟地址(IOVA)分配。
格式:{ 0 | 1 }
-
0
- 如果需要回退到完整范围前,首先尝试分配 32 位直接内存访问(DMA)地址。 -
1
- 从所有可用范围直接分配。选项强制为支持大于 32 位寻址的 PCI 卡强制双地址周期。
-
- page_poison = [KNL]
通过这个引导时参数,您可以更改 buddy 分配器上的 poisoning 状态,其可通过
CONFIG_PAGE_POISONING=y
获得。-
off
:关闭 poisoning(默认) -
开启
:打开 poisoning
-
- rcuscale.gp_async = [KNL]
-
通过这个参数,您可以测量异步宽限期原语的性能,如
call_rcu()
。 - rcuscale.gp_async_max = [KNL]
-
使用这个参数,您可以指定每个写卡器线程未完成回调的最大数。当写卡器线程超过这个限制时,它会调用相应的
rcu_barrier()
类别,以允许之前发布的回调排空。 - rcuscale.gp_exp = [KNL]
- 通过此参数,您可以测量加速同步宽限期原语的性能。
- rcuscale.holdoff = [KNL]
- 使用这个参数,您可以设置测试启动暂停时间。此参数的目的是将测试的启动延迟到引导完成,以避免干扰。
- rcuscale.kfree_rcu_test = [KNL]
-
通过这个参数,您可以测量
kfree_rcu()
洪灾的性能。 - rcuscale.kfree_nthreads = [KNL]
-
使用这个参数,您可以指定运行
kfree_rcu()
函数循环的线程数。 - rcuscale.kfree_alloc_num = [KNL]
- 使用这个参数,您可以指定迭代中分配和释放的数量。
- rcuscale.kfree_loops = [KNL]
-
使用这个参数,您可以指定执行
rcuscale.kfree_alloc_num
分配和释放的循环数。 - rcuscale.nreaders = [KNL]
使用这个参数,您可以设置 Read-copy-update(RCU)读卡器的数量。
值 -1 选择 N,其中 N 是 CPU 数。
- rcuscale.nwriters = [KNL]
使用这个参数,您可以设置 Read-copy-update(RCU)写卡器的数量。
值的工作方式与
rcuscale.nreaders=N
相同,其中 N 是 CPU 数。- rcuscale.perf_type = [KNL]
- 使用这个参数,您可以指定要测试的 Read-copy-update(RCU)实现。
- rcuscale.shutdown = [KNL]
- 使用这个参数,您可以在性能测试完成后关闭系统。这对于不用干涉的自动化测试非常有用。
- rcuscale.verbose = [KNL]
-
使用这个参数,您可以启用额外的
printk()
语句。 - rcuscale.writer_holdoff = [KNL]
使用这个参数,您可以在以微秒为单位的宽限期间进行写端暂停操作。
默认值为零,表示"无暂停"。
- security = [SECURITY]
使用这个参数,您可以选择要在启动时启用的一个传统的"major"安全模块。
这已被
lsm
参数代替。- split_lock_detect = [X86]
使用这个参数,您可以启用分割锁检测或总线锁检测。
启用后,如果存在硬件支持,则将导致跨缓存线访问数据的原子指令:
- 分割锁检测的对齐检查异常
总线锁检测的调试异常
可能的值:
-
off
- 功能不启用 -
warn
- 内核发送有关应用程序的速率限制警告,并触发 #AC 异常或 #DB 异常。这个模式对于支持分割锁检测或总线锁检测的 CPU 是默认模式。如果在硬件中启用了两个功能,则默认行为是 #AC。 -
fatal
- 内核向触发 #AC 异常或 #DB 异常的应用程序发送SIGBUS
信号。如果在硬件中启用了两个功能,则默认行为是 #AC。 ratelimit:N
- 为总线锁检测将系统宽速率限制设置为每秒 N 总线锁(0 < N › 1000)。N/A 用于分割锁检测。如果 #AC 异常在内核中或固件中发生(例如,不是在用户模式下执行时发生),则内核将在
warn
或fatal
模式下出错。只有在 CPL > 0 时才会触发总线锁的 #DB 异常。
- usb-storage.quirks =
-
k = NO_SAME(请勿使用
WRITE_SAME
,仅限 UAS)