5.2. 对外部内核参数的重要更改
本章为系统管理员提供了随 Red Hat Enterprise Linux 8.2 发布的内核的显著变化摘要。这些更改包括添加或更新的 proc
条目、sys
ctl 和 sysfs
默认值、引导参数、内核配置选项或任何可见的行为更改。
5.2.1. 新内核参数
- cpuidle.governor = [CPU_IDLE]
-
要使用的
cpuidle
调控器的名称。 - deferred_probe_timeout = [KNL]
这是用于设置超时(以秒为单位)的调试参数,以便延迟探测放弃等待依赖关系到探测。
只有已选择的特定依赖程序(子系统或驱动程序)才会被忽略。超时为 0,将在
initcalls
结束时超时。此参数还会在重试后在延迟探测列表中转储仍然在延迟探测列表中的设备。- kvm.nx_huge_pages = [KVM]
这个参数控制
X86_BUG_ITLB_MULTIHIT
bug 的软件临时解决方案。这些选项是:
-
force
- 始终部署临时解决方案。 -
off
- 无法部署临时解决方案。 -
auto
(默认)- 根据X86_BUG_ITLB_MULTIHIT
的存在部署临时解决方案。
-
如果为主机启用了软件临时解决方案,则客户机不需要为嵌套的客户机启用它。
- kvm.nx_huge_pages_recovery_ratio = [KVM]
- 此参数控制定期将多少 4KiB 页面配置回大页面。0 可禁用恢复;否则,如果值为 N,基于内核的虚拟机(KVM)将每分钟中断 4KiB 页面的 1/N。默认值为 60。
- page_alloc.shuffle = [KNL]
布尔值标志,以控制页面分配器是否应该随机化其空闲列表。
如果内核检测到它正在具有直接映射内存端缓存的平台上运行,可自动启用随机化。此参数可用于覆盖/禁用该行为。
标志的状态可以从
/sys/module/page_alloc/parameters/shuffle
文件中的sysfs
伪文件系统读取。- panic_print =
发生异常时,位掩码用于打印系统信息.
用户可以选择以下位的组合:
- 位 0:打印所有任务信息
- 位 1:打印系统内存信息
- 第 2 位:打印计时器信息
-
位 3:如果
CONFIG_LOCKDEP
内核配置启用,打印锁定信息 -
位 4:打印
ftrace
缓冲区 -
位 5:
打印缓冲区
中的所有打印信息
- rcutree.sysrq_rcu = [KNL]
-
命令提供一个
sysrq
键,以转储 Tree RCU 的rcu_node
树,并了解为什么新的宽限期尚未启动。 - rcutorture.fwd_progress = [KNL]
- 为支持此概念的 RCU 类型启用 Read-copy update(RCU)grace-period forward-progress 测试。
- rcutorture.fwd_progress_div = [KNL]
- 指定 CPU-stall-warning 期间的比例来进行紧凑的正向测试。
- rcutorture.fwd_progress_holdoff = [KNL]
- 连续的 forward-progress 测试之间等待的秒数。
- rcutorture.fwd_progress_need_resched = [KNL]
-
在紧循环前向进度测试过程中,将
cond_resched()
调用括在need_resched()
的检查中。 - tsx = [X86]
此参数控制支持 TSX 控制的 Intel 处理器中的事务同步扩展(TSX)功能。
这些选项是:
-
on
- 在系统上启用 TSX。虽然所有已知的安全漏洞都有缓解措施,但 TSX 加速了几个与假设相关的 CVE。因此,在启用它时可能会存在未知的安全风险。 -
off
- 在系统上禁用 TSX。此选项仅对不易受 Microarchitectural Data Sampling(MDS)的较新的 CPU 起作用。换句话说,他们有MSR_IA32_ARCH_CAPABILITIES.MDS_NO=1
,并通过 microcode 更新获取新的IA32_TSX_CTRL
模型特定寄存器(MSR)。这个新的 MSR 可以可靠地取消激活 TSX 地功能。 -
auto
- 如果存在X86_BUG_TAA
,则禁用 TSX,否则在系统上启用 TSX。
-
不指定这个参数等同于 tsx=off
。
- tsx_async_abort = [X86,INTEL]
此参数用来控制对 TSX Async Abort(TAA)漏洞的缓解方案。
与 MDS(Micro-architectural Data Sampling)类似,某些支持 TSX(Transactional Synchronization Extensions)的 CPU 可能会受到 CPU 内部缓冲区的攻击。该漏洞在某些情况下可将信息转发给泄漏小工具。
在存在安全漏洞的处理器中,缓存侧频道攻击可以利用预测的数据转发,访问到应该无法直接访问到的数据。
这些选项是:
-
Complete
- 如果启用了 TSX,则对存在安全漏洞的 CPU 启用 TAA 缓解方案。 -
完全,nosmt
- 在存在安全漏洞的 CPU 上启用 TAA 缓解并禁用同步多线程(SMT)如果已禁用了 TSX,则不会禁用 SMT,因为 CPU 不会受到跨线程 TAA 攻击。 off - 不
条件禁用 TAA 缓解方案。在 MDS 受影响的机器上,可以通过活跃的 MDS 缓解来防止
tsx_async_abort=off
参数,因为这两个漏洞都使用相同的机制缓解。因此,要禁用这个缓解方案,还需要指定sds=off
参数。不指定这个选项等同于
tsx_async_abort=full
。对于受 MDS 影响并实施了 MDS 缓解方案的 CPU 中,则不需要使用 TAA 缓解方案,它并不会提供任何额外的缓解。
-
5.2.2. 更新的内核参数
- intel_iommu = [DMAR]
Intel IOMMU 驱动程序 Direct Memory Access Remapping(DMAR)。
这些选项是:
-
sm_on
[Default Off] - 默认情况下,可扩展模式将被禁用,即使硬件公告其支持可扩展模式转换。设定此选项后,可扩展模式将用于声明要支持它的硬件。
-
- isolcpus = [KNL,SMP,ISOL]
此参数将给定的 CPU 集与干扰隔离。
managed_irq
- 子参数,可防止隔离的 CPU 被托管中断作为目标,其具有包含隔离 CPU 的中断掩码。管理的中断的关联性由内核处理,不能通过/proc/irq/*
接口更改。这种隔离是尽力的,只有在设备队列自动分配的中断掩码包含隔离和内务处理 CPU 时才有效。如果内务处理 CPU 在线,则此类中断会被定向到内务处理 CPU,这样在日常维护 CPU 上提交的 I/O 就不会干扰隔离的 CPU。
如果队列的关联性掩码仅包含隔离的 CPU,则此参数不会影响中断路由决策。但是,只有在这些隔离 CPU 上运行的任务提交 I/O 时,才会交付中断。在内务处理 CPU 上提交的 I/O 对这些队列没有影响。
- mds = [X86,INTEL]
对选项的更改:
-
off
- TSX Async Abort(TAA)受影响的机器,mds=off
可以被活跃的 TAA 缓解措施阻止,因为这两个漏洞都可以使用相同的机制缓解。因此,要禁用这个缓解方案,您需要同时指定tsx_async_abort=off
内核参数。
-
不指定这个参数等同于 mds=full
。
- mem_encrypt = [X86-64]
AMD 安全内存加密(SME)控制
…
- 缓解方案 =
对选项的更改:
off
- 禁用所有可选 CPU 缓解方案。这会提高系统性能,但可能会使用户暴露一些 CPU 漏洞。等同于:
-
nopti [X86,PPC]
-
kpti=0 [ARM64]
-
nospectre_v1 [X86,PPC]
-
nobp=0 [S390]
-
nospectre_v2 [X86,PPC,S390,ARM64]
-
spectre_v2_user=off [X86]
-
spec_store_bypass_disable=off [X86,PPC]
-
ssbd=force-off [ARM64]
-
l1tf=off [X86]
-
mds=off [X86]
-
tsx_async_abort=off [X86]
kvm.nx_huge_pages=off [X86]
例外:
当
kvm.nx_huge_pages
=force 时,这不会影响 kvm.nx_huge_pages
。
-
auto,nosmt
- 匹配所有 CPU 漏洞,根据需要禁用 Simultaneous Multi Threading(SMT)。这个选项适用于始终希望完全缓解的用户,即使它意味着丢失 SMT。等同于:
-
l1tf=flush,nosmt [X86]
-
mds=full,nosmt [X86]
-
tsx_async_abort=full,nosmt [X86]
-
- rcutree.jiffies_till_sched_qs = [KNL]
此参数在读取-复制更新(RCU)开始从
rcu_note_context_switch()
和cond_resched()
函数请求静默状态帮助之前给所需的年龄设置宽限期(以jiffies为单位)。如果没有指定,内核将根据rcutree.jiffies_till_first_fqs
和rcutree.jiffies_next_fqs
内核参数的最新设置计算值。此计算的值可以在
rcutree.jiffies_to_sched_qs
内核参数中查看。设置rcutree.jiffies_to_sched_qs
的任何尝试都将被覆盖。- tsc =
此参数禁用时间戳计数器(TSC)的时钟源稳定性检查。
格式:<string>
这些选项是:
-
可靠
[x86] - 将 TSC 时钟源标记为可靠。这个选项禁用运行时时钟源验证,以及在引导时执行的稳定性检查。选项还可在较旧的硬件和虚拟环境中启用高分辨率计时器模式。 -
noirqtime
[x86] - 不要使用 TSC 进行中断请求(IRQ)记帐。用于在 Read Time-Stamp counter(RDTSC)的平台上禁用IRQ_TIME_ACCOUNTING
,此记帐可能会增加开销。 -
不稳定
[x86] - 将 TSC 时钟源标记为不稳定。这个选项在启动时标记 TSC 无条件不稳定,并避免在 TSC watchdog 通知后再出现问题。 -
nowatchdog
[x86] - 禁用时钟源监控.该选项用于具有严格延迟要求的情况,其中不接受来自时钟源监视器的中断。
-
5.2.3. 新的 /proc/sys/kernel 参数
- panic_print
发生异常时,位掩码用于打印系统信息.
用户可以选择以下位的组合:
- 位 0:打印所有任务信息
- 位 1:打印系统内存信息
- 第 2 位:打印计时器信息
-
位 3:如果
CONFIG_LOCKDEP
内核配置项目正在运行,打印锁定信息 位 4:打印
ftrace
缓冲区例如,要打印 panic 上的任务和内存信息,请执行:
# echo 3 > /proc/sys/kernel/panic_print
5.2.4. 更新了 /proc/sys/kernel 参数
- threads-max
这个参数控制
fork()
函数可以创建的线程的最大数量。在初始化过程中,内核会设置这个值,即使创建了最大线程数,线程结构只占据可用 RAM 页面的部分(1/8th)。
可写入
threads-max
的最小值为 1。最大值由常量FUTEX_TID_MASK(0x3fffff)提供
。如果此范围以外的值写入到 threads
-max
,则会出现错误EINVAL
。
5.2.5. 更新了 /proc/sys/net 参数
- bpf_jit_enable
此参数启用 Berkeley Packet 过滤器 Just-in-time(BPF JIT)编译器。
BPF 是一个灵活而高效的基础架构,允许在不同 hook 点执行字节码。它用于多个 Linux 内核子系统,如网络(如
XDP
、tc
)、追踪(如kprobes
、uprobes、
追踪点
)和安全性(如seccomp
)。LLVM 具有 aBPF 后端,可将受限 C 编译到一系列BPF 指令中。在程序通过
bpf()
系统调用并在内核中传递验证器后,JIT 会将这些 BPF 程序转换为原生 CPU 指令。JIT 有两种类型,以下 CPU 架构中目前支持较新的 eBPF JIT :
-
x86_64
-
arm64
-
ppc64
(小端和大端) -
s390x
-