4.9. 内核

RHEL 9.0 中的内核版本

Red Hat Enterprise Linux 9.0 带有内核版本 5.14.0-70。

(BZ#2077836)

默认情况下,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_ADMINCAP_PERFMON)。

有关如何应用内核命令行参数的详情,请参考 配置内核命令行参数

(BZ#2091643)

红帽只为次版本保护内核符号

红帽保证,在您使用受保护的内核符号编译内核模块时,内核模块将继续在延长更新支持(EUS)版本中的所有更新中载入,。RHEL 9 的次版本之间没有内核应用程序二进制接口(ABI)保证。

(BZ#2059183)

RHEL 9 Beta 内核使用受信任的 SecureBoot 证书签名

在以前的版本中,RHEL Beta 版本需要用户使用 Machine Owner Key(MOK)工具注册独立的 Beta 公钥。从 RHEL 9 Beta 版开始,内核与受信任的 SecureBoot 证书签名,因此用户不再需要注册一个单独的 Beta 公钥以便在启用了 UEFI 安全引导的系统上使用 beta 版本。

(BZ#2002499)

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-v1cgroup-v2。从内核的角度来看,没有默认的控制组版本,并且由 systemd 决定在启动时挂载。

(BZ#1953515)

可能会影响第三方内核模块的内核更改

Linux 分发自 5.9 之前内核版本,支持导出 GPL 功能,作为非 GPL 功能。因此,用户可以通过 shim 机制将专有功能链接到 GPL 内核功能。在这个版本中,RHEL 内核融合了上游更改,这些更改提高了 RHEL 通过重新调整 shim 来强制实施 GPL 的能力。

重要

合作伙伴和独立软件供应商(ISV)应利用早期版本的 RHEL 9 测试他们的内核模块,以确保其符合 GPL。

(BZ#1960556)

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 也可以解释有关访问控制检查的特定内核行为。

(BZ#2038965)

perf-top 现在可以按特定列排序

在这个版本中,对 perf-top 系统性能分析工具的更新,您可以根据任意事件列对示例进行排序。在以前的版本中,当一个组中的多个事件被抽样时,事件按照第一列进行排序。要排序示例,请使用 --group-sort-idx 命令行选项,然后按数字键,按匹配的数据列对表进行排序。请注意列编号从 0 开始。

(BZ#1851933)

新软件包: jigawatts

checkpoint/Restore In Userspace(CRIU)是一个 Linux 工具,它允许检查识别和恢复进程。jigawatts 软件包包含一个 Java 库,旨在提高 Java 应用程序可用性的 CRIU 机制。

(BZ#1972029)

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 库中的 XDPAF_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 套接字

(BZ#2070506)

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 的系统状态而有所不同,选项提供的估算可能与实际状态不同。

(BZ#1958452)

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_24x7hv_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 状态帧仍然被发送。

(BZ#1951951)