Linux Kernel 6x系列主要发布记录
2022-08-18 22:17:20 阿炯

2022年8月,Linux Kernel 正式步入了6x的版本期。

Linux 6.0 合并大量 char/misc 代码,提供 Gaudi2 支持

char/misc 是 Linux 内核中一块 “包罗万象” 的区域,任何不属于其他子系统的驱动程序都存放在这里。2022年8月上旬,Linux 6.0 “char/misc” 区域的最新 PR 合并了,此次更新最值得注意的是引入了对 Intel 的 AI 处理器 Habana Labs Gaudi2 的支持。Gaudi2 是英特尔在 5 月 Vision 会议上公开的用于训练和推理的下一代 AI 处理器,Gaudi2 基于 7nm 工艺,TPC 数量增加至 24,提供 96GB HBM2E 内存,24 x 100 GbE 网络。它可以提供比 NVIDIA A100 高两倍的 AI 训练性能。

据 Phoronix 介绍,早在 6 月,英特尔就开始发布对 Gaudi2 的 Linux 驱动程序支持,基于 “habanalabs” 的主线 Linux 内核驱动程序。过去几周,Gaudi2 支持代码已在 Linux 6.0 的 char-misc 区域中排队等待,现在已合并到主线。Habana Labs Guadi2 支持引领了这轮 char/misc 更改,新的头文件带来大量代码,导致该 PR 大概有 184k 行新代码和 11.8k 行删除。当然,除了 Gaudi2 支持之外,Linux 6.0 的 char/misc 更改还有许多工业 I/O 驱动程序更新以及对 SoundWire、Slimbus、FPGA 驱动程序的更新,以及其他杂项更改。

Linux 6.0 将其 H.265/HEVC 用户空间 API 提升到稳定状态

随着 Linux 6.0 多媒体子系统的变化,H.265/HEVC 用户空间 API 现在已被视为稳定状态。科技媒体 Phoronix 指出,Linux 6.0 已经采用了将 HEVC 无状态控制移出暂存区的补丁,并使 "HEVC uapi 表现稳定并可用于硬件解码器"。

2022年8月中旬,执行 Linux 内核的 HEVC 用户空间 API 的是用于 Allwinner SoC 的 Cedrus 驱动程序和用于各种 Rockchip 和 NXP SoC 中 VPU 的 Hantro 视频 IP 的 Hantro 媒体驱动程序。此外,目前存在 out-of-tree Rockchip RKVDEC 和 Raspberry Pi “RPI” 驱动程序,它们都利用了此 HEVC 用户空间 API。通过使用 API 的这些驱动程序和持续的开源代码改进,现在它已经是一个稳定的状态,而不是一个暂存接口。除了最终确定用户空间 API 之外,Linux 6.0 的媒体子系统还更新添加了 Semi AR0521 传感器驱动程序,围绕 H.265 支持对 Cedrus 和 Hantro 进行了更新,STKWebCam 驱动也已经从暂存状态中升级出来;以及对英特尔 AtomISP 驱动程序进行了一些修复 / 清理,和其他较小的驱动程序修复 / 改进。有关 Linux 6.0 媒体子系统更新的完整列表,可参阅此处

Linux 6.0 为 Arm64 添加 UEFI 镜像内存和 ACPI PRM 支持

Linux 合并了 EFI 更改,其中包含 ARM64 方面的两个显著改进。首先它包含了2022年 4 月华为为 Linux Arm64 提供的 UEFI 镜像内存支持。UEFI 镜像内存已经在 x86/x86_64 Linux 上工作了很多年,现在它也可以在 ARM64 硬件上工作。UEFI 允许设置基于地址范围的部分内存镜像,该镜像沿用 UEFI 2.5 规范,符合 UEFI 规范的 ARM64 硬件都能够在 Linux 6.0+ 上使用它。内存镜像用于将内存分成两个独立的技术通道,通常在存储设备(如服务器)上使用,可以实现更高的内存可靠性和更高级别的内存整合。

除了 ARM64 的镜像内存之外,ACPI PRM(高级配置和电源接口规范 “ACPI” 平台运行时机制 “PRM”) 在基于 ARM64 的 Linux 6.0 上也得到支持。 平台运行时机制 PRM 在上半年被纳入 ACPI 6.4 规范,允许将一些系统管理中断 (SMI) 处理程序移出系统管理模式 (SMM) 的 “黑匣子”,并进入 OS/VMM 执行上下文。据媒体介绍,在 ARM64 服务器上启用 ACPI PRM 支持,将减少某些服务器平台上系统初始化的计算开销。除了上述两个 ARM64 新特性,Linux 6.0 的其余 EFI 更改都很小。

Linux 6.0 为 LoongArch 架构启用 PCI 和其他功能支持

虽然 Linux 5.19 合并了对龙芯 LoongArch CPU 指令集架构的支持,但由于一些驱动代码尚未完成并准备好及时合并,这实际上还不足以形成一个启动系统。LoongArch 之前被允许在 Linux 5.19 中合并这些初步代码,以便 Glibc 支持可以落地,现在 Linux 6.0 中更多的 CPU 移植已经准备好进入内核。最值得注意的是,Linux 6.0 的 LoongArch 代码启用了 PCI 支持,现在 PCI 和 IRQ 芯片的变化已经准备就绪。因此,Linux 6.0 对龙芯的这个 CPU 架构的 PCI 支持已经准备完毕,另外还有其他的变化,如堆栈解除器和堆栈跟踪支持。LoongArch 的变化还包括使用 vDSO 优化 getcpu ()、错误修复、构建错误修复以及更新其默认内核配置文件。

Linux 6.0 引入 F2FS 低内存模式,用性能减少内存占用

Flash Friendly File-System (F2FS) 对于闪存设备,尤其是固态硬盘和移动硬盘来说,依然是强大的文件系统选项。在 Linux 6.0 中,此文件系统驱动程序带来了更多改进,引入了包括低内存模式 (Low-Memory Mode) 在内的一些新功能。低内存模式在低端 Android 手机以及内存容量较小的设备上,能够调整文件系统行为以减少内存占用。但这种以节约内存空间为代价的行为,可能会影响运行性能。Linux 6.0 的 F2FS 在其原子写入操作、前台垃圾收集时间、修复等方面也有所改进。

Linux 6.0-rc1 发布,Linus “也可以称之为 5.20 版本”

Linux 6.0 的第一个候选版本已于2022年8月中旬发布,Linux 6.0 内核将在两个月内稳定下来。它带来了超百万行代码,这些代码主要来源于 AMD GPU 和英特尔 Habana Labs Gaudi2 支持代码。下面是该版本一些重要的变更:
合并大量 char/misc 代码,提供 Gaudi2 支持
引入 F2FS 低内存模式,用性能减少内存占用
为 LoongArch 架构启用 PCI 和其他功能支持
为 Arm64 添加 UEFI 镜像内存和 ACPI PRM 支持
将其 H.265/HEVC 用户空间 API 提升到稳定状态
大量英特尔 DG2/Alchemist 和 AMD RDNA3 图形改进

但一些期待已久的内容,比如 Rust For Linux 的正式补丁尚未合并,增强性能的 MGLRU 工作也没有在这个版本中出现…… 也许会在 Linux 6.1 中合并。Linus Torvalds 还注意到最近出现的一些 Linux 内核崩溃,这些崩溃似乎是因为 VirtIO 合并,并且已经在解决中。有关该版本的详细改动,可在 Linux 6.0-rc1 公告中查看。

有意思的是,Linus 在发布公告中认真地解释了采用 Linux 6.0 版本号的原因,还提到了中国开发者对 “5.20” 版本号的建议:
尽管主要版本号发生了变化,但这个版本并没有一些革新性的内容。“分层” 编号系统的唯一原因是让版本号更容易记住和区分。这就是为什么每次在次版本号达到 20 左右时,我更喜欢增加主版本号,并重置次版本号的数字。在我决定把这个内核称为 6.0 之后,一些中国的开发者指出 “5.20” 是更好的版本号。如果你愿意把它叫做 “Linux 5.20”,也可以继续这么叫。因为内核版本号真的完全是虚构的,没有任何内在的意义。最近几周 Linux 内核邮件的讨论一直在交替使用 5.20 和 6.0 两个版本号,直到 Linus 最终决定采用 6.0 。

英特尔至强铂金 8380 的 Linux 6.0 测评:性能明显提升

在 Linux 6.0 的合并窗口接近尾声之际,科技网站 Phoronix 针对英特尔至强铂金 (Xeon Platinum) 8380 芯片做了一个初步的基准测试。“不仅 AMD EPYC 的性能在 Linux 6.0 中看起来非常好,而且许多调度器的变化和普通内核的改进也适用于英特尔的至强铂金 8380 'Ice Lake' 服务器处理器。”

本次所有的基准测试使用的都是英特尔至强铂金 8380 2P 服务器芯片,运行这些基准测试时使用了截至2022年8月9日的 Linux 5.19 stable 和 Linux 6.0 Git。并使用 Ubuntu Mainline Kernel PPA 访问了两个内核,“以便其他人轻松重现”。

测试环境如下:


测试结果表明,Linux 6.0 在 Intel Xeon Ice Lake 服务器上显示了一些不错的改进。与 AMD EPYC Linux 6.0 基准测试一样,PostgreSQL 在 Linux 6.0 上得到了很好的提升,其他一些数据库工作负载也是如此。



Apache Spark、ClickHouse、Apache Cassandra、RocksDB 以及 Nginx 等表现均朝着良好的方向发展。




此外,测试人员还增加了一个 SVT 视频编码性能测试,结果显示在 Linux 6.0 中也有所提高。这是迄今为止我在早期的 Linux 6.0 测试中从未在其他机器上看到的。


LAMMPS 是在 Xeon Ice Lake 上使用 Linux 6.0 显示出提升的 HPC 工作负载之一。


许多多线程工作负载在 Linux 6.0 中也得到了一些不错的改进。



总的来说,测试人员认为英特尔的 Xeon Platinum 8380 2P 将在 Linux 6.0 中实现不错的性能提升。Linux 6.0 对于 AMD 和英特尔的硬件来说,总体上看起来相当令人兴奋。

Linux 6.1 引入新功能,更容易辨认出故障的 CPU

对于多 CPU 同时运行的 Linux 生产环境(比如大型服务器),2022年8月下旬,Linux 6.1 新增了一个非常实用的功能:在出故障的时候,错误消息将通知你到底是哪个 CPU 出了问题。该功能来自 Linux 6.1 合并窗口的  x86/cpu 分支补丁:在出现分段错误(segfault)时,故障消息会打印出 “有嫌疑” 的 CPU 编号。

补丁作者 Rik van Riel 解释了该功能的开发动机和运作原理:
在足够大的计算机群中,通常会有几个坏的 CPU。一般情况下可以通过查看运行的内核代码来识别。如果存在有问题的 CPU,那内核代码在其他地方运行良好,而在某个故障的 CPU 内核上不断崩溃。然而这么多年来,出问题的 CPU 的故障模式是非常具体的,你可能在 bash、python 或各种系统守护程序中找到分段错误,然而故障消息不会告诉你是哪个 CPU 出了问题。现在我们将 printk () 添加到 show_signal_msg () ,就可以在分段错误时打印对应的 CPU、内核和套接字。

目前这个功能还不完美,可能出现误报的情况。因为从发生故障到输出对应的错误消息,任务可能会在另一个 CPU 上重新安排,导致报告的 CPU 编号出错。但它已经足以帮助人们识别出大部分有故障的 CPU 内核。

下面是一个功能示例:
segfault[1349]: segfault at 0 ip 000000000040113a sp 00007ffc6d32e360 error 4 in segfault[401000+1000] likely on CPU 0 (core 0, socket 0)

这个 printk 可以通过 /proc/sys/debug/exception-trace 来控制。据外媒 Phoronix 报道,该功能将在 10 月的 Linux 6.1 稳定版中正式启用。

关于 segfault:分段错误 / 段错误 / 段出错,是软件开发中经常会遇到的错误,也是 Linux 内核中最常见的 bug。该错误是由非法内存访问造成的,如空指针引用、在只读内存区域进行写操作、访问受保护的内存区域等。

新的 Linux 内核调度方法 Nest,可提高轻 - 中度负载的 CPU 性能

法国国家数字科学与技术研究所 Inria 的 Julia Lawall 在2022年9月中旬举行的  Linux Plumbers 大会 (LPC 2022) 上介绍了新的 Linux 内核调度方法 “Nest”, Nest 调度程序由 Inria  研究所、 oracle Labs 、悉尼大学合作开发。据  Julia 介绍称,Nest 调度程序可利用现代硬件 “将性能提高了 10%-2 倍,并且可以减少能源使用”。

现有的 Linux CFS 调度程序行为是将任务分散到机器的可用 CPU 内核上,Nest 采用了不同的方法。考虑到了启动长时间空闲的 CPU 内核可能会导致延迟,这些内核需要一段时间才能运行到更高的性能状态(更高的频率),而这段时间可能对当前的频率 / 功率预算产生负面影响 。而 Nest 的工作方式是尝试在启动空闲内核之前,将任务保留在一组已经以最高性能状态运行的 “暖内核”(warm cores)中。


Nest 还在其调度决策中考虑了父 / 上一个核心,以尝试在多插槽 CPU 的情况下改善局部性能。


Nest 开发组使用外媒 Phoronix 开源的 Phoronix 测试套件对各种工作负载进行基准测试,评估其调度决策的影响。


测试结果显示:在 1/2/4 插槽英特尔服务器,以及 AMD 服务器和台式机上, Nest 任务调度程序对轻型或中等工作负载产生 10% 到 2 倍的性能提升。对于已经充分利用 CPU 的多线程工作负载,Nest 任务调度程序并不能带来太多的提升,它比较适用于轻 - 中度工作负载。了解更多 Nest 任务调度程序信息,可以查看 LPC 2022 中的 Nest 调度程序介绍视频以及幻灯片(PDF)。

上面讲了算法来提升CPU性能,接下来链接《Linux 6.0 下Intel与AMD谁更强》,其中讲述了6.0内核的Linux在截止2022年9月最新上市的两大桌面CPU上相关测评;对比了英特尔酷睿 i9 12900K 和 AMD 锐龙 9 5950X,共进行了 415 项不同的基准测试,横跨许多不同的领域。


Linux 6.1 迎来 Btrfs 异步缓冲写入补丁大幅提升吞吐量

2022年9月下旬新出的 Btrfs  异步缓冲写入补丁可以提供两倍以上的吞吐量,该补丁目前正在 Btrfs for-next Git 存储库中排队,预计在 Linux 6.1 中合并。Btrfs 异步缓冲写入补丁邮件介绍了该补丁的信息:此补丁系列增加了在同时使用 btrfs 和 io 时对异步缓冲写入的支持。目前 io-uring 仅支持慢速路径中的缓冲写入(用于 btrfs),有了这个补丁系列,现在可以支持快速路径中的缓冲写入。

据外媒 Phoronix 介绍:Meta (Facebook) 工程师 Stefan Roesch 一直在开发补丁,以添加对 Btrfs 和 IO_uring 的异步缓冲写入的支持。这项工作的基准测试结果令人印象深刻:Roesch 评论了性能结果:io 深度在新补丁作用下将吞吐量提高到了两倍以上(与现有行为相比,缓冲写入由 io-worker 进程处理),且延迟也大大减少。如果要使用现有的代码实现相同或更好的性能,则需要 4倍 的 io 深度,而且进一步增加 io 深度无法带来更多改进。在 10 月初 Linux 6.1 合并窗口打开之前, Kdave 的 for-next Btrfs 分支中已经存在一大批优化补丁,本文所述的 Btrfs 异步缓冲写入补丁系列是主要特性。


Linux 6.0 正式发布

Linus Torvalds 已于2022年10月上旬发布 Linux 6.0 的稳定版本,随着 6.0 的稳定,Linux 6.1 合并窗口已打开。根据 Linus 的发布邮件, 6.0 版本总共有 15k 次非合并提交,属于提交数量较大的版本之一。 diffstat 由 drm 主导(主要是 AMD 新芯片支持)和网络驱动程序。 Linux 6.0 拥有许多新特性,从新的硬件支持到软件创新较大记录有:
Linux 6.0 引入 F2FS 低内存模式,用性能减少内存占用
Linux 6.0 为 LoongArch 架构启用 PCI 和其他功能支持
Linux 6.0 为 Arm64 添加 UEFI 镜像内存和 ACPI PRM 支持
Linux 6.0 将其 H.265/HEVC 用户空间 API 提升到稳定状态
Linux 6.0 合并大量 char/misc 代码,提供 Gaudi2 支持

Linus 还在 6.0 发布公告中调侃道:所以希望每个人都清楚,主要版本号的变化是因为我的手指和脚趾用完了,而不是任何重大的变化。


此外,在近日的英特尔创新大会上,Linus Torvalds 因其毕生的技术成就成为了英特尔创新奖的首位获得者。

Linux 6.1 在2022年10月的部分功能速记

合并 LoongArch EFI Boot

Linux 6.1 内核日前合并了大量 EFI(可扩展固件接口,Extensible Firmware Interface)的新特性代码。commit 信息显示,这些 EFI 新特性的代码包括 LoongArch EFI Boot,因此适用于 LoongArch 架构的 Linux 6.1 已准备好支持 LoongArch EFI Boot。这是继 8 月份的 UEFI 2.10 规范之后,正式增加对 LoongArch 处理器架构的支持。

虽然早在 Linux 5.19 就已合并龙芯 LoongArch CPU 架构,但初步支持阶段的功能非常有限,甚至缺少一些关键的设备驱动程序 —— 所以当时 Linux 5.19 暂未支持在搭载 LoongArch CPU 的设备上启动。不过 Linux 5.19 的状态至少足以解除 glibc LoongArch 主线的阻塞。从那时起,龙芯团队也一直在积极为 Linux 内核能够合并他们的代码到主线而继续努力。目前在 Linux 6.1 中,LoongArch 支持 EFI 引导。维护者在此过程中也对 Linux 的 EFI 代码进行了一些清理,并为将来使用 EFI 代码提供机密计算支持做准备。这个适用于 Linux 6.1 的 EFI pull 还包含通用压缩引导支持、将内核命令行 measure 到 TPM 以进行 measured boot 处理,以及多项其他改进。

Perf 新增 AMD CPU 内存报告和 Cache-To-Cache 功能

Linux 的 perf 内核子系统在 Linux 6.1 版本获得了一些新的 AMD CPU 功能,比较重要的是 perf mem(内存报告) 和 perf c2c(Cache-To-Cache) 两项功能,其中 perf mem 功能用于各种内存统计,而 perf c2c 功能用于统计 CPU 的缓存到缓存信息。使用带有新功能的 perf 工具,可以显示内存的 L1/L2/L3 缓存命中率、本地 RAM 命中率、远程 RAM 命中率、远程缓存命中、未缓存命中和其他类似指标。不过需要注意,最新的 perf c2c/mem 支持依赖于具有基于指令采样 (IBS) 支持的 AMD CPU。Linux 6.1 的 perf 子系统核心更改还包含其他功能和优化,比如 Intel PEBS TSC 时间戳集成、Intel Raptor Lake S CPU 支持、硬件断点改进和其他修复。在 Git PR 邮件中可以看到 perf 工具的所有改动,包含 AMD perf mem/c2c 的更新细节,以及对 perf lock/lock contention 的改进、Intel PT 改进和其他内容。

关于 perf

perf 是 Linux 系统的一款性能分析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的 CPU 占用率,从而定位性能瓶颈。Linux 内核的 perf 是一个基于内核的子系统,提供一个性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和软件(软件计数器、tracepoint)功能。通过 perf,应用程序可以利用 PMU、tracepoint 和内核中的计数器来进行性能统计。

将迎来 MGLRU 和 Maple Tree 支持

Andrew Morton 提交了大量针对 Linux 6.1 合并窗口的内存管理(简称 “MM”)代码。其中最值得注意的是多代 LRU “MGLRU” 页面回收策略和 Maple Tree 功能。多代 LRU “MGLRU” 由 Google 开发,可用于改进 Linux 内核的页面回收策略。MGLRU 已被证明能够为各种工作负载提供非常好的性能优势,尤其是在低内存设备面临高内存压力的情况下。Google 已经将 MGLRU 用于 Chrome OS 和 Android 13 ,并取得了不错的成效,该功能也被各种其他下游 Linux 使用。

2022 年 Linux Plumbers 大会也介绍了 MGLRU 功能,可以在这个 PDF 中找到。事实上,MGLRU 从 Linux 5.18 就开始进入了内核树中,但当时 Linus 以 “该功能未经全面测试” 为由拒绝合并该功能,针对该功能的测试一直持续到现在。Andrew Morton 评论了 MGLRU 补丁:Yu Zhao 的 Multi-Gen LRU 补丁也在这里。他们已经在 linux-next 中测试了几个月,据我所知,没有任何负面报告(或任何正面报告)。

内存管理的 PR 还包括 Oracle 开发的 Maple Tree 数据结构,作为虚拟内存地址的基于范围的重叠树,可以提供一些效率改进。其他内存管理补丁则包括 Kernel Memory Sanitizer (KMSAN) 发现的一些错误、NUMA 平衡内存分层模式的页面提升代码的增强、MEMCG 更新、VMA 合并改进、KASAN 更新、DAMON 清理和其他各种低级内核工作。

Linux 6.1 合并窗口的内存管理补丁完整列表可以通过这个拉取请求找到,如果 Linus 同意合并,MGLRU 应该是 2022 年最好的内核特性之一。

已彻底清除 a.out 代码

a.out 是一种文件格式,在旧版本的类 Unix 计算机操作系统中用于可执行文件、目标代码,以及在后来的系统中用于共享库,a.out 是 "assembler output" 的缩写。其实Linux只使用 a.out 到 1.2 版本(1995 年),而对 ELF 的支持则是最早于 1.1.52 内核中加入(实验性支持)。目前大多数类 Unix 系统都已改用 ELF 格式,不再采用 a.out 格式,在 2019 年的时候,Linux 内核弃用了对 a.out 支持。不过需要注意的是,当用户没有指定输出名称时,"a.out" 仍然是某些编译器和链接器创建的可执行文件的默认输出文件名,但这个文件仅有文件名为 "a.out",实际创建的文件并不是 a.out 格式(约定俗成的命名习惯)。在弃用这么久之后,从2022年年初开始,Linux 内核开发者就开始着手删除 a.out 相关的代码,现随着 Linux 6.1 的到来,之前没有完全清楚的 a.out 代码则是彻底被删除了(删除了大约 500 行相关的 a.out 代码)。此次代码清理也实现此前承诺的在 2022 年从 Linux 内核中删除所有 a.out 相关内容的目标。

Linux 发布 6.0.2、5.19.16 等版本,修复 WiFi 堆栈漏洞

2022年10月中旬发布了 5 个围绕 Linux WiFi 堆栈的安全漏洞的 CVE,这些漏洞可以利用无线网络通过恶意数据包来作恶。Linux 内核已发布针对 WiFi 堆栈漏洞的最新修复版本,分别是 6.0.2 , 5.19.16 , 5.15.74 , 5.10.148 和 5.4.218,这些版本带有最新的 WiFi 安全修复程序,分别为如下:
CVE-2022-41674:修复 cfg80211_update_notlisted_nontrans 中的 u8 溢出
CVE-2022-42719:wifi:mac80211:修复 MBSSID 解析 use-after-free
CVE-2022-42720:wifi:cfg80211:修复 BSS 引用计数错误
CVE-2022-42721:wifi:cfg80211:避免未传输的 BSS 列表损坏,列表损坏只会使其无限循环 (DOS)
CVE-2022-42722:wifi:mac80211:修复 P2P 设备信标保护中的崩溃,NULL ptr 取消引用崩溃 (DOS)

通过 oss-sec list 可进一步了解 WIFI 安全问题,Linux 6.1 也合并了该系列漏洞的修复补丁。

6.1 引入 VirtIO 块 “安全擦除”、vDPA 功能配置

Linux 6.1 在2022年10月中旬合并了 VirtIO 更改,Linux 6.1 在 VirtIO 方面值得注意的是块驱动程序 “virtio_blk” 引入了 “SECURE ERASE” 支持。

现在安全擦除功能已添加到 VirtIO 规范中,新引进的 VIRTIO_BLK_F_SECURE_ERASE 要求除了常规的 SSD “丢弃” 功能之外,所有可能通过垃圾收集创建的丢弃块(discarded blocks)也必须被擦除,底层块 / 存储驱动程序必须反过来支持这种安全擦除功能才能公开。通过 VirtIO 实现,安全擦除请求可从客户机传递到实际后端,以执行请求。

Linux 6.1 的 VirtIO 更新的另一个主要功能是支持 vDPA 功能配置:尝试允许通过 netlink 配置设备功能,实现 Virtio 功能在设备和驱动程序之间协商,允许像 vDPA 这样的中介层对驱动程序隐藏一些功能,以促进跨供应商实时迁移:
源上的 vDPA 支持功能集 X,目标上的 vDPA 支持功能集 Y

支持 vDPA 功能配置后,管理可以简单地为 vDPA 实例同时配置两者上的功能 (X + Y),使 vDPA 可以在具有不同功能支持的两个 vDPA 设备之间迁移。在 VirtIO 网络方面,Linux 6.1 引入了 9P 网络协议,允许主机和来宾之间更快的文件共享。

6.2版本的内核中的 Zstd 压缩算法更新到 1.5 版本

各种 Linux 内核组件都在使用 Zstandard(Zstd) 压缩算法,但内核中的 Zstd 代码远落后于上游,上一次更新内核中的 Zstd 代码还要追溯到一年前的 Linux 5.16,,当时将 Zstd 升级到 1.4.10。从 Linux 5.16 发布以后,Zstd 维护者 Nick Terrell 就积极从上游为 Linux 内核更新 Zstd 代码,让内核的 Zstd 实现更新到可以更接近上游、更易于维护。

2021年 9 月,Nick Terrell 分享他开发一个新的补丁系列,称自己将在下一个内核合并窗口把 Zstd 更新到最新的 1.5.x 版本。然而,因为测试失败和兼容性问题等种种原因,过了整整一年,该 Zstd 补丁集仍未合并到内核中, 内核的 Zstd 仍停留在 1.4.x 版本。就在2022年10月24日,Nick Terrell 发出了最新补丁集,将 Linux 内核的 Zstd 更新到最新的 1.5.2 版本,该系列补丁已进入 Linux 6.2 的队列中,等待相关的测试。

最新的上游 Zstd 版本是 v1.5.2,我将这个补丁定位到了 v6.2 内核。Zstd 将在今年晚些时候开发一个新的上游版本,如果团队已准备好 Linux 6.2 的合并窗口滚动,将在这个系列中添加另一个更新补丁。将把补丁合并到 zstd-next 分支中,该分支被拉入 linux-next 进行测试。如果测试没有问题,Linux 6.2 将获得更新的 ZSTD 版本,1.5.x 版本的 Zstd 性能比 1.4.x 强劲(具体可查看在 OpenBenchmarking 上关于 Zstd 压缩的基准测试)。

内核可能会移除对 i486 CPU 的支持

Linux 内核十年前移除对 i386 的支持后,i486 一直是内核主线对 x86 架构支持的最低版本。Linus 说道:“早在 2012 年就取消了对 i386 支持,也许 2022 年是时候取消支持 i486 了?”。Linus 认为大家应该 “咬紧牙关”,让 x86 架构 32 位 CPU 的最低支持版本提高到 "cmpxchg8b",即奔腾及更高版本。他表示,大多数(甚至是所有)发行版已经启用了 X86_PAE,这使得 X86_CMPXCHG64 成为基本要求的一部分。

事实上,早在一年前就已经开始讨论从内核移除 i486 支持。当时有一名开发者表示自己还在使用 i486 系统,并声称仍然有一些实际用途。但整体来看,在 i486 上运行现代发行版/内核的 Linux 用户极其罕见。所以 Linus 坚持要从内核放弃 i486 支持的想法。他认为 i486 硬件已经没有什么意义,虽然这些硬件仍然存在,但从内核开发的角度来看,这些工作没什么价值。他还指出,既然 i486 已经被视为可以在博物馆里展示的展品,不如让它们运行博物馆版本的内核。由于 Linux 6.1 可能会成为今年的 LTS 版本,因此 Linus 希望在 6.2 中继续推进该工作,移除对旧的 i486 的支持。

6.2 将默认启用 Btrfs Async Discard 功能

在固态硬盘上运行时, Linux 6.2 内核周期将默认打开 Btrfs 的异步丢弃( Async Discard )功能。两年前,Btrfs 引入了异步丢弃支持,用于将 SSD TRIM / 丢弃移动到事务提交。异步完成工作的效率更高,并有助于减少读取延迟。现在 Btrfs 开发人员计划默认启用它。在固态硬盘作为驱动器时,异步丢弃功能都会自动打开。

2022年10月下旬 SUSE 的 David Sterba 已将相关补丁添加到 Linux 6.2 合并窗口的 Btrfs for-next 分支中, 通过 “discard=async” 挂载选项打开该功能(可以通过设置 “async=nodiscard” 挂载选项来强制关闭该功能),该补丁预计会在 12 月实装。两年前 Fedora 就有相关提案,请求默认启用异步丢弃。当时该提案还指出,Facebook/Meta 一直在其消费者级硬件中默认使用此选项,获得了不错的成效。

微软贡献 Linux 内核代码,可运行多个 Windows

2022年11月上旬消息,微软为了扩展内核支持,为 Linux 内核提供了一系列的补丁,其中一个值得注意的地方是微软为 Linux 带来了运行嵌套监控程序(Hyper-V)或嵌套虚拟化的功能。这组补丁是由微软的 Linux 高级工程师 Jinank Jain 发出的,补丁说明如下:该系列补丁计划增加对运行嵌套式微软 Hypervisor(虚拟机监控程序) 的支持。在嵌套微软 Hypervisor 的情况下,有一些特权的 hypercalls 需要走 L0 Hypervisor(在物理硬件上运行的 Hyper-V 虚拟机监控程序) 而不是 L1 Hypervisor(在 Hyper-V 虚拟机中运行的嵌套虚拟机监控程序)。这个补丁系列基本上可以识别这样的 hypercalls,并用嵌套的 hypercalls 替换它们。补丁中包含的变化包括:
mshv: 增加对检测嵌套的 hypervisor 的支持
hv:在嵌套 root 分区的情况下设置 synic 寄存器
hv: 增加一个接口来执行嵌套的 hypercalls 超调用
hv: 为嵌套的 root 分区启用 vmbus 驱动
hv, mshv : 改变嵌套 root 分区的中断向量

Hyper-V 是 Microsoft 的硬件虚拟化产品。它允许你创建和运行一个称为虚拟机的计算机的软件版本。每个虚拟机都充当运行操作系统和程序的完整计算机。当需要计算资源时,虚拟机可让你更灵活,并且比在物理硬件上运行一个操作系统更高效地使用硬件。而嵌套虚拟化允许用户在一个 Hyper-V 虚拟机内运行 Hyper-V,与裸机相比,在虚拟机中运行时,Hypervisor 可以显著提高性能。可以通过使用 L0 Hypervisor 提供的启用接口,将 L1 Hypervisor 优化为在 Hyper-V VM 中运行。因此如果这个补丁能够成功合并,那么你就可以在 Linux 中运行一个以上的 Windows 实例,嵌套虚拟化这样的功能通常来说是为企业设计的,绝大多数的普通用户都用不上这样的功能。这个补丁仅有超过 100 行的新代码,如果代码审查顺利的话,这个嵌套的微软 hypervisor 支持可能会在 Linux 6.2 内核周期中合并进主线。

将弃用并删除 SLOB 内存分配器

2022年11月上旬消息,早在 Linux 2.6.23 版本,SLUB 内存分配器成为 Linux 内核的默认值。仅当 CONFIG_SLAB 标志被禁用时,内核才会回退到使用 SLOB 分配器。而据外媒 Phoronix 报道,Linux 内核开发人员正在考虑弃用并最终删除 SLOB 内存分配器。SLOB(simple list of blocks)分配器是 Linux 内核中三个可用的内存分配器之一。另外两个是 SLAB (slab allocator) 和 SLUB (the unqueued slab allocator)。SLOB 分配器被设计为仅需要很少的内存来实现和管理,常用于嵌入式系统等小型系统。

来自 SUSE 的 Vlastimil Babka 发送了弃用并删除 SLOB 的内核邮件,邮件中提到 SLOB、SLAB  三个内存分配器通同时维护,导致内核开发人员的负担太大。此外,SLOB 只有部分功能与分配器子集兼容,这也导致在 SLOB 功能上的开发要花费更多精力,间接阻塞了 API 的改进。但最大的问题还是 SLOB 的适用范围太小,它最初的设计主要是面向小内存设备的分配器,通过将所有对象放在一起处理来争取最小的内存占用。这也导致其 CPU 性能成本很大(锁定、缺乏 percpu 缓存、搜索可用空间等......),而且很容易被外部碎片严重影响,导致性能问题。现在内存已经不值钱了,硬件设备最低 RAM 都得来个 128 MB,SLOB 早已经过了发力的年代。

Vlastimil 在邮件中提到的是放弃 SLOB 和 SLAB 两个内存分配器,只留下 SLUB 。到目前为止,其他上游开发人员都赞成弃用和移除 SLOB,而移除 SLAB 可能需要更多时间。在接下来的几个版本, SLOB 将会被标记为损坏或声明弃用,最终被从内核源码树中剥离。

Linux 6.2 为 AArch64 实现动态 ShadowCallStack 支持

2022年11月中旬消息,使用 Clang 构建的 Linux 内核在 5.8 版本中已支持 ShadowCallStack (SCS)。ShadowCallStack 是一种 LLVM 插桩模式,可将函数的返回地址保存到非叶函数的函数 prolog 中单独分配的 ShadowCallStack,并从函数 epilog 中的 ShadowCallStack 加载返回地址,从而防止返回地址覆盖(比如堆栈缓冲区溢出)。返回地址也存储在常规堆栈中,以便与展开程序兼容,但除此之外就没有用处。这样可以确保攻击行为(修改常规堆栈上的返回地址)不会对程序控制流造成任何影响。

在 aarch64 上,此插桩机制使用 x18 寄存器来引用 ShadowCallStack,这意味着不必将对 ShadowCallStack 的引用存储在内存中。因此,实现的运行时可避免将 ShadowCallStack 地址暴露给能够读取任意内存的攻击者 。目前尚处于开发阶段的 Linux 6.2 正在实现动态 ShadowCallStack,以避免 SCS 在支持指针身份认证 (PAC) 的处理器上的开销。

正如上文所提到的,ShadowCallStack 对于防止返回地址覆盖(比如堆栈缓冲区溢出)很有用。但是在具有指针身份验证的 AArch64 处理器上,很难证明 SCS 的有用性。因此对于 Linux 6.2,计划启用动态 SCS 支持,允许它在启动时进行启用/禁用。此项动态 SCS 支持特性是在启动 / 运行时通过代码修补完成的。因此,对于那些由于其他硬件保护已经到位而不想为其 AArch64 SoC 提供此安全功能的用户来说,不需要禁用 SCS 的替代内核构建。通过 Clang 为 ARM64 实现动态 SCS 支持的代码如果没有出现任何问题,将在下个月提交到 Linux 6.2 合并窗口。

Red Hat 工程师开发新的 “Composefs” Linux 文件系统

红帽工程师 Alexander Larsso 与 Giuseppe Scrivano 于2022年11月宣布开发一个新的 Linux 内核文件系统 Composefs ,这是一个新的机会共享(opportunistically-sharing)和可验证的只读文件系统。简单来说,composefs 是一种构建和使用只读映像(read only images)的方法,这些映像的使用方式类似使用回环的 squashfs 映像。但除此之外,composefs 还有两个新的特性:它允许在映像之间共享文件数据(磁盘上和页面缓存中),其次它具有类似 dm-verity 的读取验证。

squashfs 是一套基于 Linux 内核的压缩只读文件系统,它可以将整个文件系统或者某个单一目录压缩成只读文件,然后存放在某个设备、分区或者普通的文件中。如果将该文件压缩到一个设备中,则可以将该映像 mount 起来使用,而如果它仅仅是个文件,则可以将其当成一个回环(loopback)设备使用。

目前 Composefs 有两个较为适合的初始用例,第一个是对 podman 容器层使用机会共享:使用 composefs 挂载作为覆盖挂载中的下层目录,上层目录是容器工作目录,Composefs 允许在任意两个映像之间自动共享文件级磁盘和页面缓存,而不受文件权限和时间戳、映像来源等细节的影响。其次是在 ostree 项目中使用 composefs 的验证特性。Ostree 使用内容寻址对象存储,但它目前被硬链接场引用。在下载时,对象存储和引用它的树会需要签名和验证,但运行时不会有验证。如果用指向现有对象存储的 composefs 映像替换硬链接场,则可以实现运行时验证。

现在有六个 RFC 补丁实现了 Composefs 的内核驱动程序,而 Composefs 的用户空间工具则在 GitHub 上的 composefs 仓库进行开发。

Linux 6.2 将支持 USB4 连接/断开唤醒系统功能

据phoronix于2022年12月上旬报道,Linux 6.2 将支持 USB4 连接/断开时唤醒系统,目前 Greg Kroah-Hartman 提交的补丁已合并到USB-next 中,将在下周 Linux 6.2 合并窗口开放后并入主线。该功能默认处于禁用状态,但可以通过支持 sysfs 的 USB4 接口下的新“wakeup”属性进行切换,不失为一个优化体验的小改进。此外,Linux 6.2 将支持英特尔锐炫独显、索尼 PS4 手柄,以及初步支持苹果 M1 Pro/Max/Ultra Mac 设备。

Linus Torvalds 宣布 Linux 6.1 内核系列正式发布

2022年12月中旬消息,Linux 6.1 内核系列集成了改进的页面回收代码的多代 LRU (MGLRU) 、初始的 Rust 语言支持(仍在构建中)、新的 AMD 平台管理框架、各种开源图形驱动程序改进、Btrfs 性能优化、Kernel Memory Sanitizer、Maple Tree 数据结构的引入以及许多其他硬件驱动程序工作:
初始的 Rust 基础设施已被合并到 Linux 6.1
Linux 6.1 内核合并面向 LoongArch 架构的 CPU 特性
Linux 6.1 将迎来 MGLRU 和 Maple Tree 支持
Linux 6.1 迎来 Btrfs 异步缓冲写入补丁,吞吐量翻倍
Linux 6.1 引入新功能,更容易辨认出故障的 CPU
Linux 6.1 引入 VirtIO 块 “安全擦除”、vDPA 功能配置
Linux 6.1 Perf 新增 AMD CPU 内存报告和 Cache-To-Cache 功能

另外公告中并没有提及 Linux 6.1 是否是 LTS 版本。按照 Linux 内核维护者 Greg Kroah-Hartman 的说法,Linux 内核的 LTS 通常会选取每年的最后一个内核版本(last kernel of the year),如今 Linux 6.1 赶在年末发布了,按照规矩它将会是 LTS 版本。但 Carl Dasantas 提出了不同的看法,他表示 Linux 6.0 或 5.19 更合适作为 LTS 版本。因为 Linux 6.1 有 Rust,很多社区都对 Rust 犹豫不决,如果有一个除了 5.15 之外不支持 Rust 的 LTS 会更好,可以让 LTS 过渡更加顺利。

Linux 6.2 获得一批新的 Rust 基础设施代码

Linux 6.1 合并了最初的 Rust 基础设施,已作为稳定版发布,其 Rust 支持仍处于初级阶段,没有任何面向最终用户的 Rust 功能。Linux 6.2 仍在补充 Rust 代码,据外媒 Phoronix 报道,负责 Rust For Linux 部分的内核开发者 Miguel Ojeda 已经向 Linux 6.2 合并窗口发出了一个新 PR,提供一批新的 Rust 基础代码。与 Linux 6.1 中的 Rust 支持类似,Linux 6.2 的 Rust 代码继续对 Rust 的内核构建提供更多功能,尚未引入任何新的 Rust 编写的硬件驱动程序,因此它对内核开发人员更有用。最新的 Rust for Linux 6.2 的补丁包括以下内容:
字符串和格式:新类型 `CString`、`CStr`、`BStr` 和 `Formatter`;新宏 “c_str!”、“b_str!” 和 “fmt!”。
错误:来自 errno-base.h 的其余错误代码,以及 Error 类型的一些 From 特性实现。
Printing:其余的 pr_*! 级别和后续的 pr_cont!,以及一个新样本。
alloc crate::RawVec 和 Vec 的新构造函数 try_with_capacity() 和 try_with_capacity_in()。
程序宏:新宏 #[vtable] 和 concat_idents!,以及为 module! 用户提供更好的人体工程学。
断言:新宏 static_assert!、build_error! 和 build_assert!,以及支持它们的新 crate build_error。
Vocabulary 类型:新类型 Opaque 和 Either。
调试:新宏 dbg!。

Linux 6.2 合并大量网络系统更新

2022年12月15日消息,Linux 6.2 合并窗口期内已经确认将会合并大量网络子系统更新。和以往版本相同,6.2 内核更新周期在网络功能上有大量的改进,更多的细节可以访问这条 pull。目前 Linux 6.2 合并的一些主要网络系统更新包括:
在 TCP 内核代码中实现了跨交换机链接的保护性负载平衡(Protective Load Balancing)。
TUN 网络驱动的速度从 10 Mbps 提升到 10 Gbps。
为支持 800Gbps 网络做好准备
新的有线硬件驱动支持包括 Marvell Octeon CNF95N 和 CCN10KB、Marvell Restera AC5X、WangXun 10 Gigabit、MotoComm YT8521、Microchip KSZ9563、Microsoft Azure Network Adapter 和 Linux Automation 10Base-TIL 适配器。
新的无线驱动工作包括启用联发科 WiFi 7 802.11be 设备和 Realtek rtw8821cu、rtw8822bu、rtw8822cu 和 rtw8723du USB 设备支持。
新的蓝牙硬件支持包括博通 BCM4377/4378/4387 芯片组和 Realtek RTL8852BE / RTL8723DS。
英特尔的 IWLWIFI 驱动程序启用了 WiFi 7 极高吞吐量(EHT)PHY 功能和 320 MHz 通道支持。
Realtek RTW89 WiFi 驱动程序现在支持 Wake-Over-WLAN 功能。
在先前内核基础上继续启用和部署 Wi-Fi 7
IPSec 代码增加了一个新的 "数据包卸载" 类型,以允许完整的报头处理和加密卸载。
支持桥接 MAC 认证旁路(MAB)。
支持用户定义的 BPF 对象。这用于最终允许开发者用 BPF 建立自己的数据结构,如链接列表。
优化 GRO 性能。

exFAT 内核驱动程序在6.2内核中获得了一批优化补丁,对使用 exFAT 文件系统的 SD 卡或 USB 闪存驱动器来说,创建文件和目录的速度比以前版本更快。exFAT 文件系统是由微软开发的 FAT32 文件系统的替代者,在整个电子行业中都得到了广泛应用,特别是 SD 卡、USB 闪存驱动、数码相机和 MP3 播放器。2019 年,微软公开了 exFAT 技术文档,并表示想将 exFAT 功能集成到 Linux 内核中。同年,在 Linux 内核 5.4 版本中,初步支持 exFAT 文件系统。

自进入 Linux 内核后,exFAT 文件系统便不断获得来自三星、索尼等电子供应商的优化,比如2022年 4 月索尼为 exFAT Linux 驱动提供了 73% 以上的性能改进。此次在 Linux 6.2 中对 exFAT 的优化同样来自来自索尼工程师 Yuezhang Mo ,主要是为空目录条目新增了提示,以避免重复遍历目录条目。此改进有助于降低 CPU 使用率,并在创建文件和目录时提高性能,尤其是在低端处理器上。对此次 exFAT 优化的测试配置是 i.MX6Q SoC + class-4 SD 卡,测试结果表示:在文件很少的情况下,文件创建速度提高了大约 14%。如果创建数千个文件,exFAT 性能优化可高达 50%。上述性能优化只是 Linux 6.2-rc1 的 exfat 优化补丁的一部分,其他更多优化项,如减少缓存大小、动态配置缓存项、优化参数设置等,可以在 exFAT 优化的 PR 邮件中细阅。

基于 Zstd v1.5 上游的新 Zstd 内核实现已合并到正在开发的 Linux 6.2 中,以便为从压缩固件到透明文件系统压缩的 Zstd 压缩/解压缩用例提供更好的性能和可靠性。Linux 内核已在多个模块使用了 Zstd,从透明文件系统压缩与 Btrfs 之类的数据压缩,到允许内核模块使用 Zstandard 算法进行压缩。据称,Linux 内核中的 Zstd 代码已经有一年没有更新了,使用的还是 Zstd 1.4.10,这比上游 Zstd 的更新进度晚了好几年。在 Linux 6.2 中,Zstd 内核代码已针对 v1.5.2 上游进行了更新,以便与 Facebook/Meta 维护的上游代码保持一致。对于使用 Zstandard 压缩算法的内核用户,这意味着他们能够使用更快的 Zstd 压缩/解压缩。

这项计划很早之前就已被提出,维护者最后在2022年12月才提交了 PR,Linus Torvalds 合并了该补丁。该 PR 依旧是由来自 Facebook 的 Zstd 维护者 Nick Terrell 完成,他一直积极从上游为 Linux 内核使用的 Zstd 更新代码。毫无疑问,使用新的 Zstd 实现能够为 Zstd 压缩的内核镜像和其他用户带来更好的性能。随着这个内核实现也以近乎自动的方式从上游 Zstd 代码生成,希望内核实现能够更好地针对其上游进行更新。

通过 ZRAM 支持多重压缩流

ZRAM 是内核的内存优化模块,先划定一片区域,然后将压缩过后的硬盘数据放入该区域,以实现高速读取。目前 Linux 6.2 已合并 ZRAM 中对多个压缩流的支持 ,作为内存管理相关补丁的一部分。Google 工程师一直致力于实现 ZRAM 中的多压缩流支持,似乎准备在 Chrome 操作系统上使用它。ZRAM 中的多压缩流支持在每个 CPU 的基础上处理多个压缩流,其主要思想是不同的压缩算法具有不同的特性,ZRAM 在使用算法组合时可能会从中受益,比如有些速度很快但压缩率较低的压缩算法,可以使用速度较慢但压缩率较高的辅助算法来减压。

根据 ZRAM 的文档介绍,此功能有几个用例:
1.大页面重新压缩:zstd 或 defalte 可以成功压缩大页面(在综合 ChromeOS 测试中约占大页面的 50%),lzo 无法压缩的 IOW 页面。
2.空闲页面重新压缩:空闲 / 冷页面位于内存中,如果我们重新压缩这些空闲页面,我们可能会减少 zsmalloc 内存使用。

用户空间有很多方法来控制 zram 重新压缩的行为和影响:应该重新压缩什么类型的页面、大小水印等,这使得 ZRAM 的压缩更灵活。合并最新补丁后,ZRAM 设备新增了 “recomp_algorithm” 和 “recompress” 两个 sysfs 属性,可以用来完成二级压缩算法的管理。启用 ZRAM_MULTI_COMP 选项的 ZRAM 设备最多允许支持四种不同的压缩算法。

Linux 6.0 生命周期结束

在2022年10月初,Linux 6.0 正式发布,当时新版本带来了非常多的新特性与功能,如 F2FS 低内存模式、在使用 XFS 和 io_uring 时的异步缓冲写入、对 RISC-V 和 AArch64(ARM64)硬件架构的改进,以及 Btrfs 和 OverlayFS 文件系统的新功能和改进等。不过 Linux 6.0 并非一个 LTS 长期支持版本,这意味着它只会获得几个月的维护性更新和支持。如今,随着 Linux 6.0.y 系列中的 6.0.19 的更新,6.0 系列也达到了生命周期的终点,该版本也是该系列的最后一个稳定版本。

2023年1月中旬,6.0.y 系列在 kernel.org 网站上已经被标记为 EOL(End of Life)。

内核维护者 Greg Kroah-Hartman 表示:我在此宣布 6.0.19 内核的发布。注意,这是最后一个 6.0.y 内核版本。因为这个分支现在已经达到生命周期结束,所有用户都需要在这个时候转移到 6.1.y 分支。

目前仍然在使用 Linux 6.0 内核系列的用户可以升级到最新的 Linux 6.1 系列,该系列目前已经更新到 6.1.5 版本,而且 6.1 系列还是长期支持版本,具有更长的更新维护周期。大多数滚动发布的 Linux 发行版,如 Arch Linux 或 openSUSE Tumbleweed 都已经在使用 6.1 系列的内核版本了。

Linux 提议将JFS文件系统弃用和删除

在2022年年初,SUSE 的开发者向 Linux 内核提交了一个 v2 补丁,该补丁将 ReiserFS 文件系统标记为已弃用,并将会在 2025 年从内核中正式删除它。删除的原因主要是过去十多年该文件系统都不再活跃,并且在现代内核的生产用例中也不太可能再使用。基于相近的原因,2023年1月中旬开发者也开始着眼讨论 Journaled File-System(JFS)文件系统是否还应该在内核中继续保留的问题。内核开发者 Christoph Hellwig 在邮件列表中表示:不久前,我们已经弃用了 ReiserFS,并计划将其删除。看着 JFS 中的代码,我想知道我们是否也应该这样做。虽然 JFS 不像 ReiserFS 那么复杂,但它的使用率也很低,而且从未成为任何主要发行版中的默认文件系统。

1990 年,IBM 为 AIX 3.1 开发了 JFS 文件系统(在系统崩溃或断电的情况下,这种文件系统可以更快地恢复),第二代则实现在开源后被移植到了 Linux。因此 JFS 在过去的二十多年时间里,一直存在于 Linux 中。如开发者 Christoph Hellwig 所说,JFS 并没有被广泛使用,也没有被任何著名的 Linux 发行版用于默认根文件系统,而且相比之下 EXT4/XFS/Btrfs/F2FS 这样的文件系统也更具有性能优势。JFS 未来的命运可能会跟 ReiserFS 一样,先被弃用,再最终从内核中删除。

Linux 6.1确认为长期支持(LTS)版本将支持到 2026 年 12 月

Linux Kernel 维护者 Greg Kroah-Hartman 于2023年2月上旬正式确认,Linux 6.1 成为 2022 年的长期支持(LTS)内核版本。Greg KH 表示原本计划在 12 月初推出 Linux 6.1 的时候,就将其作为 LTS 版本发布。不过当时他正在等待内核利益相关者对 Linux 6.1 的测试结果,因此搁置了相关事宜。他和共同维护者 Sasha Levin 终于收集到了足够多的积极回应,从而让开发者有信心将 Linux 6.1 维护为一个 LTS 系列版本。Linux 6.1 LTS 将会持续支持到 2026 年 12 月,比 Linux 5.15 LTS 多 2 个月时间。不过 Linux 团队后续可能会延长 Linux 6.1 的生命周期,延长到 2028 年。

Debian 开发者亲自维护以阻止内核移除 Itanium/IA64 架构

IA-64,又称英特尔安腾架构(Intel Itanium architecture),使用在 Itanium 处理器家族上的 64 位元指令集架构,由英特尔公司与惠普公司共同开发。使用这种架构的 CPU 包括 Itanium 和 Itanium 2。英特尔推出了两个 Itanium 家族:2001 年 6 月第一代 Itanium 处理器正式问世,Itanium 2 处理器则于 2002 年推出。Itanium 处理器最后一次更新是在 2017 年,推出了代号 Kittson 的 Itanium 9700 系列处理器。2019 年,英特尔发出公告宣布旗下 Itanium 系列处理器从 2019 年 1 月 30 日开始进入 EOL 周期;相关订单的最后接受日期设置在 2020 年 1 月 30 日,最后一批产品 Itanium 9700 处理器的出货日期则截至 2021 年 7 月 29 日。

因缺乏用户和维护者,Linux 内核开发者 Ard Biesheuvel 2023年2月提议从内核中删除对 Itanium/IA-64 的支持。“Linux 的 IA64 port 没有维护者。根据其仅剩的用户的报告,它在一个月前就出现了故障,但至今没有得到任何关注”。Ard Biesheuvel 认为,与其占用开发者宝贵的精力和时间来维护一个复杂但未使用的架构的生命力,还不如直接 “扔掉” 它。对此, Linus Torvalds 也发表了观点称,“我不是 IA64 架构的粉丝,但要彻底删除它还是有点令人难过。一般来说,它并不属于一个巨大的维护负担”。不过他也承认,如果该架构确实出现了问题,却没有任何人有时间和 / 或倾向去找出原因进行修复,那除了终止支持确实没有什么更好的替代方案。

按照这一趋势,Linux 内核放弃对 Itanium/IA-64 的支持似乎已八九不离十。但 Debian 开发者 John Paul Adrian Glaubitz 却在一片讨论声中站出来表示,自己肯定有时间来维护这一架构,因为这就是他目前在 Debian 中所做的工作。Adrian 解释称,由于精力被日常工作所分散,所以 “我只是还没有时间去完全调试 6.1 中引入的这个特殊的回归...... 我的计划是在接下来的周末继续调试这个问题,至少要找到引入该回归的 commit。我一直有一台 Itanium 服务器准备用来测试内核,我可以通过它内置的管理系统来进行远程启动和控制。”

Linux 6.2 已正式发布

Linus Torvalds 于2023年2月中旬发布了稳定的 Linux 6.2 内核,这是 2023 年的第一个主要内核版本。硬件方面,Linux 6.2 提升了 Intel Arc 显卡 (DG2/Alchemist) 的稳定性,真正做到开箱即用。英特尔的 On Demand 驱动程序现在状态良好,适用于第 4 代 Xeon 可扩展 “Sapphire Rapids” CPU。其次初步支持 NVIDIA GeForce RTX 30 系列 “Ampere” “使用 Nouveau 开源代码加速图形,Apple M1 Pro/M1 Max/M1 Ultra 支持已上游化。已合并深度呼叫跟踪,可帮助英特尔 Skylake 时代旧 PC 的性能,因为 Retbleed 比启用 IBRS 成本更低。其次还有各种文件系统驱动程序的改进、安全性改进等,参考以下:
将内核的 Zstd 压缩算法更新到 1.5.x 版本
将默认启用 Btrfs Async Discard 功能
获得对 Apple M1 Pro/Max/Ultra 硬件的主线支持
新补丁:让 Raspberry Pi 更好地支持 4K@60Hz 显示
为 AArch64 实现动态 ShadowCallStack 支持
已准备好引入计算加速器子系统
启用 “-funsigned-char”,所有 char 类型设为无符号
获得 exFAT 优化补丁,可更快创建文件和目录
内核合并了新的 Zstd 实现
通过 ZRAM 支持多重压缩流

Linux 6.3 大幅优化 Btrfs 性能

SUSE 的 David Sterba 2023年2月中旬提交了适用于 Linux 6.3 的 Btrfs 驱动程序更新。和以往 Linux 内核开发周期一样,本次的 Btrfs Pull 进一步优化了性能,并引入了一些新的功能。本次驱动更新为 Linux 6.3 中的 Btrfs 引入了块组分配类(block group allocation class)算法,通过按照大小来打包文件,避免在块组中出现碎片。6.2 中 Btrfs 改进了对 RAID5 和 RAID6 的可靠性,而在 6.3 中进一步展开代码清理和重构工作,以增强对上述两种 RAID 模式的支持。本次驱动 Pull 的主要内容:
send:utimes 缓存目录,并且仅在必要时发出命令
速度加快 10 倍
最终生成的流更小(不会发出多余的 utimes 命令)
不影响兼容性
fiemap:跳过共享 leaves 的 backref 检查
在所有共享 leaves 的示例文件系统上加速 3 倍(例如在某些 snapshot 上)
对 b-tree 键查找进行细节优化,加速元数据操作(样本测试:fs_mark 传输文件速度每秒提升 10%)。

Linux 6.2 正式增加对800Gbps和WiFi7的支持

基于Linux的操作系统通常出现在企业和电信公司使用的网络设备中,同时也被广泛用于云计算中。Linux内核本身是一个适合更大的Linux操作系统的组件,包括IBM的红帽、SUSE、Canonical和其他供应商提供商业支持的发行版。新的Linux内核的很大一部分是与网络有关的更新,该更新将作为下一代网络和电信设备发展的基础。在Linux 6.2的关键网络功能中,正式加入对800Gbps有线网络的初步支持,以及对新兴的WiFi7无线标准的支持。Linux 6.2内核还引入了一个保护性的负载平衡功能,可能会对减少网络流量拥堵产生重大影响。

Linux 6.3 引入 IPv4 "Big TCP",改进高速网络性能

Linux 6.3 内核的网络子系统获得了一批新的提交,除了一些常规网络驱动程序增强和新的有线/无线硬件支持,还包含了一项核心网络改进:引入 IPv4 的 BIG TCP。

2022年 Linux 内核支持了 IPv6 流量的 BIG TCP,BIG TCP 允许更大的 TSO/GRO 数据包,这大大提高了 IPv6 的传输性能,尤其是在 25~100 + Gbit 的网络空间中,升速的同时还降低了延迟。现在 IPv4 空间中也得到了同样的改进。IPv4 BIG TCP 补丁的基准测试显示了启用 BIG TCP 后的性能改进:

可以看到,BIG TCP 支持可以实现更好的网络吞吐量性能和更低的延迟,特别是在具有高速网络适配器的数据中心。而对于 IPv6 的 BIG TCP,Linux 6.3 内核还扩展了 Intel ICE 驱动程序,感兴趣可以在 Netdev 0x 15 演示稿中找到关于 BIG TCP 的更多背景信息。

Linux 6.3 还有大量其他的网络系统补丁,包括支持最低 WiFi 7 极高吞吐量(EHT)报告、WiFi 7 EH T 通道穿孔支持、删除静态 WEP 支持、s390 x 和 RISC-V 64 位硬件上的 BPF 支持、各种其他 BPF 增强功能等。驱动程序方面,Linux 6.3 有 NVIDIA BlueField 3 DPU 以太网支持、i.MX93 SoC 支持、高通 WiFi 7 设备支持(ath 12 k)和 Realtek RTL 8188 EU WiFi 适配器支持。

引入新的 SSDFS 文件系统,针对 ZNS SSD 进行优化


Linux 6.3 2023年3月上旬的补丁引入了 SSDFS 文件系统支持,这个新的开源文件系统特别针对 ZNS SSD (支持 NVMe 分区命名空间 (ZNS) 的固态硬盘)进行了优化。

ZNS (Zoned Namespaces)SSD 即分区命名空间固态硬盘,通过 NVMe 的新规范实现。ZNS SSD 将容量划分为 zone(分区),在 namespace(命名空间)里线性分布。每个 zone 可以按任意顺序读取,但必须按顺序写入,且在再一次写入前必须要先重置。此外,其 ZNS 命令集公开主机系统和 SSD 之间的分区块存储接口,允许更具优化的数据对齐。这些特性允许 ZNS SSD 改善其内部数据放置,通过降低 I/O 访问延迟、提高写吞吐量、更低的 QoS 和更大的容量来获得更高的性能。

尽管内核主线已存在 F2FS “闪存友好文件系统”,但从 SSDFS 的介绍来看,该文件系统特对支持 NVMe ZNS 的固态硬盘有特别的优化,比如通过消除垃圾收集的 “GC” 开销,延长 SSD 寿命 / 耐用性,且原生支持 ZNS SSD 和 SMR HDD 的严格 “仅附加模式”,保证强大的可靠性和稳定的性能。

SSDFS 已经开发了好几年,现在仍处于 “不完全稳定” 的状态,但其开发人员 Viacheslav Dubeyko 认为该文件系统已经准备好进入主线,接受更多来自社区的审查 / 反馈。与其他稳定的 Linux 文件系统相比,SSDFS 的基准测试结果相当优秀:目前 SSDFS 文件系统正在开发更多功能,包括快照支持、重复数据删除、共享字典功能、扩展属性、IOCTL 支持和其他项目,以及需要稳定 ZNS 支持和其他功能。

EXT4 文件系统在 Linux 6.3 中获得写入性能改进补丁

Ext4(第四代扩展文件系统)是 Linux 系统下的日志文件系统,目前该系统已趋于稳定,但在 Linux 6.3 合并窗口中再获得了一些直接 I/O 性能改进补丁,改进了写入速度。补丁来源于华为的工程师 Zhang Yi ,他在最新补丁中调整了 Linux 6.3 的 EXT4 系统,允许多个进程通过共享 inode 锁对预分配块执行直接 I/O 写入,而不需要独占锁。当多个进程不再独占 inode 锁,而是使用共享 inode 锁时,预分配的块会被覆盖,会对写入性能有显著的性能影响。

他在一块带 NVMe SSD 存储的 Intel Xeon Gold 服务器上使用 FIO 运行了一些多线程写入测试,测试结果显示,此更改对于 EXT4 DIO 的写入性能有较大提升:


除了针对多线程直接 I/O 的这个性能优化之外,Linux 6.3 中围绕 EXT4 的其他工作只有错误修复和清理。

修复了持续多年的 CPU 平衡算法问题

Linux 6.3 在2023年4月收到了一个 Linux CPU 调度程序修复补丁,修复了自 2019 年底以来一直存在于主线内核中的 “ CFS 调度器计算不平衡导致的整数溢出” 问题。该问题最先在英特尔至强可扩展 Sapphire Rapids 服务器上发现,自 2019 年 10 月被报告以来,一直存在于主线内核。当时报告该 Bug 的具体表现为:CFS 的重新平衡算法存在问题,kernel/sched/fair.c 中的 calculate_imbalance 函数可能由于整数溢出错误导致产生的结果不正确。该算法旨在将一些任务从最繁忙的组拉到本地组。但是当两个组都或将变得过载时,算法不会将本地组推到调度域的平均负载之上。而且在某些情况下,该平衡算法的计算可能是错误的,导致无意义的任务迁移,甚至放大不平衡。

Linaro 的 Vincent Guittot 已发送了一组修复补丁来处理该不平衡溢出问题。他解释说,“当本地组完全繁忙但其平均负载高于系统负载时,计算不平衡将溢出,本地组不是拉动此负载的最佳目标。”

该修复补丁已紧急进入 Linux 6.3-rc7 内核版本,具体解决方式是:如果本地组的负载超过平均系统负载,则不要尝试从本地组中拉出任何任务。一旦被主线采用,该补丁应该会被反向移植到最近的稳定 Linux 内核版本。

Linux 6.3 正式发布

Linus Torvalds 于2023年4月下旬发布了新的稳定版内核:Linux 6.3。他在公告写道:“这次发布很平静,上周也没什么意外。所以我们如期发布了 6.3 版本,准备好让你尽情享受。当然这并不意味着最近几周不会潜伏着一些令人讨厌的东西,但目前从表面上看,这一切都意味着一切都很好,这确实是一个很好的受控发布周期。”Linus 还表示,Linux 6.3 的发布意味着 6.4 的合并窗口将于明天打开,他说目前已经看到许多等待他拉取的 PR,并且希望明天能看到更多开发者的提交。Linux 6.3 的主要变化包括:
合并了更多 Rust 代码,即将推出第一个真正的 Rust 编写的 Linux 内核驱动程序
优化文件系统,例如更好的 EXT4 I/O 性能和单独的一些 Btrfs 优化
修复了一个英特尔千兆以太网适配器,该适配器在过去三年中一直停留在其最大速度的 60% 左右
支持更多 Meteor Lake、Zen 4 Auto IBRS
修复重要的 Btrfs 回归错误

Linux 6.4 将删除 SELinux 运行时禁用功能

2023年4月下旬消息,安全增强型 Linux(SELinux, Security Enhanced Linux)是一种采用安全架构的 Linux 系统,它能够让管理员更好地管控哪些人可以访问系统。它最初是作为 Linux 内核的一系列补丁,由美国国家安全局(NSA)利用 Linux 安全模块(LSM)开发而成。于 2000 年发布到开源社区,并于 2003 年集成到上游 Linux 内核中。SELinux 定义了每个人对系统上的应用、进程和文件的访问控制。利用安全策略(一组告知 SELinux 哪些能访问,哪些不能访问的规则)来强制执行策略所允许的访问。

此前,系统管理员可以通过编辑 /etc/selinux/config 设置 SELINUX=disabled 或写入 /sys/fs/selinux/disable 来关闭 SELinux 的功能。但这两种 SELinux 运行时禁用方法已经在之前的 Linux 内核版本被弃用了。如今在被弃用数年后,从 Linux 6.4 内核开始,SELinux 运行时禁用将被彻底删除。以后,要以简单且非侵入性的方式正确禁用 SELinux,管理员可以在引导 Linux 时将 selinux=0 作为内核参数传递,selinux=0 选项是禁用 SELinux 的公认方法;或者在构建 Linux 内核时切换 "CONFIG/_SECURITY/_SELINUX/_DISABLE" Kconfig 开关来实现。

删除 SELinux 运行时禁用的 PR 请求将在 Linux 6.4 合并窗口中被合并,更多详情可查看该补丁。

改善了 F2FS 和 Btrfs 文件系统

Linux 6.4 合并窗口于2023年4月下旬已收到 F2FS(闪存友好文件系统) 和 Btrfs 文件系统的优化补丁。

Btrfs 文件系统的主要改动是核心优化和代码清理,以及一些性能上的修复和两个目录日志记录的性能改进。代码清理主要是对 I/O 路径的清理、重写了清理的主循环代码,以解决现有代码跳转过多、碎片区 IOPS 效率低等问题。改进后的 Btrfs 清理代码速度提升大约 10% 。

性能改进方面,第一项是在事务中改进目录的日志更改,避免迭代项目并减少锁的争用(可使 fsync 时间降低 4 倍);第二项是在事务中记录目录条目时,通过检查树日志来减少子卷树的锁定(可提高吞吐量和并发访问子卷的延迟)。

F2FS 文件系统主要是一些驱动程序更新,新功能最重要的是支持分区设备的非二次幂区域大小,其次是垃圾收集器的代码重构、支持 I/O 轮询,以及各种不同的错误修复。

6.4 中还对 FSCRYPT 文件系统加密框架进行了各种清理和修复,已准备好在未来的内核版本中使用 CephFS 文件系统进行 FSCRYPT 加密。

有新的 Firewire IEEE-1394 维护者

Linux 的 Firewire 板块多年来一直没有太多活动,但在2023年4月下旬 Linux 内核出现了一个新的 Firewire 子系统维护者,他打算在未来六年内继续维护这个板块的驱动代码。

FireWire(火线)连接是以苹果公司开发的技术为基础发展而来的一种高速 I/O 技术,它可连接外围设备与计算机。该技术于 1995 年被正式接纳为 IEEE 1394 工业标准(FireWire 400)。火线确实有一些年头了,以往它引以为傲的高速传输技术(每秒 400 Mb)也被现在的  USB 和 Thunderbolt 碾压。毕竟 USB4v2.0 版本标准的传输速度高达 80 Gb/s。在内核动态上,IEEE-1394 “Firewire” 子系统多年来一直没有太多活动,除了一些有限的音频应用程序补丁之外,基本没见过 Firewire 硬件的消息。


但就在内核维护团队考虑放弃 Firewire 子系统时,一位名为 “Takashi Sakamoto” 的老哥站了出来。在 Linux 6.4 的第一个 Firewire 子系统 PR 中,他宣布将自愿维护并改进内核的 Firewire 子系统:接管了 Stefan Richter 的维护工作,计划处理几个项目;例如在工作队列上下文而不是 tasklet 中进行数据包处理。大家可能知道,IEEE 1394 技术已经过时。但仍然有用户在使用其,最好确保用户平稳过渡到其他类别的设备。在内核维护者邮件中,他进一步介绍了自己的工作计划:将代表维护者,为 FireWire 核心功能和 1394 OHCI 驱动程序,以及声音驱动程序工作。我的维护工作持续未来 6 年, 2026 年我将开始要求用户将他们的工作负载从 IEEE 1394 总线转移到现代的 USB 接口,然后在 2029 年辞去维护者的职务,并关闭 Linux 1394 项目。

目前的工作主要集中在面向分组的通信中的实时数据(采样数据)传输协议,对其他类型协议的实现提供的帮助较少。Linux 内核的 IEEE-1394 Firewire 代码将由这位哥们继续维护到 2029 年。到期之后,如果没有其他人对 Firewire 充满热情,那么它可能会从主线 Linux 内核中删除。


英特尔 LAM(Linear Address Masking :线性地址掩码)已合并到Linux 6.4


曾被 Linus 批评的LAM功能,终于于2023年5月上旬合并到 Linux 6.4 中。英特尔线性地址掩码 (LAM) 允许软件将 64 位线性地址的未转换地址位用于元数据,可用于用户空间内存清理和标记等元数据的多种用途。它的本质上类似于 AMD 的高位地址忽略 “UAI”(Upper Address Ignore )以及 Arm 的顶部字节忽略 “TBI”(Top-Bits-Ignore)功能。


英特尔在 2020 年初次对外展示 LAM,此后一直致力于为其提供 Linux 内核支持。Intel LAM 最初提交到了 Linux 6.2 合并窗口,但随后受到了 Linus 的严厉批评,从名称到功能设计等多方面批判了一番。在代码得到改进后, LAM 支持代码 再次作为 x86/mm 的一部分发送到了 Linux 6.4 的合并窗口。Linus Torvalds 在周五进行了 合并 ,拉取了英特尔工程师提交的 LAM 启用代码(尽管 Linus 个人仍然不喜欢该功能的名称)。

这次 Linus 没有对 LAM 的代码提出任何根本性的反对意见,但他最后自己 写了一个新补丁 ,使 access_ok () 独立于 LAM,因为他不喜欢这个设计。


Linux Kernel 6.2生命周期结束

2023年5月18日消息,Linux Kernel 6.2 生命周期结束,开发者敦促用户升级到 Linux Kernel 6.3。Linux 6.3 已经是 Arch Linux 和 openSUSE Tumbleweed 中的默认内核,而且它很快就会出现在 Fedora Linux 中。

kernel.org 网站已将 Linux 内核 6.2 系列标记为 EOL(生命周期结束),这意味着它将不再支持错误 Bug 和安全修复。在 2023 年 2 月,Linux 内核 6.2 推出了新功能,包括 IPv6 堆栈保护性负载平衡 (PLB)、用于 x86 的新 FineIBT 控制流完整性机制、对英特尔“异步退出通知”机制的支持,以及更多 Rust 基础设施。

作为一个短暂的内核分支,Linux 6.2 现在已经结束生命周期 (EOL),内核开发人员和维护者 Greg Kroah-Hartman 今天发布了 Linux 6.2.16,并敦促用户尽快升级到最新的 Linux 6.3 内核系列。因此使用 Linux 6.2 内核系列的 GNU / Linux 发行版预计很快将升级到最新的 Linux 6.3 内核系列。大多数滚动发布的发行版,如 Arch Linux 或 openSUSE Tumbleweed,以及它们的一些衍生产品,已经在使用 Linux 内核 6.3 系列。6.3 于 2023 年 4 月发布,新功能包括新的英特尔 VPU DRM 加速驱动程序、对 IPv4 的 BIG TCP 支持、对 x86_64 user-mode Linux 的 Rust 代码支持、对 RISC-V 内核“ZBB”位操作扩展支持和原生 Steam Deck 控制器支持。

需要注意的是,Linux 内核 6.3 也不是 LTS(长期支持)系列,预计将于 7 月底结束生命周期,届时将被敦促升级到新的 Linux 6.4 系列 —— 预计将于 2023 年 6 月底或 7 月初面世。


6.3 出现 XFS 文件系统崩溃问题

2023年5月下旬消息,Linux 6.3 的反向移植补丁似乎导致 XFS 出现了元数据损坏问题。多个 Red Hat BugZilla 报告了这一 Bug:升级到 Linux 6.3 稳定内核 时, XFS 文件系统可能因元数据损坏问题而崩溃。在基于 XFS 的服务器上运行 Linux 6.3 会导致服务器不断崩溃。Debian 用户也报告了类似的 XFS with Linux 6.3 问题。

Linux 6.4 内核对于一些受影响的用户来说仍然算运行良好,这使得一些补丁看起来可以向后移植到较新的 Linux 6.3 点版本。但 XFS 的补丁对 Linux 6.3 的反向移植明显出现了问题。参与维护内核构建的 Red Hat 开发人员正在等待更多报告/测试,以便努力追踪问题。目前唯一的建议就是,使用 XFS 的用户不要更新到 Linux 6.3 内核系列。

5月30日消息,使用 XFS 文件系统的用户上周反馈,在升级到 Linux 6.3.3 维护版本更新之后,出现了元数据故障。内核开发人员近日发布动态更新,表示已锁定该问题原因,是由于更新中删除了一行代码,导致缺少相应补丁导致。


Red Hat 的 XFS 开发人员 Dave Chinner 上周六(5月27日)发布补丁,为那些受 XFS 元数据损坏困扰的用户提供帮助。Chinner 表示:“这个补丁只是修复了 XFS 文件系统在 stripe 上的 livelock。猜测是在某些情况下,这个问题在分配 livelock 上不会出现重复失败的情况,而是损坏的映射返回到 writeback 代码,从而误导 writeback IO”。该错误修复只是修复了 stripe aligned filesystems 上的活锁。目前包含该补丁的 Linux 6.3 构建正在并入 Fedora 37 和 38 测试库的途中;补丁也或将在未来几天内进入一个新的上游 Linux 6.3 point release。


英特尔为内核提交了 Key Locker 补丁

英特尔的开源工程师自 2020 年起一直致力于为 Linux 实现 Key Locker 支持,2023年5月下旬已发布第七版补丁。

Intel Key Locker 允许使用 AES 密钥加密/解密数据,而无需访问原始 / 实际密钥。 AES 密钥被转换为带有 Intel Key Locker 的句柄,然后可用于在该系统上执行加密/解密,直到被撤销或系统状态发生变化。


在4月初的第六版补丁遇到重大性能问题后,Linux 上的 Intel Key Locker 工作暂时中断。随着问题的解决,在过去的一个月里,围绕 Linux 内核对 Intel Key Locker 的支持的工作有所增加。


Intel Key Locker performance on Raptor Lake

英特尔工程师在5月24日发布了 Linux Key Locker 的第七次迭代补丁,除了修复了此前出现的性能问题,还解决了上个月补丁所有审查意见和反馈。有了待定的补丁,Intel Key Locker 支持将在功能强大的 Intel 处理器上可用,如果希望在启动时强制关闭  Key Locker 支持,以进行调试/测试,补丁也引入“nokeylocker” 内核命令行选项,暂时关闭 Key Locker 功能。


Linux 6.3.5 修复 XFS 元数据损坏问题

内核维护者 Greg Kroah-Hartman 在2023年5月30日发布了 Linux 6.3.5 版本,以及  LTS 内核版本的 5.15.114、5.10.181、5.4.244、4.9.284 和 4.4.316 版本。这些版本主要是修复了一个困扰 Linux 6.3 版本的 XFS 元数据损坏 Bug,并将此修复向后移植。

Linux 6.3 版本的 XFS 文件系统有时会因元数据损坏问题而崩溃,在基于 XFS 的服务器上运行 Linux 6.3 ,会导致服务器不断崩溃。除了这个 XFS 修复之外,6.3.5 版本中还有常见的其他错误/回归修复。


AMD 提交 Linux 新技术 FreeSync Panel Replay,降低屏幕静止时的功耗

AMD 在2023年6月发布了一系列补丁,为其 AMDGPU Linux 内核显卡驱动程序的显示代码 “DC” 添加了一个新功能:FreeSync Panel Replay。这个功能针对搭载 DCN v3.1.4 显示块或更新版本的 AMD Ryzen 笔记本电脑,可以在屏幕内容不变时降低功耗。目前,现代笔记本电脑已经有了像面板自刷新(PSR)这样的省电技术,可以在屏幕内容静止时减少功耗。但是 FreeSync Panel Replay 是一种新的技术,只有在 Display Core Next 3.1.4 + 硬件上才能使用,而且不能与 PSR 同时激活。AMD 认为这个新功能比 PSR 更优越,因为它可以保持源和接收器的同步,从而在退出模式时降低延迟,可以处理更多的使用场景,并且可以更容易地控制接收器的刷新率。在补丁的说明中这样描述 FreeSync Panel Replay:

在某些情况下,GPU 在没有任何更新或变化的情况下向接收器重复发送相同的帧。这些重复的传输是浪费的,在系统的不同方面导致了功耗:
1. DCN 从 DF/UMC/DRAM 中获取一帧数据。这种内存流量阻止了这条硬件路径部分的掉电。
2. GPU 通过 DisplayPort 接口的主链路向显示器传输像素数据。这阻止了源发射器(TX)和接收器(RX)的掉电

目前还不清楚 FreeSync Panel Replay 相比 PSR 能够节省多少功耗。在看到这些补丁之前,我还没有听说过 AMD 提及过这个功能,也没有在搜索引擎中找到任何相关结果。这个补丁系列大约有一千行新代码。不过由于这些补丁提交的时间点,它们预计要到今年晚些时候至少 v6.6 内核周期才能被合并到主线,补丁地址在此。

除了发布这个新功能外,AMD 还为 Linux 发布了最新版本的 Radeon™ Software。该软件支持 Ubuntu 20.04、RHEL 8.2 等操作系统,并提供了 AMDGPU All-Open 和 AMDGPU-Pro 两种驱动程序选项。

6.4版内核发布:初步支持苹果 M2 芯片

2023年6月26日消息,Linux 6.4 内核已正式发布,这次更新带来了许多改进,比如对苹果 M2 芯片的初步支持、存储性能的提升、传感器监控的改善,以及更多的 Rust 代码。虽然这对于普通用户来说不是一个重大的升级,但是对于那些想要利用更好的硬件/软件支持的用户来说,是一个值得关注的版本。值得注意的是,这是一个非长期支持(non-LTS)版本,所以并不是每个人都需要升级到这个版本,除非他们遇到了这个内核版本能够解决的特定问题。这次更新改进如下:
对苹果 M2 芯片的初步支持
传感器监控的改善
AMD P-State 引导自主模式
存储性能的提升

对苹果 M2 芯片的初步支持
6.4 内核对苹果的 M2 系统级芯片(SoC)提供了初步支持,并且添加了当前 MacBook Air、Pro 和 Mac Mini 系统的设备树文件。但是还存在一些问题,例如苹果 M2 Mac Mini 无法显示输出,以及不支持新款苹果笔记本电脑键盘和触摸板,可以期待在6.5 内核到来时,这些问题会得到更好的解决。

传感器监控的改善
跟上一个内核版本类似,Linux 6.4 内核为超过 100 款华硕主板提供了传感器监控功能,这些主板包括了英特尔和 AMD 两种平台。PRIME、ROG、TUF、Pro、ProArt 等系列都在支持范围之内。

AMD P-State 引导自主模式
经过多次努力,AMD 引导自主模式终于被集成到了 Linux 内核中,这为 AMD EPYC 和 AMD Ryzen 处理器带来了更好的性能和功耗效率。

存储性能的提升
6.4 内核还带来了不少存储方面的改进,包括:
- 对 EROFS 文件系统进行了优化,现在允许使用子页块支持,这与 AArch64 架构很匹配。
- 对 EXT4 文件系统进行了各种性能优化,以及对 NTFS 文件系统进行了一些小调整,现在取消了“无访问规则”的选项。
- 此外,Btrfs 和 F2FS 文件系统也得到了一些非常不错的增强,为不同的使用场景带来了性能的提升。

其他的改进和修复
除了上面提到的改进,还有一些值得一提的变化,比如:
- 支持 Intel 线性地址屏蔽功能。
- 停止支持 Intel Thunder Bay。
- 对 LoongArch 进行了各种优化。
- 支持 Intel Lunar Lake 高清音频。
- 提升了 VDUSE 的性能。

6.5 添加对 USB4 v2 协议的初始支持

2023年7月上旬的内核补丁显示,英特尔正在为 Linux 6.5 内核提供对 USB4 v2 的初步支持,并在其新的英特尔 Barlow Ridge 离散控制器上进行初步启用。2022年USB4 v2.0 规范作为 USB4 标准的下一代版本发布。USB4 v2 可通过 USB Type-C 线支持 80 Gbps 的传输速率。USB4 2.0 标准向后兼容第一代 USB4,以及更旧的 USB 3.2、USB 2.0 和 Thunderbolt 3。且硬件无需更新,使用现有的 USB4 电缆即可实现 USB4 2.0 的性能。

初始支持包括 80G 对称链路支持、在 v2 模式下启动路由器所需的位、自适应 TMU 处理、PCIe 扩展封装、DisplayPort 2.x 隧道支持和 CL2 低功耗链路状态处理。120G 和 80G 链路支持以及其他更改即将推出。补丁中并没有关于 Barlow Ridge 的太多介绍,似乎是英特尔即将推出的 USB v2 专用控制器。

对 Linux 的 USB4 v2 支持已作为 Linux 6.5 USB PR 的一部分发送,该 PR 还添加了新的 Qualcomm PMIC Type-C 驱动程序、NVIDIA Tegra 流协议支持、CDNS2 小工具驱动程序以及许多其他更新。

Linux内核6.3生命周期结束

在kernel.org网站上Linux 6.3内核系列已经于2023年7月下旬被标记为EOL(生命周期结束),这意味着它将不再支持错误和安全修复,与 6.3内核系列说再见的时刻已经到来。早些时候,知名的Linux内核维护者Greg Kroah-Hartman宣布发布Linux内核6.3.13,这是Linux 6.3内核系列的第13次维护更新,这次更新带来了相当多的变化(481个文件被修改,4919个文件被插入,2870个文件被删除)。不过他也在kernel.org网站上将Linux内核6.3系列标记为EOL(生命周期结束),指出Linux内核6.3.13是该系列的最后一次更新,并敦促用户尽快将Linux系统升级到最新的Linux 6.4内核。

“我在此宣布6.3.13内核的发布。所有6.3内核系列的用户都必须升级,”Greg Kroah-Hartman在邮件列表公告中说。”请注意,这是6.3.y内核的最后一次发布。它现在已经报废,请在此时转移到6.4.y内核分支”。
Linux kernel 6.3在两个半月前,也就是2023年4月23日发布,它引入了一些新特性,如针对Intel VPU的新DRM加速驱动、针对x86_64用户模式Linux的Rust代码支持、针对NFS文件系统的基于AES-SHA2的加密,以及对AMD “自动IBRS “特性的支持。另一方面,Linux 6.4引入了更多新特性,如英特尔LAM支持、用户跟踪事件、F2FS文件系统的分区块设备支持、额外的Rust语言代码、大量更新和新驱动程序以提供一流的硬件支持等等。

有鉴于此,如果所使用的GNU/Linux发行版运行的内核是Linux 6.3,需要让你的发行版维护者将内核包升级到Linux 6.4。Arch Linux用户已经获得了更新,看起来openSUSE Tumbleweed和Fedora Linux用户也即将获得更新。不过,Linux kernel 6.4也是一个昙花一现的分支,只会支持2-3个月,可能到2023年9月中旬或下旬,所以需要长期支持就请升级到LTS内核之一。

龙芯为 Linux 6.6 内核积极实现更多功能以支持 LoongArch 架构

龙芯正在为 LoongArch 架构开发龙芯二进制翻译功能 (Loongson Binary Translationm, LBT),以便在该架构上进行 MIPS /x86 / Arm 二进制翻译。除此之外,LoongArch 的其他功能现在也计划添加到即将到来的 Linux 6.6 内核。

据科技媒体 Phoronix 在2023年8月上旬的报道,除了将在 Linux 6.6 中推出 Loongson 二进制翻译的内核侧功能外,LoongArch SIMD 相关的工作还包括在内核中启用 LSX 和 LASX。Linux 6.5 已初步支持 LSX 和 LASX SIMD。Linux 6.6 包含针对 SIMD 优化的 XOR 例程、SIMD 恢复、SIMD 综合征计算和其他相关添加功能。在 Linux 6.6 中,龙芯还为 LoongArch 架构实现了一些通用的 Linux 内核功能。这些工作包括 KFENCE 支持、Kernel Sanitizer 支持、Kcov 覆盖率支持和其他内核改进。

Linus 亲自 Review 代码以平息关于 Bcachefs 文件系统驱动的 “内耗”

据科技媒体 Phoronix 的报道,开发已久的 Bcachefs 文件系统驱动程序已提交到 Linux 6.5,但由于各种技术问题和开发者的 “内耖”,此驱动程序并没有在该开发周期内合并。

Bcachefs 是一个写时复制(CoW)的文件系统,其源自于 Linux 内核的块缓存 Bcache。几个月前,Bcachefs 的补丁集已正式递交审查,有望被纳入内核。开发者希望能提供类似 XFS/EXT4 的性能,以及类似 Btrfs 和 ZFS 的特性。其主要开发者表示 Bcachefs 的特性 “多到无法列出”,而已知错误也是 “多到无法列出”。

2023年7月,Linux 内核开发者就 “Bcachefs 文件系统驱动程序”在邮件列表展开了激励的讨论,气氛也逐渐变得剑拔弩张(出现了许多不友好的信息)。但这种变化并不是来源于文件系统本身,而是内核模块本身之外所需的代码更改。现Linus Torvalds本人已经开始亲自 review 所提交的代码,并就相关情况发表了自己的看法。他于8月9日完成了对 Bcachefs 代码的 review。他表达了对部分锁定代码 (locking code) 的担忧,并认为 Bcachefs 的部分先决代码应通过各自的子系统/维护者分支进入,而不是放到大的 PR 里面。

总的来说,Linus 对 Bcachefs 合并状态的立场基本上可以归结为:
目前的情况是,bcachefs 本身之外的东西我并不反对。
只关心 bcachefs 内部的东西,因为我非常非常希望有人能够查看这六个锁,但同时,只要这些东西纯粹是 bcachefs 内部的,不会影响其他任何东西,我就不会太担心。
实际上,最让我困扰的是我所看到的个人论点。我不知道该怎么办。由于 Christian 的反对,我其实并不想合并这个,因为我们有一个负责任的 vfs 维护者。
因此即使不考虑"我认为先决条件应该单独加入,或者至少明确注明" 的问题,这些争论也必须得到解决。

Bcachefs 首席开发者 Kent Overstreet 表示将重新提交到 Linux 6.6,因此不妨拭目以待 Bcachefs 问题和开发者的争论是否能在未来几周内降温。

Orange Pi 5 支持接近主线 Linux 内核

为使 Orange Pi 5 64 位 ARM 单板计算机(SBC)能在上游 Linux 内核上运行而添加的 DeviceTree 补丁正逐步接近主线。2023年8月中旬发布 v2 补丁添加了对其的初步支持。目前这些补丁仍在审核中,新的 v2 补丁还提出了一些其他问题,但或许在不久之后,Orange Pi 5 就能在上游内核上运行。v2 的变化如下:
修复 CHECK_DTBS 警告并将 dtb 添加到 makefile。
从 sfc 节点中删除指定 assigned-clock-rates 并修复错误的中断属性。
删除不存在的 adc 按钮并添加按钮恢复。
删除 backlight_1、backlight、vcc12v_dcin、vcc5v0_usbdcin、vcc5v0_usb、combophy_avdd0v85、combophy_avdd1v8、sata0、u2phy0、u2phy0_otg 节点。
将 vcc3v3_pcie2x1l2 重命名为 vcc3v3_pcie20,将 vbus5v0_typec 重命名为 vbus_typec。
从 vcc_3v3_sd_s0 和 vcc3v3_pcie20 中删除 regulator-always-on 属性。

Orange Pi 5 采用了瑞芯微 RK3588S 新一代八核 64 位处理器,具体为四核 A76 + 四核 A55,采用了 8nm 工艺设计,主频最高可达 2.4GHz,集成 ARM Mali-G610 MP4 GPU,内嵌高性能 3D 和 2D 图像加速模块,内置高达 6 Tops 算力的 AI 加速器 NPU,拥有 4GB/8GB/16GB/32GB(LPDDR4/4x),具有高达 8K 显示处理能力。其引用了相当丰富的接口,包括 HDMI 输出、GPIO 接口、Type-C、M.2 PCIe2.0、千兆网口、2 个 USB2.0,1 个 USB3.0 等;可广泛适用于高端平板、边缘计算、人工智能、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT 各个行业。 Orange Pi 5 支持 Orange Pi 官方研发的操作系统 Orange Pi OS,同时,支持 Android12 、Debian11 等操作系统。

Linux 6.6 中将 NSA SELinux 去品牌化为 SELinux

安全增强型 Linux (Security-Enhanced Linux,SELinux) 是一个 Linux 内核模块,也是 Linux 的一个安全子系统;提供了一个实施访问控制安全策略的安全模块,现在已被广泛用于增强生产型 Linux 服务器和其他系统的安全性。根据介绍,SELinux 主要由美国国家安全局 (NSA) 开发。该机构参与了 SELinux 的原始代码工作,是主要的原始开发者,且一直在为 SELinux 做贡献。但鉴于近些年 NSA 频繁曝出的丑闻消息,一些开源爱好者对 NSA 参与 SELinux 提出了诸多质疑与批评。

时至今日,随着 SELinux 采用率的不断提高,已经陆续涌入了许多个人和组织贡献者。虽然仍有 NSA 的开发人员参与 SELinux,但从 Linux 6.6 开始,有关 "NSA" 的 references 将被取消。2023年8月下旬提交的 SELinux 拉取请求包括了添加虚拟内存是否默认可执行的通知、新的网络审计助手、改进各种防御等内容。同时,其中还提到了一个 “较小的行政变更”,即:

Stephen Smalley 更新了他的电子邮件地址,并将 SELinux 从 “NSA SELinux” 去品牌化为 "SELinux"...... 我认为 SELinux 目前已经成为一个真正的社区项目,因此去掉 NSA 品牌是合情合理的。将 Kconfig 帮助文本和注释中的 "NSA SELinux" 更改为 "SELinux"。虽然 NSA 是 SELinux 的最初主要开发者,并继续帮助维护 SELinux,但 SELinux 早已过渡到一个由开发者和维护者组成的广泛社区。SELinux 成为主线 Linux 内核的一部分已有近 20 年的时间,并得到了许多个人和组织的贡献。

6.6 版本将增强防御,遏制 NVIDIA 闭源驱动的不正当行为

Linux 内核开发团队于2023年8月下旬宣布,即将发布的 Linux 6.6 版本将增强内核模块机制,以更好地防御 NVIDIA 闭源驱动的不正当行为。

开发者 Christoph Hellwig 发现 NVIDIA 最近通过将专有模块中的符号导入声称为 GPL 许可的模块,然后重新导出这些符号的方式,规避了 2020 年添加到内核中的防护措施。该防护措施旨在防止专有模块使用仅 GPL 许可的符号。

鉴于 symbol_get 本来就只打算用于紧密协作的模块间使用非常内部的符号,限制它只能用于 EXPORT_SYMBOL_GPL 导出的符号是合理的,也可以避免 NVIDIA 通过 DMCA 绕过访问控制措施的昂贵诉讼。

Linux 6.6 版本将只允许 symbol_get 获得 EXPORT_SYMBOL_GPL 模块的符号,以防御 NVIDIA 的规避行为。这将增强内核对专有模块只使用开源符号的保护。

2020 年第一个防护措施添加时,NVIDIA 就建议用户避免使用 Linux 5.9,后来他们在几周内发布了支持的驱动程序。这次 Linux 6.6 版本对其内核驱动程序的阻碍会持续多长时间,我们拭目以待。至少 NVIDIA 自去年开始已经在维护开源的 GPU 内核驱动程序,可以作为其专有内核驱动的替代选择。

这一改进体现了开源社区保护 GPL 许可证完整性的决心。开源驱动对用户来说无疑是更好的选择。我们期待未来内核的改进能进一步限制专有驱动的非正当行为,维护开源社区的权益。

AMD 开源 GPU 内核驱动的代码行数超 500 万

科技媒体 Phoronix 于 2023年9 月初对 AMD 的 Linux 内核图形驱动程序代码进行了一些 cloc 统计,尤其是 drivers/gpu/drm/amd/ 模块,这些模块包含了围绕 AMDGPU DRM 驱动程序的现代代码,其中包括 AMDKFD 计算、用于显示的代码、通用头文件等(但不包括 drivers/gpu/drm/radeon/ 中的旧版 "Radeon" 驱动程序)。

据统计,开源 AMD Linux 内核图形驱动程序的代码行数超过 500 万:当然大部分是自动生成的头文件,其中很大一部分是 AMD 在每一代/每一个给定区块的新版本中不断引入新的自动生成头文件。这些冗长的头文件已成为 AMD 为其 GPU 创建详尽的公共文档的替代方案。与此同时,英伟达的开源 "Nouveau" 驱动程序大约有 20 多万行(2 万多空行、2.4 万行注释和 15.5 万行代码)。英特尔 i915 DRM 内核图形驱动程序通过相同的 cloc 统计,约为 38.1 万行。

上面提到的只是内核图形驱动程序代码,还不包括 Mesa 中用于提供 OpenGL 和 Vulkan 驱动程序支持或其他用户空间组件的所有代码。截至2023年9月,整个 Linux 内核源代码树大约有 3480 万行,包括文档、各种树内实用程序/工具、其他辅助工具等。

ReiserFS 正式宣布 “过时”

Linux 6.6 周期的 linux-fs 合并现已将 ReiserFS 标记为过时的 ("Obsolete") 文件系统。Reiserfs 是比较老的文件系统,它的开发好几年前就已经停止;其他 Linux 发行版早已选择其他文件系统,例如 btrfs、xfs 或 ext4。

2022年的 Linux 5.18 中已经弃用了 ReiserFS,随着2023年9月初被标记为 "Obsolete",ReiserFS 很可能在未来两三年内从主线 Linux 内核中删除。此外,作为少数几个支持 ReiserFS 的发行版之一,openSUSE Tumbleweed 也在2022年正式结束了对 ReiserFS 的支持。与 EXT4、Btrfs、XFS 等现代 Linux 文件系统以及 F2FS 和即将推出的 Bcachefs 等其他现代文件系统相比,ReiserFS 早已过时。由于缺少大公司的支持,Reiser4 的开发从未被纳入主线;而且在 ReiserFS 的创建者 Hans Reiser 被判谋杀罪后,其他人也逐渐远离了 Reiser 文件系统。因此 ReiserFS 在 Linux 6.6 中被标记为 "Obsolete" 并不奇怪。

在前 Namesys 开发人员 Edward Shishkin 的领导下,Reiser5 文件系统的开发工作偶有进展,但目前看来 Reiser5 不会在短期内被纳入主线。

Linux 6.6 RC 1 发布

Linux 6.6 合并窗口已在2023年9月中旬结束,6.6-rc1 已经发布。在 6.6 中有许多令人兴奋的新特性,但也有一项显著的新增内容再次未能入选。其亮点包括 EEVDF 调度器、有利于 AMD 芯片 CPU 的工作队列变更、DRM CI 实验、KSMBD 不再是实验性质、HP BIOS 设置驱动程序,内核 make xconfig 的 Qt6 端口,新声音硬件支持,Stadia 控制器震动支持,添加了 Intel IVSC 驱动程序,AMD Dynamic Boost Control, ReiserFS 被宣布过时,更好地防止 NVIDIA 专有驱动行为失控以及最终添加了 Intel Shadow Stack 支持。但 Bcachefs 文件系统没有被包含进来。

Linus Torvalds 在 6.6-rc1 公告中写道:“到目前为止,所有关于 6.6 的统计数据看起来都相当正常 - 像往常一样,补丁包大部分是驱动程序(各种各样的东西,但网络和 GPU 是两个最大领域),架构更新作为第二位明显增加,并且我们还有工具和文档。显然也有核心内核更新(文件系统更新、网络、核心 VM 等)但是硬件支持 - 不论是驱动程序或 CPU - 都趋向于在 diffstat 中使所有核心变化黯然失色。如同以往,在合并窗口期间总会有太多单独变更或开发者无法列出。我们得到了 1700 + 个独立开发者提交过来的 12k + 次提交,并进行了 800 + 次合并以将其全部整合起来。这实际上非常正常,这似乎既不是一个非常小的也不是特别大的版本。”

预计 Linux 6.6 稳定版将在 2023 年 10 月底或 11 月初发布。

Linux 内核 LTS 期限将从 6 年恢复至 2 年

在2023年9月举行的欧洲开源峰会上,Linux 内核开发人员兼《Linux Weekly News》执行主编 Jonathan Corbet 介绍了 Linux 内核的最新动态以及未来的发展方向。其中一项即将发生的重大变化是:Linux 内核的长期支持 (LTS) 时间将从六年缩短至两年。


目前 Linux 社区仍然遵守当前的生命周期终止时间表,因此已发布的 6.1、5.15、5.10、5.4、4.19 和 4.14 六个 LTS 版本会遵守六年的规律,但之后发布的新版本则只会有两年周期。


Corbet 对此解释称,主要原因在于缺乏使用和缺乏支持;“维持这么久确实没有意义,因为人们已经不再使用它们了”。还有一个很大的问题是,Linux 代码维护人员的倦怠;他们在完成工作时面临着许多障碍。一方面,维护人员需要在日常工作之余维护代码,但维护工作通常没有报酬。最重要的是,由于人手不足等问题,维护人员的工作量也越来越大。

科技媒体 Ars Technica 认为,对于 PC 端来说,两年似乎是一个不错的支持窗口;但对于基于 Linux 打造的 Android 移动操作系统来说却不尽然。2017 年,Google 开发者 Iliyan Malchev 在一次 Android Linux 演讲中宣布 Linux 内核的 LTS 期限从两年延长至六年;彼时的这一扩展主要就是考虑到了 Android 和物联网设备。而现如今,在 PC 上,两年仅代表内核更新之间的间隔时间,因此是一个很好的时间表。但对嵌入式设备而言,考虑到大部分的开发周期和整个消费者支持窗口期,这 "两年" 时长显然不够。

按照谷歌此前的描述,手机开发需要两年时间,内核在工程流程的初期就已锁定。因此如果按照两年的 LTS 期限,当手机最终发货时,LTS 内核将达到生命周期的终点,导致用户将在设备的整个生命周期中使用过时的内核。

本文更新至2023年11月结束,第6版的Linux内核更新请继续参考本站的《Linux Kernel 6y系列主要发布记录》。