4.9. 内核
RHEL 9.0 中的内核版本
Red Hat Enterprise Linux 9.0 带有内核版本 5.14.0-70。
默认情况下,Red Hat 在所有 RHEL 版本中只为特权用户启用 eBPF
扩展 Berkeley Packet Filter(eBPF)是一个复杂的技术,其允许用户执行 Linux 内核中的自定义代码。由于它的性质,eBPF 代码需要通过验证器和其他安全机制。存在常见的漏洞和暴露(CVE)实例,其中,这个代码中的 bug 可能会被误用于未经授权的操作。为了减少这种风险,红帽默认在所有 RHEL 版本中只为特权用户启用 eBPF。可以使用 kernel.command-line 参数 unprivileged_bpf_disabled=0
为非特权用户启用 eBPF。
但请注意:
-
应用
unprivileged_bpf_disabled=0
可使您的内核失去红帽的支持,并使您的系统面临安全风险。 -
红帽敦促您对待具有
CAP_BPF
功能的进程,就如同该功能等同于CAP_SYS_ADMIN
。 -
设置
unprivileged_bpf_disabled=0
不足以让非特权用户执行许多 BPF 程序,因为大多数 BPF 程序类型的加载需要额外的功能(通常为CAP_SYS_ADMIN
或CAP_PERFMON
)。
有关如何应用内核命令行参数的详情,请参考 配置内核命令行参数。
(BZ#2091643)
红帽只为次版本保护内核符号
红帽保证,在您使用受保护的内核符号编译内核模块时,内核模块将继续在延长更新支持(EUS)版本中的所有更新中载入,。RHEL 9 的次版本之间没有内核应用程序二进制接口(ABI)保证。
RHEL 9 Beta 内核使用受信任的 SecureBoot 证书签名
在以前的版本中,RHEL Beta 版本需要用户使用 Machine Owner Key(MOK)工具注册独立的 Beta 公钥。从 RHEL 9 Beta 版开始,内核与受信任的 SecureBoot 证书签名,因此用户不再需要注册一个单独的 Beta 公钥以便在启用了 UEFI 安全引导的系统上使用 beta 版本。
RHEL 9 中默认启用 cgroup-v2
控制组版本 2(cgroup-v2)
功能实施单一层次结构模型,以简化控制组的管理。此外,它确保一个进程一次只能是一个控制组的成员。与 systemd
的深度集成提高了在 RHEL 系统上配置资源控制时的最终用户体验。
新功能的开发主要针对 cgroup-v2
,其具有 cgroup-v1
缺少的一些功能。类似地,cgroup-v1
还包含 cgroup-v2
中缺少的一些传统功能。此外,控制接口也不同。因此,直接依赖 cgroup-v1
的第三方软件在 cgroup-v2
环境中可能无法正常运行。
要使用 cgroup-v1
,您需要在内核命令行中添加以下参数:
systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller
内核中完全启用了 cgroup-v1
和 cgroup-v2
。从内核的角度来看,没有默认的控制组版本,并且由 systemd
决定在启动时挂载。
可能会影响第三方内核模块的内核更改
Linux 分发自 5.9 之前内核版本,支持导出 GPL 功能,作为非 GPL 功能。因此,用户可以通过 shim
机制将专有功能链接到 GPL 内核功能。在这个版本中,RHEL 内核融合了上游更改,这些更改提高了 RHEL 通过重新调整 shim
来强制实施 GPL 的能力。
合作伙伴和独立软件供应商(ISV)应利用早期版本的 RHEL 9 测试他们的内核模块,以确保其符合 GPL。
64 位 ARM 架构在 RHEL 9 中有 4 KB 页面大小
红帽已经为 Red Hat Enterprise Linux 9 的 64 位 ARM 架构选择了 4 KB 页面大小。这个大小对大多数基于 ARM 的系统的工作负载和内存数量良好。要有效地使用大型页面大小,请使用巨页选项来处理大量内存或带有大型数据集的工作负载。
有关巨页的更多信息,请参阅监控和管理系统状态和性能。
(BZ#1978382)
strace
程序现在可以正确地显示不匹配的 SELinux 上下文
strace
的现有 --secontext
选项已使用 mismatch
参数进行了扩展 。这个参数可让您只打印预期的上下文以及实际不匹配的上下文。输出用双感叹号(!!
)分隔,第一个是实际上下文,然后是预期上下文。在下面的示例中,full,mismatch
参数打印预期的完整上下文以及实际的上下文,因为上下文的用户部分不匹配。但是,在使用单独的 mismatch
时,它只检查上下文的类型部分。预期的上下文不会打印,因为上下文的类型部分匹配。
[...] $ strace --secontext=full,mismatch -e statx stat /home/user/file statx(AT_FDCWD, "/home/user/file" [system_u:object_r:user_home_t:s0!!unconfined_u:object_r:user_home_t:s0], ... $ strace --secontext=mismatch -e statx stat /home/user/file statx(AT_FDCWD, "/home/user/file" [user_home_t:s0], ...
SELinux 上下文不匹配通常会导致与 SELinux 相关的访问控制问题。系统调用 traces 中打印的不匹配可显著加快 SELinux 上下文正确性的检查。系统调用 traces 也可以解释有关访问控制检查的特定内核行为。
perf-top
现在可以按特定列排序
在这个版本中,对 perf-top
系统性能分析工具的更新,您可以根据任意事件列对示例进行排序。在以前的版本中,当一个组中的多个事件被抽样时,事件按照第一列进行排序。要排序示例,请使用 --group-sort-idx
命令行选项,然后按数字键,按匹配的数据列对表进行排序。请注意列编号从 0
开始。
(BZ#1851933)
新软件包: jigawatts
checkpoint/Restore In Userspace(CRIU)是一个 Linux 工具,它允许检查识别和恢复进程。jigawatts
软件包包含一个 Java 库,旨在提高 Java 应用程序可用性的 CRIU 机制。
trace-cmd reset
命令有新的行为
在以前的版本中,trace-cmd reset
命令会将 tracing_on
配置重置为 0。trace-cmd reset
的新行为是将 tracing_on
重置为默认值 1。
(BZ#1933980)
RHEL 9 支持扩展 Berkeley Packet 过滤器
Extended Berkeley Packet Filter(eBPF) 是一个内核中的虚拟机,允许在可访问有限功能的受限沙箱环境中在内核空间中执行代码。虚拟机执行类特殊的装配代码。
eBPF 字节码首先加载到内核。然后,使用即时编译对原生机器代码进行验证并转换为原生机器代码。最后,虚拟机会执行代码。
红帽提供大量使用 eBPF 虚拟机的组件。在 RHEL 9 中,这些组件包括:
- BPF Compiler Collection (BCC) 软件包,提供用于使用 eBPF 的 I/O 分析、联网和监控 Linux 操作系统的工具。
- BCC 库,它允许开发与 BCC 工具软件包中相似的工具。
-
bpftrace
追踪语言。 libbpf
软件包,对于bpf
的开发以及与bpf
相关的应用程序(如bpftrace
)至关重要。-
libbpf
库中的XDP
和AF_XDP
API 部分不被支持,并可能在以后的发行版本中删除。
-
- eBPF for Traffic Control(tc) 功能,可在内核网络数据路径中启用可编程数据包处理。
-
eXpress Data Path(XDP)功能在内核网络堆栈处理它们前提供对接收的数据包的访问。红帽仅在通过
libxdp
库使用时才支持 XDP。 xdp-tools
软件包,其中包含 XDP 功能的用户空间支持工具,在 AMD64 和 Intel64 CPU 构架中被支持。xdp-tools
软件包包括:-
libxdp
库。 -
载入 XDP 程序的
xdp-loader
工具。 -
用于数据包过滤的
xdp-filter
示例程序。 -
用于从启用了 XDP 的网络接口捕获数据包的
xdpdump
工具。目前仅在 AMD64 和 Intel64 CPU 构架中支持xdpdump
工具。它可用于其他架构,但为技术预览。
-
-
用于连接eXpress Data Path (XDP) 路径到用户空间的
AF_XDP
套接字
RHEL 9 提供 crash
工具版本 8.0.0
RHEL 9 提供 crash
工具版本 8.0.0。程序错误修复和显著改进包括:
-
在
add-symbol-file
命令中添加新的offset
参数。这一支持有助于将kaslr_offset
设置为gdb
。 -
将
gdb-7.6
升级到gdb-10.2
。
(BZ#1896647)
makedumpfile
现在支持改进的 zstd
压缩功能
在这个版本中,makedumpfile
包含了 Zstandard(zstd
)压缩功能,它提供了高压缩率。这种改进有助于在大型内存系统中特别使用。
与之前的压缩率相比,zstd
压缩功能在 vmcore
转储大小和压缩时间之间有很好的平衡。现在,改进的压缩机制会使用可接受的压缩时间创建一个较小的 vmcore
文件。
请注意,良好的压缩率还取决于系统的使用方式以及 RAM 中存储的数据类型。
(BZ#1988894)
Intel Xeon 可扩展服务器处理器上启用了 numatop
numatop
是一个跟踪和分析 NUMA 系统上运行的进程和线程的行为,并显示可以识别 NUMA 相关性能瓶颈的指标。
numatop
使用 Intel 性能计数器抽样技术,并将性能数据与 Linux 系统 runtime
相关联,以在生产系统中提供分析。
(BZ#1874125)
kexec_file_load
已添加为 RHEL 9 的默认选项
这个更新为 64 位 ARM 架构添加了 kexec_file_load
系统调用。它为 kdump
提供内核化 kexec
装载程序。在以前的版本中,当启用了安全引导选项时,内核会阻止加载未签名的内核镜像。kdump
机制首先会尝试检测是否启用了安全引导,然后选择要运行的引导接口。因此,在启用了安全引导并指定了 kexec_file_load()
时,未签名的内核无法加载。
在这个版本中解决了这个问题,未签名的内核在上述场景中可以正常工作。
(BZ#1895232)
makedumpfile
现在包含改进的选项,以获得预计 vmcore
大小
在这个版本中,makedumpfile
程序包括以下选项,可帮助打印当前运行的内核转储大小的估算:
-
--dry-run
执行其他选项指定的所有操作,但不会写入输出文件。 -
--show-stats
会显示报告信息。这是为提供给--message
选项的级别中启用位 4 的替代选择。
以下示例显示了 --dry-run
和 --show-stats
用法:
$ makedumpfile --dry-run --show-stats -l --message-level 7 -d 31 /proc/kcore dump.dummy
请注意,转储文件大小可能会根据 panic 的系统状态而有所不同,选项提供的估算可能与实际状态不同。
kexec-tools
软件包现在支持 RHEL 9 的默认 crashkernel
内存保留值
kexec-tools
软件包现在维护默认的 crashkernel
内存保留值。kdump
服务使用默认值为每个内核保留 crashkernel
内存。通过这个实现,当系统的可用内存少于 4GB 时,对 kdump
的内存分配有所改进。
查询默认的 crashkernel 值:
$ kdumpctl get-default-crashkernel
如果系统上默认 crashkernel
值保留的内存不够,请提高 crashkernel
参数。
请注意,RHEL 9 及更新的版本中不再支持引导命令行中的 crashkernel=auto
选项。
如需更多信息,请参阅 /usr/share/doc/kexec-tools/crashkernel-howto.txt
文件。
(BZ#2034490)
RHEL 9 支持内核调度
借助内核调度功能,用户可以防止不应相互信任的任务共享相同的 CPU 内核。类似地,用户可以定义可共享 CPU 内核的任务组。
可以指定这些组:
- 通过减少一些跨严重多线程(SMT)攻击来提高安全性
- 隔离需要整个内核的任务。例如,对于实时环境中的任务,或依赖特定处理器功能的任务,如单指令、多数据(¢D)处理
如需更多信息,请参阅 Core Scheduling。
(JIRA:RHELPLAN-100497)
使用非限制 iommu 模式作为默认在 64 位 ARM 架构上提高了性能
在这个版本中,64 位 ARM 架构默认使用 lazy 直接内存访问(DMA)域进行系统内存管理单元(SMMU)。虽然这可以显著提高性能,但它在一个地址被取消映射和在 SMMU 上进行 TLB(Translation Lookaside Buffer )刷新之间会有一个时间窗口。在以前的版本中,64 位 ARM 架构将严格的 DMA 域配置为默认值,这会因为 4KB 页大小而导致性能下降。
如果您需要使用严格的 DMA 域模式,请使用内核命令行指定 iommu.strict=1
模式。请注意,使用严格的 DMA 域可能会导致 64 位 ARM 架构的性能下降。
(BZ#2050415)
kernel-rt
源树已更新至 RHEL 9.0 树
kernel-rt
源已更新为使用最新的 Red Hat Enterprise Linux 内核源树。实时补丁集也更新至最新的上游版本 v5.15-rt19。这些更新提供了很多程序错误修正和增强。
(BZ#2002474)
在 hv_24x7
和 hv_gpci
PMU 中支持 CPU 热插拔
在这个版本中,PMU 计数器可以正确地响应 CPU 的热插操作。因此,如果 hv_gpci
事件计数器在禁用的 CPU 上运行,则计数会重定向到另一个 CPU。
(BZ#1844416)
POWERPC hv_24x7
事件的指标现在可用
POWERPC hv_24x7
嵌套事件的指标现在可用于 perf
。通过聚合多个事件,这些指标可以更好地了解从 perf
计数器获取的值,以及 CPU 如何处理工作负载。
(BZ#1780258)
RHEL 9 中引入了 IRDMA 驱动程序
IRDMA 驱动程序在支持 RDMA 的 Intel® 网络设备上启用 RDMA 功能。这个驱动程序支持的设备有:
- Intel® Ethernet Controller E810
- Intel® Ethernet Network Adapter X722
RHEL 9 为 X722 Internet Wide-area RDMA 协议(iWARP)设备提供更新的 Intel® 以太网协议驱动程序(IRDMA)设备。RHEL 9 还引进了新的 E810 设备,它通过融合以太网支持 iWARP 和 RDMA(RoCEv2)。IRDMA 模块取代了 X722 的传统 i40iw 模块,并扩展为 i40iw 定义的应用程序二进制接口(ABI)。这个变化与旧的 X722 RDMA-Core 供应商(libi40iw)向后兼容。
- X722 设备只支持 iWARP 和一组有限的配置参数。
E810 设备支持以下一组 RDMA 和拥塞管理功能:
- iWARP 和 RoCEv2 RDMA 传输
- 优先流控制(PFC)
- 显式拥塞通知(ECN)
(BZ#1874195)
内核 bonding
模块的新参数:lacp_active
RHEL 9 引入了 bonding
内核模块的 lacp_active
参数。这个参数指定是否以指定间隔发送链路聚合控制协议数据单元(LACPDU)帧。这些选项包括:
-
on
(默认)- 允许发送 LACPDU 帧以及配置的lacp_rate
参数 -
off
- LACPDU 帧以 "speak when spoken to" 模式执行
请注意,当初始化或未绑定端口时,LACPDU 状态帧仍然被发送。