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

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

新内核参数

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_cpustall_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_singleweight_many

scftorture.weight_all = [KNL]

这个参数指定了用于具有零"wait"参数的 smp_call_function_all() 函数的可能性权重。

如需更多信息,请参阅 weight_singleweight_many

scftorture.weight_all_wait = [KNL]

这个参数指定了用于带有非零 "wait" 参数的 smp_call_function_all() 函数的可能性权重。

如需更多信息,请参阅 weight_singleweight_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 异常在内核中或固件中发生(例如,不是在用户模式下执行时发生),则内核将在 warnfatal 模式下出错。

    只有在 CPL > 0 时才会触发总线锁的 #DB 异常。

usb-storage.quirks =
k = NO_SAME(请勿使用 WRITE_SAME,仅限 UAS)