经过两个月的开发,Linus Torvalds 发布了内核。 Linux 7.1. 最显著的变化包括:新的 ntfsplus 驱动程序、停止支持 i486 CPU 的第一阶段、移除旧的以太网适配器、移除 ISDN 和 AX.25 协议、默认启用 Intel FRED 机制、在 io_uring 中支持 BPF 处理程序、优化交换子系统、在 sched_ext 中支持子调度器、ublk 驱动程序中的零拷贝 I/O、Btrfs 中的 ioctl 操作“shutdown”、amd-pstate 驱动程序中的动态性能模式切换、对 Unix 套接字的 xattr 支持。
新版本接受了 17275 名开发者的 2589 个修复,
此次补丁大小为 57 MB(更改影响了 13528 个文件,新增 751785 行代码,删除 405916 行代码)。上一版本包含来自 2477 位开发者的 15624 项修复,补丁大小为 56 MB。7.1 版本中约 41% 的更改与设备驱动程序相关,约 12% 的更改与特定硬件架构的代码更新相关,14% 与网络协议栈相关,5% 与文件系统相关,3% 与内核内部子系统相关。
内核 7.1(1、2、3)的主要新功能:
- 磁盘子系统、I/O 和文件系统
- NTFS 文件系统的新实现版本 ntfsplus 已被采用。它基于经典 ntfs 驱动程序的代码,后者已从内核中移除。旧驱动程序经过重新设计,扩展了数据写入功能,并适配了现代特性,例如使用内存页 folios(folios)代替 buffer_head 结构。新驱动程序实现了延迟块分配,从而提高了写入性能并减少了碎片。iomap 库用于缓冲读/写操作、直接 I/O、扩展映射和页读/写操作。在 iozone 测试中,ntfsplus 驱动程序在单线程模式下写入速度比 ntfs3 快 3-5%,在 4 线程模式下写入速度快 35-110%。ntfsplus 和 ntfs3 的读取速度大致相同。ntfs3 驱动程序仍然保留在内核中,并已更新了一些修复和改进。
- 增加了对在文件系统级别而不是块设备级别生成和验证 T10 完整性检查数据的支持,从而提高了读取操作的性能。
- ublk 块设备驱动程序允许将特定逻辑移至用户空间进程,现在支持通过共享内存进行输入/输出,而无需在缓冲区之间复制数据(零拷贝模式)。
- 对于 SED-OPAL 自加密块设备,已添加 ioctl 来控制单用户模式,并实现了 STACK_RESET 命令。
- Btrfs 宣布稳定支持“shutdown”ioctl 操作,该操作允许文件系统进入一种状态,在这种状态下,它会尝试终止正在运行的操作,但会阻止所有新的操作。
- exfat 实现了通过调用 fallocate() 来预留空闲区域的功能。
- CIFS 文件系统现在支持使用 O_TMPFILE 标志创建临时文件。
- fsmount() 系统调用现在包含 FSMOUNT_NAMESPACE 选项,该选项会为已挂载的文件系统创建一个新的挂载点命名空间。clone3() 和 unshare() 系统调用也添加了标志,用于返回一个新的挂载点命名空间,其中仅包含一个已挂载的、空的、基于 nullfs 的文件系统存根以及一个带有 DAX(直接访问)设备文件系统接口的 fs-dax 驱动程序。
- NFS 服务器现在具备抵御文件描述符暴力破解攻击的保护机制,该机制通过对描述符进行加密签名来实现。此保护机制可通过 sign_fh 挂载选项启用。
- 已添加 fs-dax 符号驱动程序。它提供了一个接口,用于与支持绕过页面缓存的 DAX(直接访问)设备进行交互。此接口对于将 famfs 内存文件系统集成到内核中是必需的。
- Ceph 文件系统实现了按卷收集 I/O 指标。
- 内存和系统服务
- 第一轮移除对 i486 处理器支持的更改已通过。Kconfig 中用于构建支持 486DX、486SX 和 AMD ELAN 处理器的内核选项(CONFIG_M486、CONFIG_M486SX 和 CONFIG_MELAN)已移除,Makefile 中用于 i486 系统的编译选项(-march=i486)也已移除。支持 i486 处理器的实际代码仍然保留在内核中,但现在构建此类系统需要对 Makefile 进行补丁。移除对 i486 处理器支持的原因是为了从内核中移除模拟某些硬件操作的复杂代码,例如 CX8(比较并交换 8 个字节)和 TSC(任务调度器中使用的 CPU 周期计数器)。
- 用于 AMD 处理器系统的电源管理驱动程序 amd-pstate 现在会根据系统是使用电池供电还是电源供电,动态切换性能设置并调整电源管理行为。连接电源时,系统将激活“性能”模式;而使用电池供电时,系统将激活“平衡性能”模式。
- 英特尔灵活返回和事件传递 (FRED) 机制默认启用,可提高底层事件传递的效率和可靠性。通过使用 IRET 处理器指令返回事件,而不是通过中断描述符表 (IDT) 传递事件,可以提升性能并降低延迟。通过将事件接收分离到内核和用户上下文中,防止嵌套的 NMI 执行,并将所有与异常相关的 CPU 寄存器存储在扩展堆栈帧中,可以提高可靠性。
- perf 子系统已更新,以支持 NVIDIA Tegra410 SoC 中使用的性能监控单元 (PMU) 内存监控单元。
- 通过利用 Arm 9.6 LSUI 指令,Futex 在 ARM 系统上的操作得到了加速,该指令允许内核在不先禁用 PAN(特权访问永不)保护模式的情况下访问用户空间内存。
- 在采用 ARM 处理器的系统中,对内存系统资源分区和监控 (MPAM) 指令集架构扩展的支持得到了改进,用户可以通过 resctrl 机制在用户空间中使用它进行资源管理。MPAM 会为每次内存访问添加分区标识符 (PARTID) 和监控组标识符 (PMG)。利用 PARTID,您可以限制资源消耗,例如内存带宽或缓存大小,以防止单个任务组消耗所有资源。在监控方面,PMG 和 PARTID 的组合可用于跟踪特定工作负载下的内存资源消耗情况。
- 新增对 32 位 ARM 处理器实时模式 (PREEMPT_RT) 的支持。此前,PREEMPT_RT 支持仅限于 x86 和 x86-64、ARM64、RISC-V 和 LoongArch 架构。
- clone3() 系统调用新增了以下标志:CLONE_NNP — 防止新创建的进程获得新的权限;CLONE_AUTOREAP — 自动终止进程,而不是将其变成僵尸进程,直到父进程执行 wait() 函数;
CLONE_PIDFD_AUTOKILL - 如果与子进程关联的 pidfd 句柄关闭(例如,当父进程终止时),则终止子进程。 - 对于每个内核模块,都在 /sys/module 目录中添加了一个 import_ns 文件,其中包含导入的符号命名空间列表。
- io_uring 异步 I/O 系统现在支持使用 BPF 子系统创建处理程序。例如,可以将主分发循环替换为 BPF 程序。
- BPF 子系统的堆栈使用情况分析已实现现代化,显著加快了验证程序对许多 BPF 程序的检查速度。
- 为了优化性能,高分辨率定时器 (hrtimer) 子系统已重写。现在,任务调度器可以使用高分辨率定时器而不会牺牲性能,而无需使用精度较低的定时器。
- 继续从 Rust-for- 分支迁移更改Linux与使用 Rust 语言作为第二语言开发驱动程序和内核模块有关(Rust 支持默认情况下未启用,并且不会将 Rust 添加到内核的强制构建依赖项列表中)。截至 1.85 版本(发布于 [此处应填写版本号])。 Debian 13) 提高了构建内核组件所需的 Rust 版本要求。新增了实验性的 Kconfig 选项 CONFIG_RUST_INLINE_HELPERS,用于在编译期间将 C 插值内联到 Rust 代码中(此优化使空块驱动程序的性能提升了 2%)。新增了 'const_assert!' 宏。扩展了 'sizes'、'clk'、'ptr'、'sync' 和 'error' 模块的功能。
- SCHED_EXT 机制允许使用 BPF 创建 CPU 调度器,并且新增了创建嵌套调度器(子调度器)的功能,允许每个 cgroup 使用自己的任务调度器。
- 交换子系统优化仍在继续。旧的 swap_map 结构已被移除,并替换为“交换表”机制。此项更改提高了交换子系统的性能并降低了内存消耗。
- DAMON(数据访问监视器)子系统允许您监视进程对 RAM 中数据的访问(例如,您可以找出进程访问了哪些内存区域以及哪些内存区域未使用),现在已补充了对各种自动配额调整算法的支持。
- 跟踪子系统实现了外部环形缓冲区的概念,从而可以从中检索跟踪数据。 虚拟机该功能在虚拟机管理程序中已启用。 KVM 以及用于将跟踪数据从客户机传输到主机端的 nVHE。
- RV(运行时验证)子系统旨在检查高可靠性系统的正确运行,它补充了“停滞”监控组件,用于跟踪暂时暂停或阻塞执行的任务,以及“截止时间”组件,用于分析任务调度程序的行为。
- 虚拟化和安全
- 默认情况下,PROC_MEM_FORCE_PTRACE 标志已设置,这仅允许通过 /proc/PID/mem 文件绕过使用 ptrace() 系统调用进行调试的进程的进程内存访问权限。
- 为 LSM 模块添加了一组新的钩子(Linux 安全模块(Security Module)简化了基于栈的文件系统(例如 overlayfs)的策略实现。LSM 还添加了一个用于管理 Unix 套接字访问的钩子,该钩子在 Landlock LSM 模块中用于为 Unix 套接字分配访问策略。
- 内置的加密库 lib/crypto 已更新,支持 AES-CMAC、AES-XCBC-MAC、AES-CBC-MAC、GHASH 和 SM3 算法。lib/crypto 的文档已添加。lib/crypto 提供比传统加密 API 更简单、更快捷的功能。
- 我们利用 AArch64 架构的虚拟化扩展,实现了 pKVM(受保护的 KVM)模式,以严格隔离匿名内存。在此模式下,客户机内存页将从宿主机系统的虚拟地址表中排除。
- KVM 虚拟机管理程序现在支持 ARM 虚拟通用中断控制器 (VGICv5) 的第五个版本。
- 网络子系统
- 已为使用 socket() 函数创建的 Unix 套接字实现了对扩展文件属性 (xattr)“user.*”的支持。其应用之一是通过扩展属性标记用于 Varlink IPC 的 Unix 套接字,以便使用 BPF 程序进行 IPC 检查和调试时,能够将它们与其他套接字区分开来。在 systemd-journald 中,扩展属性旨在用于定义 /dev/log 套接字的日志格式。
- UDP-Lite协议(RFC 3828)的支持已被移除。该协议允许传输校验和无效的数据包,希望例如部分损坏的音频和视频数据能够在编解码器层进行恢复。移除原因是该协议无人使用。
- 将 IPv6 协议栈构建为内核模块的功能已被移除。虽然实际上并未采用此功能(IPv6 要么内置于内核,要么完全禁用),但它增加了维护的复杂性,因为当将 IPv6 构建为内核模块(CONFIG_IPV6=m)时,许多子系统会被迫添加无用的处理程序,以防 IPv6 模块被卸载。
- Оборудование
- AMDGPU 驱动程序包含适用于 AMD HD 7000 系列 APU(Sea Islands,GCN 1.1)的新显示引擎 (DC)。
- Nouveau 驱动程序为基于 Ampere 微架构的 NVIDIA GA100 GPU 增加了初始支持。
- 基于英特尔 Xe 架构的 GPU 的 Xe DRM(直接渲染管理器)驱动程序开发工作仍在继续,该架构应用于英特尔 Arc 系列显卡和集成显卡,最早可从 Tiger Lake 处理器开始使用。新增了对英特尔 Nova Lake-P 处理器图形子系统的支持。可清除缓冲区对象 (PBO) 功能已实现。
- 我们持续为配备 GSP 固件的 NVIDIA GPU 集成 Nova 驱动程序组件,这些 GPU 自 NVIDIA GeForce RTX 2000 系列(基于 Turing 微架构)以来便开始使用。该驱动程序使用 Rust 编写。目前已初步支持基于 Turing 微架构的 GPU。
- 添加了 corebootdrm DRM 驱动程序,用于通过基于 CoreBoot 的固件的帧缓冲区输出图形。
- 新增对以下ASoC的支持:AMD RPL DMIC、Cirrus Logic CS42L43、CS47L47、NVIDIA CPCAP和WM8962。改进了对USB音频设备的支持:华为耳机、Focusrite Novation、MV-Silicon、Studio 1824、Arturia AF16Rig、Hotone Audio、Feaulle Rainbow。
PreSonus AudioBox、Moondrop Ju Jiu、Scarlett 18i20。 - 为联想 Yoga、Legion 和 IdeaPad 笔记本电脑添加了 yogafan 驱动程序,用于监控风扇转速。
- 新增对以下 ARM 板、SoC 和设备的支持:Qualcomm Glymur、Qualcomm Mahua、Qualcomm Eliza、Qualcomm IPQ5210、Qualcomm apq8084 和 ipq806x、Axis ARTPEC-9、ARM Zena、ARM corstone-1000-a320、Microchip LAN9691、Microchip PIC64GX、Rockchip RV1103B、Renesas RZ/G3L、NXP S32N79。
- 已移除对 Baikal-T1 SoC 中使用的 AHCI SATA 和 PCIe 控制器以及定时器、内存、physmap、总线、hwmon、dwc 和 bt1-rom 驱动程序的支持。移除原因是缺乏支持,且 Baikal 平台组件与核心的集成不完整,因为俄罗斯的生产已于 2025 年 11 月停止。
- 移除了 12 个 2002 年之前发布的、适用于 ISA 和 PCMCIA 接口以太网设备的驱动程序,这些驱动程序未在生产系统中使用。同时,这些驱动程序也已从内核中移除。
ISDN 子系统、AX.25、CAIF 和蓝牙 CMTP(通用 ISDN 应用编程接口消息传输协议)协议的实现、yellowfin(Yellowfin 千兆网卡)、hamachi(Hamachi GNIC-II)、hamradio(业余无线电)、inport 和 logibm(busmouse)驱动程序均被移除。移除原因是,随着 syzbot 和 AI 工具识别出的错误越来越多,却缺乏积极的维护人员,导致无人愿意修复这些错误,最终所有修复严重问题的重担都落在了内核核心网络子系统的维护人员身上。总共移除了超过 140 万行代码。
来源: opennet.ru
