Linus Torvalds 于 2026 年 10 月 18 日正式发布了 Linux 内核 7.3 的最终版本。该版本涵盖多个核心子系统的改动,涉及任务调度、文件系统隔离、GPU 显存管理和存储 I/O 等方面。

调度器方面的改动完成了对嵌套 sched_ext 调度器的支持,并改进了跨 cgroup 层级的 CPU 权重分配。在安全方面,failfs 伪文件系统和新的 fchroot(2) 系统调用提供了一种不同的文件系统隔离思路。

本次发布还改进了内存压力下的 VRAM 管理,为虚拟机内存增加了工作集追踪,并加速了多个文件系统操作。与此同时,Linux 7.3 在开发者参与度和提交活动方面均创下新纪录,AI 辅助工具对开发者发现缺陷和提交修复的方式的影响也在持续扩大。

开发活动与 AI 日益增长的角色

Linux 内核 7.3 共收到来自 3,021 位开发者的 18,765 个非合并提交,其中包括 807 位首次贡献者。这些数字刷新了内核开发项目的纪录。

本次发布也反映出开发者查找和修复缺陷方式的变化:自动化工具和大语言模型(LLM)正越来越多地参与到代码评审、错误路径分析和常规缺陷修复之中。

Torvalds 将由此带来的小型修复数量的增长称为新的“AI 常态”。这一趋势不限于 AI 生成的补丁,AI 辅助的评审也能发现随后由开发者手动修复的问题。

活跃度的提升既带来收益也带来挑战。自动化工具可以帮助在庞大的代码库中发现被忽视的边界情况并提出修复建议,但每一个补丁仍需经过仔细的评审和测试。补丁数量更多并不自动意味着代码质量更好,维护者仍须依据正确性和价值来判断每一项改动。因此,小型修复数量的增长与本次发布中的大型架构改动一起,构成了 Linux 7.3 开发历程的重要组成部分。

核心内核与任务调度

完成的 sched_ext 子调度器

Linux 7.3 完成了对 sched_ext 中嵌套子调度器的支持。根 BPF 调度器可以将整个 cgroup 子树委托给子调度器,并授予其 CPU 访问权,之后还可以收回这些权限。

父调度器会向每个子调度器传递按 CPU 划分的能力,包括任务入队、抢占和 CPU 频率管理的控制权。这样,每个子调度器可以自行管理分配给它的任务,而不必事事依赖父调度器。

内核还为其调度器失去所需 CPU 访问权后陷入搁浅状态的任务增加了救援路径:与其让这些任务一直卡住直到 watchdog 将该调度器弹出,内核会在有限的 CPU 带宽预算内运行它们。这为子调度器无法继续推进的情况提供了受控的回退机制。

这些改动共同赋予了针对 cgroup 的 BPF 调度器更大的控制权,同时为调度失败提供了恢复机制。

通过 cgroup_mode 进行 Cgroup 权重缩放

在大型多处理器系统上,在深层 cgroup 层级间分配 CPU 时间可能引入调度开销并扭曲资源分配。Linux 7.3 新增了 cgroup_mode 设置,用于控制内核分配 CPU 权重的方式。

该设置支持四种模式:up、max、concur 和 tasks。默认值为 concur,其目标是在复杂层级间提供更精确的权重分配,但这种精确性可能带来更高的计算成本。

本次发布还将 cgroup 调度迁移到单一运行队列,简化了部分调度路径,有助于降低开销和延迟。这些改动面向的是层级化调度可能成为瓶颈的系统。

隔离内核线程与 PID 1 的文件系统状态

Linux 7.3 改变了内核为内核线程和 init 进程初始化文件系统状态的方式。

此前,PID 1 和内核线程可能共享同一个 fs_struct。这意味着改变进程根目录或相关状态的文件系统操作也可能影响到内核线程。

本次发布为 PID 1 分配了独立的 fs_struct,并将内核线程置于一个隔离的 nullfs 挂载中。这将它们的文件系统状态与用户空间进程分离开来,避免了挂载命名空间引用的无意共享。

沙箱与可执行文件控制

failfs 伪文件系统与 fchroot(2)

Linux 7.3 引入了 failfs,这是一个对不支持的操作返回 EOPNOTSUPP 的伪文件系统。与将文件视为不存在、对缺失路径返回 ENOENT 的 nullfs 不同,failfs 为文件系统访问提供了更强的边界。

本次发布还引入了 fchroot(2),一种基于文件描述符的 chroot(2) 替代方案。应用程序可以在进入受限环境之前打开所需的目录文件描述符,然后使用 fchroot() 并配合 FD_FAILFS_ROOT 标志,将其根目录移入 failfs。

进程进入该环境后,绝对路径查找和绝对符号链接解析都会失败,应用程序必须使用显式的目录文件描述符来访问所需的文件系统部分。

这种方式降低了对环境文件系统状态的依赖,避免了传统基于路径的根目录切换所伴随的路径重复解析竞争条件。它为需要严格文件系统隔离、而又不能仅依赖 chroot() 的应用程序提供了实用的基础。

binfmt_misc 中基于 BPF 的二进制选择

Linux 7.3 为 binfmt_misc 扩展了用于二进制匹配和解释器执行的 BPF 钩子。

传统的 binfmt_misc 规则依靠文件扩展名或固定的字节模式来识别可执行格式。有了 BPF 支持,程序可以在进程调用 exec() 时检查二进制文件,并决定解释器的选择和执行方式。内核还可以执行 PT_INTERP 加载器替换,覆盖二进制文件指定的动态加载器。

这为 NixOS 等发行版在定位解释器和动态加载器时提供了更大的灵活性,也有助于构建可重定位的二进制环境,而无需为每个可执行文件编写包装脚本或进行 patchelf 修改。

显存与虚拟机内存追踪

内存压力下的 VRAM 保护

当多个应用程序争抢有限的 VRAM 时,GPU 可能通过图形转换表(GTT)将缓冲区移入系统内存。这会损害性能,尤其是当需要受保护 GPU 内存的应用程序无法获得足够显存时。

Linux 7.3 通过将设备内存 cgroup(dmemcg)与 DRM TTM 内存管理器集成来解决这一问题。

在 VRAM 压力下,内核可以先驱逐未受保护的缓冲区,再回收为受保护工作负载保留的内存。这帮助应用程序更好地利用分配给它们的内存保护,并减少缓冲区在 VRAM 与系统内存之间的反复迁移。

这一改动在内存有限、竞争工作负载会导致帧率不稳定的低端 GPU 上尤为有用。它也可以帮助本地 LLM 工作负载(包括 llama.cpp)在与其他应用共享 GPU 内存时避免不必要的性能损失。

使用 userfaultfd 追踪客户机内存

虚拟机监视器(VMM)在将访问频率较低的页面移至更慢或远程存储之前,需要知道客户机内存的哪些部分正在被活跃使用。

Linux 7.3 为 userfaultfd(2) 增加了 UFFDIO_REGISTER_MODE_RWP 标志,为已注册的内存区域启用读写保护追踪,使 VMM 能够识别客户机的活跃工作集。

该机制的作用类似于使用 mprotect(PROT_NONE) 加信号处理器来追踪内存访问,但避免了后者信号处理的开销。VMM 可以利用这些信息识别冷内存并将其移至分层或远程存储。这为虚拟机内存管理器提供了更高效的客户机内存使用追踪和内存放置管理方式。

存储与文件系统改进

Linux 7.3 在 Btrfs、ext4、块设备、FUSE、SMB 和 NTFS3 等方面改进了 I/O 性能并增加了新能力。

Btrfs Direct I/O 与 fsync 性能

Btrfs 将其 Direct I/O 路径改为使用 iomap 弹跳缓冲区,而不是在受影响的情况下回退到缓冲 I/O。此前的行为使吞吐量大约只能达到硬件理论最大值的 50%,新实现将其提升到约 95%,在所报告的工作负载中几乎翻倍。

本次发布还从用于非 SSD 存储的日志路径中移除了不必要的一个 jiffy 延迟,在实测工作负载中将 fsync 吞吐量提高了约 5 倍。另一项优化在执行没有空洞的文件的完整 fsync 操作时跳过不必要的空洞检测,从而缩短了大量区段文件的日志完成时间。

这些改动针对的是 Btrfs I/O 和日志路径中的具体瓶颈,并未改变文件系统的基本接口。

Ext4 并行写入

ext4 改进了并行 Direct I/O 写入,允许更多操作在以共享模式持有 i_rwsem 锁的情况下继续进行。

本次发布还通过 fallocate() 改进了块预分配:内核避免了 ext4_mb_prefetch() 路径中不必要的工作,在不需要时降低了预分配成本。这些改动有助于降低锁开销,改善并发写入或分配大文件区域的工作负载中的性能。

面向块设备的 RWF_DONTCACHE

Linux 7.3 为原始块设备 I/O 增加了对 RWF_DONTCACHE 的支持。该标志允许单个 I/O 请求避免污染页缓存。

这使应用程序能够更细粒度地控制缓存行为,而无需为每个操作使用 Direct I/O,适用于一次性访问大量数据、且将数据保留在页缓存中并无收益的工作负载。

基于 io_uring 的零拷贝 FUSE

FUSE 允许文件系统运行在用户空间,但在内核与 FUSE 服务器之间移动数据可能带来开销。

Linux 7.3 改进了这一路径,允许 FUSE 服务器与内核直接共享缓冲池,并使用 io_uring 进行数据传输。这减少了不必要的数据拷贝,可以提升处理大量 I/O 的用户空间文件系统的吞吐量。

ksmbd 与 NTFS3 更新

内核内的 SMB 服务器 ksmbd 新增了对 Apple Time Machine 扩展、按共享的 SMB3 加密以及 SMB Direct over RDMA 加密的支持。这些新增内容改善了与 Apple 备份工作流程的兼容性,并为保护 SMB 共享和基于 RDMA 的数据传输提供了更多选项。

ntfs3 驱动还增加了对 NTFS 备用数据流(ADS)的原生支持。应用程序由此可以访问与文件关联的命名流(例如 file:stream),而不是将每个文件都视为单一的无名数据流。

是否应该立即尝试 Linux 内核 7.3?

如果你在桌面、工作站或服务器上运行 Linux,收益取决于你的工作负载。GPU 密集型应用可能受益于更好的 VRAM 管理,存储密集型工作负载可能看到更快的 I/O,而使用自定义调度器或隔离环境的开发者则获得了新的能力。

对大多数用户而言,最好的做法是通过发行版支持的内核软件包进行升级,并在生产环境部署之前,针对具体工作负载进行测试。

总结与要点

Linux 内核 7.3 解决了调度、安全、内存管理和存储方面的多个实际问题。嵌套 sched_ext 调度器获得了对 CPU 分配的更大控制权,failfs 和 fchroot(2) 提供了新的文件系统隔离方式,VRAM 驱逐策略的变化则有助于在内存压力下保护重要的 GPU 工作负载。

本次发布还改进了客户机内存追踪,加速了 Btrfs 和 ext4 的 I/O 路径,并为 FUSE、ksmbd 和 ntfs3 增加了新能力。

开发过程也在发生变化。创纪录的贡献数量和 AI 辅助工具的日益广泛使用,展示了内核维护方式的演变。挑战依然不变:在不牺牲正确性、性能和可维护性的前提下,将有价值的改动合入内核。

更多细节可参阅 LWN 合并窗口总结的第 1 部分和第 2 部分,以及 Kernel Newbies 对 Linux 7.3 的报道。