4.8. 内核

RHEL 8.4 中的内核版本

Red Hat Enterprise Linux 8.4 带有内核版本 4.18.0-305。

另请参阅外部内核参数的重要变化设备驱动程序

BZ#1839151

RHEL 8.4 的扩展 Berkeley Packet 过滤器

Extended Berkeley Packet Filter(eBPF) 是一个内核中的虚拟机,允许在可访问有限功能的受限沙箱环境中在内核空间中执行代码。虚拟机执行类特殊的装配代码。

eBPF 字节码首先加载到内核,然后进行验证,通过即时编译到原生机器代码转换,然后虚拟机执行代码。

红帽提供大量使用 eBPF 虚拟机的组件。每个组件处于不同的开发阶段,因此目前并不完全支持所有组件。在 RHEL 8.4 中,支持以下 eBPF 组件:

  • The BPF Compiler Collection (BCC)工具软件包,提供用于使用 eBPF 的 I/O 分析、联网和监控 Linux 操作系统的工具。
  • BCC 库,它允许开发与 BCC 工具软件包中相似的工具。
  • eBPF for Traffic Control(tc) 功能,可在内核网络数据路径中启用可编程数据包处理。
  • eXpress Data Path(XDP)功能在内核网络堆栈处理它们前提供对接收的数据包的访问,在特定情况下被支持。
  • libbpf 软件包对于 bpf 相关应用程序(如 bpftracebpf/xdp 开发)至关重要。
  • xdp-tools 软件包包含 XDP 特性的用户空间支持工具,现在在 AMD 和 Intel 64 位构架中被支持。这包括 libxdp 库、加载 XDP 程序的 xdp-loader 实用程序、用户数据包过滤的 xdp-filter 示例程序、用于从启用了 XDP 的网络接口捕获数据包的 xdpdump 工具程序。

请注意,所有其他 eBPF 组件都作为技术预览提供,除非有特定的组件被显示为受支持。

以下显著的 eBPF 组件当前作为技术预览提供:

  • bpftrace 追踪语言
  • 用于连接eXpress Data Path (XDP) 路径到用户空间的AF_XDP 套接字

如需有关技术预览组件的更多信息,请参阅技术预览

(BZ#1780124)

新软件包: kmod-redhat-oracleasm

在这个版本中添加了新的 kmod-redhat-oracleasm 软件包,它提供 ASMLib 工具程序的内核模块部分。Oracle Automated Storage Management(ASM)是 Oracle 数据库的数据卷管理器。ASMLib 是一个可选工具,可用于 Linux 系统来管理 Oracle ASM 设备。

(BZ#1827015)

xmon 程序更改为支持安全引导和 kernel_lock 对安全攻击的恢复

如果禁用了 Secure Boot 机制,您可以在内核命令行上将 xmon 程序设置为读写模式(xmon=rw)。但是,如果您指定了 xmon=rw 并引导至安全引导模式,kernel_lockdown 功能会覆盖 xmon=rw,并将其更改为只读模式。根据安全引导是否启用的情况,xmon 的额外行为如下:

安全引导启用:

  • xmon=ro (默认)
  • 堆栈追踪会被输出
  • 内存读取正常工作
  • 内存写入被阻断

安全引导关闭:

  • 设置 xmon=rw 的可能性
  • 堆栈追踪总是被输出
  • 内存读取始终可以正常工作
  • 只有 xmon=rw 时才允许写入内存

xmon 行为的这些更改旨在支持 安全引导kernel_lock ,对具有 root 权限的攻击进行更好的应对。

有关如何配置内核命令行参数的详情,请参考客户门户网站中的配置内核命令行参数信息

(BZ#1952161)

Cornelis Omni-Path Architecture(OPA)主机软件

Red Hat Enterprise Linux 8.4 完全支持 Omni-Path Architecture(OPA)主机软件。OPA 为在集群环境中的计算和 I/O 节点之间的高性能数据传输(高带宽、高消息率、低延迟)提供主机 Fabric Interface(HFI)硬件初始化和设置。

有关安装 Omni-Path 架构的说明,请参阅: Cornelis Omni-Path Fabric Software 发行注记文件。

BZ#1960412

默认情况下禁用 SLAB 缓存合并

禁用了 CONFIG_SLAB_MERGE_DEFAULT 内核配置选项,现在默认情况下不会合并 SLAB 缓存。这个变化旨在提高分配程序可靠性和可追踪缓存用量。如果需要之前的 slab-cache 合并行为,用户可以通过在内核命令行中添加 slub_merge 参数来重新启用它。有关如何设置内核命令行参数的详情,请参考客户门户网站中的配置内核命令行参数

(BZ#1871214)

ima-evm-utils 软件包 rebase 到版本 1.3.2

ima-evm-utils 软件包已升级到 1.3.2 版本,提供多个程序错误修复和增强。主要变更包括:

  • 添加了对处理受信任平台模块(TPM2)多功能的支持
  • 将引导聚合值扩展到平台配置注册表(PCR)8 和 9
  • 通过 CLI 参数预载入 OpenSSL 引擎
  • 添加了对 Intel Task State Segment(TSS2)PCR 读取的支持
  • 添加了对原始 Integrity 架构(IMA)模板的支持

libimaevm.so.0libimaevm.so.2 库 都是 ima-evm-utils 的一部分。当最近的应用程序在使用 libimaevm.so.2 时,libimaevm.so.0 用户不会受到影响。

(BZ#1868683)

在支持的 CPU 构架中控制 IMA 和 EVM 功能

除 ARM 外,所有 CPU 架构对完整性迁移架构(IMA)和扩展验证模块(EVM)技术具有类似的功能支持。启用的功能会因每个 CPU 架构的不同而有所不同。以下是每个支持的 CPU 架构最重要的更改:

  • IBM Z:IMA 应用程序和可信密钥环启用。
  • AMD64 和 Intel 64:处于安全引导状态的特定构架策略。
  • IBM Power System(little-endian):处于安全和可信引导状态的特定架构策略。
  • SHA-256 作为所有支持的构架的默认哈希算法。
  • 对于所有架构,测量模板已改为 IMA-SIG。模板包括存在时的签名位。其格式为 d-ng|n-ng|sig

此更新的目的是降低 IMA 和 EVM 中的功能差异,从而使用户空间应用程序在所有支持的 CPU 架构中的行为相同。

(BZ#1869758)

现在,RHEL 8 中包含了主动压缩 功能,默认被禁用

由于不断进行工作负载,系统内存会变得碎片化。碎片可能会导致容量和性能问题。在某些情况下,也有可能出现程序错误。因此,内核依赖于一个称为内存压缩的被动机制。该机制的原始设计比较保守,紧凑活动是根据分配请求的需求启动的。但是,如果系统内存已经大量碎片,追溯行为会增加分配延迟。主动紧凑通过在请求分配定期启动内存压缩工作来改进设计。这个功能增强提高了内存分配请求在不需要内存压缩时按需按需找到内存的物理连续块的几率。因此,特定内存分配请求的延迟会降低。

警告

主动压缩(Proactive compaction) 可增加压缩活动。这可能会对系统范围的严重影响,因为属于不同进程的内存页面会被移动并重新映射。因此,启用主动压缩需要非常小心,以避免应用程序中的延迟激增。

(BZ#1848427)

在 RHEL 8 中添加了 EDAC 支持

在这个版本中,RHEL 8 支持在第 8 代和第 9 代的 Intel Core Processors(CoffeeLake)中设置的 Error Detection and malection(EDAC)内核模块。EDAC 内核模块主要处理错误代码解析(ECC)内存,并检测和报告 PCI 总线奇偶校验错误。

(BZ#1847567)

新软件包: kpatch-dnf

kpatch-dnf 软件包提供了一个 DNF 插件,它允许订阅 RHEL 系统以进行内核实时补丁更新。该订阅会影响系统中目前安装的所有内核,包括以后安装的内核。有关 kpatch-dnf 的详情,请查看 dnf-kpatch (8) 手册页或 管理、监控和更新内核 文档。

(BZ#1798711)

slab 内存的新 cgroups 控制器实现

RHEL 8 现在提供了控制组群技术的 slab 内存控制器的新实现。目前,单个内存 slab 可以包含由不同内存控制组群拥有的对象。slab 内存控制器提高了 slab 使用率(最多 45%),并允许将内存核算从页面级别转换到对象级别。另外,这个更改可取消每个内存控制组群的每个 CPU 和每个节点 slab 缓存集合,并为所有内存控制组群设置一组通用的每 CPU 和每个节点 slab 缓存。因此,您可以显著降低内核内存总量,并观察对内存碎片的影响。

请注意,新的和更精确的内存核算需要更多 CPU 时间。但是,在实践中这种差异看起来微不足道。

(BZ#1877019)

RHEL 8 中添加了时间命名空间

time 命名空间可让系统单调和引导时钟使用 AMD64、Intel 64 和 64 位 ARM 架构中的每个命名空间偏移。此功能适用于更改 Linux 容器内的日期和时间,以及从检查点恢复后对时钟的容器内调整。现在,用户可以为每个容器独立设置时间。

(BZ#1548297)

新功能: 返回空闲页

在这个版本中,RHEL 8 主机内核可以将虚拟机没有使用的内存页面返回给 hypervisor。这提高了主机的稳定性和资源效率。请注意,对于返回到工作的内存页面,必须在虚拟机中配置它,而且虚拟机还必须使用 virtio_balloon 设备。

(BZ#1839055)

支持在 perf top 中更改排序顺序

在这个版本中,当对组中多个事件进行抽样时,perf top 可以按任意事件列对样本进行排序,而不是按第一列排序。因此,按数字键按匹配的 data 列对表进行排序。

注意

列编号从 0 开始。

使用 --group-sort-idx 命令行选项时,可以按照列号排序。

(BZ#1851933)

kabi_whitelist 软件包已重命名为 kabi_stablelist

根据红帽承诺替换有问题的语言,我们在 RHEL 8.4 发行版中将 kabi_whitelist 软件包重命名为 kabi_stablelist

(BZ#1867910、BZ#1886901

bpf rebase 到版本 5.9

RHEL 8 中的 bpf 内核技术已更新为来自内核 v5.9 的上游认证机构。

这个更新提供多个程序错误修正和增强。主要变更包括:

  • 添加了映射元素的 Berkeley Packet Filter(BPF)迭代所有 BPF 程序以便有效地进行内核检查。
  • 同一控制组群(cgroup)中的程序可以共享 cgroup 本地存储映射。
  • BPF 程序可以在套接字查找中运行。
  • SO_KEEPALIVE 和相关的选项可用于 bpf_setsockopt() helper。

请注意,有些 BPF 程序可能需要更改其源代码。

(BZ#1874005)

bcc 软件包被 rebase 到版本 0.16.0

bcc 软件包已升级到 0.16.0 版本,它提供多个程序错误修复和增强。主要变更包括:

  • 添加了实用程序 klockstatfuncinterval
  • 修复 tcpconnect 手册页的多个部分
  • 修复了相关代码以使 tcptracer 工具输出显示 IPv6 地址的 SPORT 和 DPORT 列
  • 修复有问题的依赖关系

(BZ#1879411)

bpftrace rebase 到版本 0.11.0

bpftrace 软件包已升级至 0.11.0 版本,提供多个程序错误修复和增强。主要变更包括:

  • 添加了实用程序 threadsnooptcpsynbltcplifeswapinsetuidsnaptime
  • 修复了 tcpdrop.btsyncsnoop.bt 工具 运行的失败
  • 修复了在 IBM Z 构架中加载 Berkeley Packet Filter(BPF)程序失败的问题
  • 修复了符号查找错误

(BZ#1879413)

libbpf rebase 到版本 0.2.0.1

libbpf 软件包已升级到版本 0.2.0.1,它提供多个程序错误修复和增强。主要变更包括:

  • 添加了对从具有 BPF 类型格式(BTF)结构访问权限的程序访问 bpf_map结构中的 Berkeley Packet Filter(BPF)映射字段的支持
  • 添加了 BPF 环缓冲
  • 添加了 bpf 迭代基础架构
  • 改进了 bpf_link 可观察性

BZ#1919345

perf 现在支持从正在运行的收集器添加或删除追踪点,而无需停止或重启 perf

在以前的版本中,要从 perf record 实例添加或删除追踪点,必须停止 perf 进程。因此,在进程被停止的期间发生的性能数据将不会被收集,因此会丢失。在这个版本中,您可以动态地通过控制管道接口启用和禁用 perf record 收集的追踪点,而无需停止 perf record 进程。

(BZ#1844111)

perf 工具现在支持记录并显示 trace 数据的绝对时间戳

在这个版本中,perf script 可以记录并显示带有绝对时间戳的 trace 数据。

注: 要显示带有绝对时间戳的 trace 数据,数据必须使用指定的时钟 ID 记录。

要使用绝对时间戳记录数据,请指定时钟 ID:

# perf record -k CLOCK_MONOTONIC sleep 1

要显示使用指定时钟 ID 记录的追踪数据,请执行以下命令:

# perf script -F+tod

(BZ#1811839)

dwarves rebase 到版本 1.19.1

dwarves 软件包升级至 1.19.1 版本,提供多个程序错误修复和增强。值得注意的是,这个更新引入了一种从带有相关 ftrace 条目的 DWARF 调试数据检查函数的新方法,以确保生成了 ftrace 函数子集。

BZ#1903566

perf 现在支持使用指定事件触发快照的循环缓冲

在这个版本中,您可以创建自定义循环缓冲区,在检测到指定事件时将数据写入 perf.data 文件中。因此,perf 记录 可以在系统后台中持续运行,而不会因为不断地将数据写入 perf.data 文件而产生额外的开销,而且只记录您感兴趣的数据。

要使用 perf 工具创建自定义循环缓冲来记录事件特定快照,请使用以下命令:

# perf record --overwrite -e _events_to_be_collected_ --switch-output-event _snapshot_trigger_event_

(BZ#1844086)

内核 DRBG 和 Jitter 熵源符合 NIST SP 800-90A 和 NIST SP 800-90B

Kernel Deterministic Random Bit Generator(DRBG)和 Jitter 熵源现在符合使用 DRBG(NIST SP 800-90A)的随机数生成建议,并对用于随机生成(NIST SP 800-90B)的熵源(NIST SP 800-90B)规格推荐。因此,在 FIPS 模式中的应用程序可以使用这些源作为 FIPS 兼容的随机性和 noise 源。

(BZ#1905088)

kdump 现在支持标记为团队网络接口的 Virtual Local Area Network

在这个版本中增加了支持为 kdump 配置 Virtual Local Area Network 标记的组接口。现在,此功能可让 kdump 使用带有 Virtual Local Area Network 标记的组接口转储 vmcore 文件。

(BZ#1844941)

kernel-rt 源树已更新至 RHEL 8.4 树

kernel-rt 源已更新为使用最新的 Red Hat Enterprise Linux 内核源树。实时补丁集也更新至最新的上游版本 v5.10-rt7。这两个更新都提供很多程序错误修正和增强。

(BZ#1858099, BZ#1858105)

stalld 软件包现在添加到 RHEL 8.4 发行本中

在这个版本中,将 stalld 软件包添加到 RHEL 8.4.0。stalld 是一个监控运行低延迟应用的系统上的线程的守护进程。它检查在运行队列上没有调度到指定阈值的 CPU 的作业线程。

当它检测到一个死锁的线程时,stalld 会临时将调度策略更改为 SCHED_DEADLINE,并为线程分配大量 CPU 时间以进行向前进度。当时间分片完成或者线程块时,线程会返回到其原始调度策略。

(BZ#1875037)

hv_24x7hv_gpci PMU 中支持 CPU 热插拔

在这个版本中,PMU 计数器可以正确地响应 CPU 的热插操作。因此,如果 hv_gpci 事件计数器在禁用的 CPU 上运行,则计数会重定向到另一个 CPU。

(BZ#1844416)

POWERPC hv_24x7 事件的指标现在可用

POWERPC hv_24x7 嵌套事件的指标现在可用于 perf。通过聚合多个事件,这些指标可以更好地了解从 perf 计数器获取的值,以及 CPU 如何处理工作负载。

(BZ#1780258)

Hwloc rebase 到版本 2.2.0

hwloc 软件包已升级到 2.2.0 版本,它提供以下更改:

  • hwloc 功能可以报告 Nonvolatile Memory Express (NVMe) 驱动器的详细信息,包括磁盘总大小和扇区大小。

BZ#1841354

igc 驱动程序现在被完全支持

igc Intel 2.5G 以太网 Linux 有线 LAN 驱动程序是在RHEL 8.1中作为技术预览引入的。从 RHEL 8.4 开始,它在所有架构中都被完全支持。ethtool 还支持 igc 有线 LAN。

(BZ#1495358)