第 3 章 对外部内核参数的重要更改
本章为系统管理员提供了 Red Hat Enterprise Linux 8.1 随附的内核有显著变化的总结。这些更改包括添加或更新的 proc
条目、sys
ctl 和 sysfs
默认值、引导参数、内核配置选项或任何可见的行为更改。
新内核参数
- perf_v4_pmi = [X86,INTEL]
这个参数禁用 Intel PMU 计数器冻结功能。
该功能仅从 Arch Perfmon v4(Skylake 和更新版本)开始。
格式: <bool>
- hv_nopvspin [X86,HYPER_V]
- 此参数禁用半虚拟跳锁优化,允许管理程序在锁定争用时"隔离"客户机。
- ipcmni_extend [KNL]
- 此参数将唯一 System V IPC 标识符的最大数量从 32,768 扩展至 16,777,216。
- kpti = [ARM64]
这个参数控制用户和内核地址空格的页表隔离。
这些选项是:
-
默认
:在需要缓解的内核上启用。 -
0
:强制禁用 -
1
:强制启用
-
- mds = [X86,INTEL]
此参数控制 Micro-architectural Data Sampling(MDS)漏洞的缓解方案。
某些 CPU 容易遭受 CPU 内部缓冲区的攻击,在某些情况下可将信息转发到泄漏小工具。在存在安全漏洞的处理器中,缓存侧频道攻击可以利用预测的数据转发,访问到应该无法直接访问到的数据。
这些选项是:
-
完全
- 在存在安全漏洞的 CPU 上启用 MDS 缓解功能. -
完全,nosmt
- 在存在安全漏洞的 CPU 上启用 MDS 缓解并禁用同步多线程(SMT) off - 不
满足于禁用 MDS 缓解措施。不指定这个参数等同于
mds=full
。
-
- mitigations = [X86,PPC,S390,ARM64]
此参数控制 CPU 漏洞的可选缓解方案。这是一组策展的、架构独立的选项,每个选项都是现有的特定架构选项的聚合。
这些选项是:
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]
-
auto
(默认)- 匹配所有 CPU 漏洞,但让 Simultaneous Multi Threading(SMT)保持启用,即使它存在安全漏洞。这个选项适用于 SMT 在内核升级过程中被禁用,或者有其它方法避免基于 SMT 攻击的用户。等同于:
- (默认行为)
auto,nosmt
- 匹配所有 CPU 漏洞,根据需要禁用 Simultaneous Multi Threading(SMT)。这个选项适用于始终希望完全缓解的用户,即使它意味着丢失 SMT。等同于:
-
l1tf=flush,nosmt [X86]
-
mds=full,nosmt [X86]
-
- novmcoredd [KNL,KDUMP]
这个参数禁用设备转储。
设备转储允许驱动程序将转储数据附加到 vmcore,以便您可以收集驱动程序指定的调试信息。驱动程序可以在没有任何限制的情况下附加数据,此数据存储在内存中,因此可能会产生大量内存压力。
禁用设备转储可帮助保存内存,但驱动程序调试数据将不再可用。
这个参数只有在设置了
CONFIG_PROC_VMCORE_DEVICE_DUMP
内核配置时才可用。- nospectre_v1 [X86]
这个参数禁用对 Spectre 变体 1(跳过绑定检查)的缓解方案。
使用这个选项时,系统中可能会出现数据泄漏。
- psi = [KNL]
这个参数启用或禁用压力停滞的信息跟踪。
格式: <bool>
- random.trust_cpu={on,off} [KNL]
-
这个参数启用或禁用信任使用 CPU 的随机数字生成器(如果可用)来完全查看内核的加密随机数字生成器(CRNG)。默认值由
CONFIG_RANDOM_TRUST_CPU
内核配置控制。 - vm_debug[=options] [KNL]
使用
CONFIG_DEBUG_VM=y
提供启用这个参数可能会减慢系统引导速度,特别是在有大量内存的系统中。
所有选项都默认启用,此接口允许有选择地启用或禁用特定的虚拟内存调试功能。
这些选项是:
-
p
- 启用页面结构 init 时间投毒. -
-
(短划线) - 禁用上述所有选项。
-
更新的内核参数
- cgroup_no_v1 = [KNL]
此参数在版本 1(v1)中禁用 cgroup 控制器和命名层次结构。
参数类似于
cgroup_disable
内核参数,但仅适用于 cgroup v1。黑名单控制器在 cgroup2 中仍然可用。"all"选项将所有控制器和"named"选项列入黑名单,禁用命名挂载。指定"all"和"named"可禁用所有 v1 层次结构。格式:{ { controller | "all" | "named" } [,{ controller | "all" | "named" }…] }
- crashkernel = size[KMG][@offset[KMG]][KNL]
kexec
系统调用允许 Linux 在 panic 时切换到 'crash kernel'。此参数保留该内核镜像的物理内存区域 [offset, offset + size]。如果省略@offset
,则会自动选择合适的偏移。[KNL, x86_64] 首先选择 4G 下的区域,并在未指定
@offset
时回退以保留 4G 以上的地区。如需更多信息,请参阅上游 kdump 文档。
- l1tf = [X86]
此参数控制受影响 CPU 上 L1 Terminal Fault(L1TF)漏洞的缓解。
这些选项是:
-
off
- 禁用虚拟机监控程序缓解措施,且不会发出任何警告。它还会在系统管理程序和裸机上丢弃交换大小和可用 RAM 限制限制。 flush
- 是默认值。
-
- nospectre_v2 [X86,PPC_FSL_BOOK3E,ARM64]
此参数禁用 Spectre 变体 2(直接分支预测)漏洞的所有缓解方案。
系统可能会允许使用此参数出现数据泄漏。
- pci=option[,option…] [PCI]
各种 PCI 子系统选项.
这些选项是:
-
force_floating
[S390] - 强制使用浮动中断。 -
nomio
[S390] - 不使用内存输入/输出(MIO)指令。
-
新的 /proc/sys/kernel 参数
- hyperv_record_panic_msg
这个参数控制 panic 内核信息(kmsg)数据是否向 Hyper-V 报告。
值是:
-
0
- 不报告 panic kmsg 数据。 -
1
- 报告 panic kmsg 数据.这是默认的行为。
-
新的 /proc/sys/net 参数
- bpf_jit_limit
此参数对分配给 Berkeley Packet Just-in-Time(BPF JIT)编译器的内存分配实施全局限制,以便在超过非特权 JIT 请求后拒绝它。
bpf_jit_limit
参数包含全局限制的值,以字节为单位。
更新了 /proc/sys/fs 参数
- dentry-state
dentry 是动态分配和取消分配的。
用户可以通过读取
/proc/sys/fs/dentry-state
文件来检索以下值:-
nr_dentry
- 显示分配的目录总数(active + 未使用)。 -
nr_unused
- 显示未使用但当前使用的 Least(LRU)列表中未使用的目录数,以备将来重复使用。 -
age_limit
- 显示年龄(以秒为单位),可在内存短时回收dcache
条目。 -
want_pages
- 当调用shrink_dcache_pages()
函数并且dcache
尚未修剪时,则为非零。 -
nr_negative -
显示未使用的目录数,这些对象也是不映射到任何文件的负目录项。相反,它们有助于加快拒绝用户提供的非现有文件。
-
更新了 /proc/sys/kernel 参数
- msg_next_id, sem_next_id, and shm_next_id
备注:
- 内核不保证新对象具有所需的 ID。它取决于用户空间,以及如何使用"wrong" ID 处理对象。
- 在成功分配进程间通信(IPC)对象分配后,内核将使用非默认值切换回 -1。如果 IPC 对象分配 syscall 失败,如果值未修改或重置为 -1,则该值将被取消定义。