4.9. 内核
RHEL 9.1 中的内核版本
Red Hat Enterprise Linux 9.1 与内核版本 5.14.0-162 一起发布。
list_lru
的内存消耗已被优化
内部内核数据结构 list_lru
跟踪内核索引节点和文件目录条目的"最早使用"状态。在以前的版本中,list_lru
分配结构的数量与挂载点的数量和存在内存 cgroup
的数量直接成比例。两个数字都随着正在运行的容器增加,导致 O (n^2)
的内存消耗量为 n
,其中 n 是正在运行的容器数。此更新可优化系统中 list_lru
到 O(n)
的内存消耗。因此,现在有足够的内存供用户应用程序使用,特别是在有大量运行容器的系统中。
(BZ#2013413)
BPF 更新到 Linux 内核版本 5.16
Berkeley Packet Filter (BPF) 工具已更新至 Linux 内核版本 5.16,具有多个程序错误修复和增强。最显著的变化包括:
简化了对内部 BPF 程序项的处理,以及
libbpf
用户空间库中的bpf_program__set_attach_target()
API。bpf_program__set_attach_target()
API 为基于 BPF 的程序设置基于 BTF 的附加目标。-
添加了对
BTF_KIND_TAG
kind 的支持,允许您标记声明。 -
添加了对
bpf_get_branch_snapshot()
帮助程序的支持,它允许追踪程序从硬件捕获最后一个分支记录(LBR)。 -
在
libbpf
用户空间库中添加了旧的kprobe
事件,它允许通过旧接口创建kprobe
tracepoint 事件。 -
添加了通过 BPF 特定的结构使用
__sk_buff
helper 功能访问硬件时间戳的功能。 -
添加了对
AF_XDP
缓冲池中 RX 缓冲区分配的批处理接口的支持,支持i40e
和ice
。 -
添加了
libbpf
用户空间库中的传统uprobe
支持,以补充最近合并的传统kprobe
。 -
将
bpf_trace_vprintk()
添加为 variadicprintk
helper。 -
添加了
libbpf
opt-in for stricter BPF 程序部分处理,作为libbpf
1.0 工作的一部分。 -
添加了
libbpf
支持来查找专用映射,如perf RB
和内部删除 BTF 类型标识符。 -
添加了
bloomfilter
BPF map 类型来测试集合中是否存在某一元素。 - 添加了对 BPF 中的内核模块功能调用的支持。
-
添加了在 light skeleton 中的无类型和弱
ksym
的支持。 -
添加了对
BTF_KIND_DECL_TAG
类型的支持。
有关运行中内核中可用的 BPF 功能的完整列表,请使用 bpftool feature
命令。
(BZ#2069045)
BTF 数据现在位于内核模块中
BPF 类型格式 (BTF) 是元数据格式,对与 BPF 程序和映射相关的调试信息进行编码。在以前的版本中,内核模块的 BTF 数据保存在 kernel-debuginfo
软件包中。因此,需要安装对应的 kernel-debuginfo
软件包才能将 BTF 用于内核模块。在这个版本中,BTF 数据现在直接位于内核模块中。因此,您不需要安装任何软件包就可以使 BTF 正常工作。
(BZ#2097188)
kernel-rt
源树已更新至 RHEL 9.1 树
kernel-rt
源已更新为使用最新的 Red Hat Enterprise Linux 内核源树。实时补丁集也更新至最新的上游版本 v5.15-rt
。这些更新提供了很多程序错误修正和增强。
(BZ#2061574)
ARM 和 AMD 和 Intel 64 位构架启用动态抢占调度
RHEL 9 在 ARM 和 AMD 和 Intel 64 位构架中提供动态调度功能。此功能增强支持在引导时或运行时更改内核的抢占模式,而不是编译时间。/sys/kernel/debug/sched/preempt
文件包含当前的设置,并可以在运行时
修改。
使用 DYNAMIC_PREEMPT
选项时,您可以在引导时将 preempt=
变量设置为 none
、voluntary
或 full
,voluntary
抢占为默认值。使用动态抢占处理,您可以覆盖默认的抢占模型,以改进调度延迟。
(BZ#2065226)
stalld
更新到版本 1.17
stalld
程序(提供 stall
守护进程)是防止 Linux 系统中操作系统线程的不足状态的机制。此版本监控星级状态的线程。当线程位于 CPU 运行队列中长于 starvation 的阈值,就会发生 starvation。
与之前的版本相比,这个 stalld
版本包括了很多改进和程序错误修复。值得注意的更改包括检测可运行的补救任务的能力。
当 stalld
检测到星号线程时,程序会将线程的调度类改为 SCHED_DEADLINE
策略,它为线程提供了指定 CPU 运行线程的小片段。当使用 timeslice
时,线程会返回其原始调度策略,而 stalld
会继续监控线程状态。
tpm2-tools
软件包已更新至 tpm2-tools-5.2-1
版本
tpm2-tools
软件包已更新到版本 tpm2-tools-5.2-1
。此升级提供了很多重要的功能增强和程序错误修复。最显著的变化包括:
-
在使用
tpm2_createprimary
和tpm2_create
工具创建的主对象时添加对公钥输出的支持。 -
添加对
tpm2_print
工具的支持,以打印公钥输出格式。tpm2_print
解码一个受信任的平台模块(TPM)数据结构,并打印括起的元素。 -
添加了对
tpm2_eventlog
工具的支持,以读取超过 64 KB 的日志。 -
添加
tpm2_sessionconfig
工具以支持显示和配置会话属性。
有关显著变化的更多信息,请参阅 /usr/share/doc/tpm2-tools/Changelog.md
文件。
(BZ#2090748)
Intel E800 设备现在支持 iWARP 和 RoCE 协议
在这个版本中,您可以使用 enable_iwarp
和 enable_roce
devlink 参数打开和关闭 iWARP 或 RoCE 协议支持。使用这个强制功能,您可以使用其中一个协议配置该设备。Intel E800 设备不支持同一端口上这两个协议。
要为特定 E800 设备启用或禁用 iWARP 协议,首先获取卡的 PCI 位置:
$ lspci | awk '/E810/ {print $1}' 44:00.0 44:00.1 $
然后,启用或禁用协议。您可以将 pci/0000:44:00.0
用作第一个端口,并将 pci/0000:44:00.1
用于卡的第二个端口,作为 devlink 命令的参数
$ devlink dev param set pci/0000:44:00.0 name enable_iwarp value true cmode runtime $ devlink dev param set pci/0000:44:00.0 name enable_iwarp value false cmode runtime
要为特定 E800 设备启用或禁用 RoCE 协议,获取卡的 PCI 位置,如上所示。然后使用以下命令之一:
$ devlink dev param set pci/0000:44:00.0 name enable_roce value true cmode runtime $ devlink dev param set pci/0000:44:00.0 name enable_roce value false cmode runtime
(BZ#2096127)