关注了就能看到更多这么棒的文章哦~
The second half of the 6.16 merge window
By Daroc Alden
June 9, 2025
Gemini flash translation
https://lwn.net/Articles/1023075/
6 月 8 日,Linux 6.16 合并窗口如期关闭,共包含了 12,899 个非合并提交(non-merge commits)。这一数字略高于 6.15 合并窗口,但完全符合预期。其中,有 7,353 个提交是在合并窗口上半段总结发布后合并的。更详细的统计数据可在LWN 内核源代码数据库中找到。
像往常一样,合并窗口的下半段包含了更多的错误修复而非新功能,但也有许多引人注目的功能成功合入:
架构相关(Architecture-specific)
RISC-V 上的
getrandom()
系统调用现在快得多了。它现在完全由 vDSO(virtual Dynamic Shared Object,虚拟动态共享对象)处理。RISC-V 内核现在支持来自 SiFive 的新供应商扩展,以及 Zicbop、Zabha 和 Svinval 扩展。它们还包含了supervisor binary interface (SBI) firwmare features (FWFT) extension(监管者二进制接口固件特性扩展),这是 SBI 3.0(最新版本)所需的。
LoongArch 现在支持多达 2048 个 CPU,这是该架构能够处理的最大数量。该架构现在还具备了多核调度能力。
核心内核(Core kernel)
Unix 域套接字(Unix-domain sockets)可用于传输文件描述符(file descriptors);现在,程序可以自行选择禁用此功能,这对于防止拒绝服务攻击(denial-of-service attacks)可能很重要。
用于内核跟踪(kernel tracing)的环形缓冲区(ring buffer)现在可以映射到用户空间(user space)的内存中。
一个新的 API 将允许虚拟内存分配(virtual memory allocations)在 kexec handovers(kexec 切换) 后持久化。
崩溃转储内核(Crash-dump kernels,即内核崩溃后运行以生成报告的特殊内核)现在可以重用现有的 LUKS 密钥。这使得崩溃转储可以保存到加密文件系统,而此前这是不可能的。
内存控制组(memory control-group)代码执行的内核内存记账(kernel memory accounting)现在可以在非可屏蔽中断(non-maskable interrupt,NMI)上下文中执行。这很重要,因为 BPF 程序可以在 NMI 上下文中运行,并且可能需要在内核中分配内存,而这些内存需要被记账。
NUMA 加权交织(NUMA weighted interleaving)现在是自动调优的,在数据分布在多个 NUMA 节点(NUMA nodes)的系统中提供了更好的内存带宽利用率。
文件系统和块 I/O(Filesystems and block I/O)
OrangeFS 现在利用了新的挂载 API(new mount API),UFS 也是如此。
NFS 文件系统(NFS filesystems)的读写大小限制已提高到 4MB。“默认仍然是 1MB,但那些敢于冒险的管理员现在可以尝试使用支持更大 I/O 大小的 NFS 客户端。”
在用户命名空间(user namespace)中拥有
CAP_SYS_ADMIN
功能(capability)的用户(且在根命名空间中无特权)现在可以通过 fanotify 监视文件系统和挂载。ext2 文件系统已弃用对 DAX 的支持,因为它没有被广泛使用。ext2 文件系统本身也没有被广泛使用,但它作为文件系统的一个稳定参考实现。由于持久内存(persistent memory)的使用不像预期那样广泛,在参考实现中支持它就没有太大意义了。ext2 中的 DAX 支持预计将在 2025 年底完全移除。
FUSE 文件系统(FUSE filesystems)现在可以通过一次操作就使所有现有的缓存目录项(cached directory entries,dentries)失效。
overlayfs 文件系统现在支持用户命名空间中带有 dm-verity 的仅数据层(data-only layers)。这允许在无特权的命名空间中将受信任的元数据层与不受信任的数据层结合使用。
硬件支持(Hardware support)
*时钟(Clock)*:SpacemiT K1 SoCs、Sophgo SG2044 SoCs、T-HEAD TH1520 视频输出时钟、Qualcomm QCS8300 摄像头时钟、Allwinner H616 显示引擎时钟、Samsung ExynosAutov920 CPU 集群时钟控制器、Renesas RZ/V2N R9A09G056 SoCs、Sophgo CV1800 时钟以及 NXP S32G2/S32G3 时钟。
*GPIO 和引脚控制(GPIO and pin control)*:Mediatek MT6893 和 MT8196 SoCs、Renesas RZ/V2N SoCs、MediaTek Dimensity 1200 (MT6893) I2C、Sophgo SG2044 I2Ci、Renesas RZ/V2N R9A09G056 I2C、Rockchip RK3528 I2C 以及 NXP Freescale i.MX943 SoCs。
*图形(Graphics)*:Amlogic C3 图像信号处理器。
*硬件监控(Hardware monitoring)*:Dasharo 风扇和温度传感器、KEBA 风扇控制器和电池监控控制器、MAX77705 ICs、MAXIMUS VI HERO 和 ROG MAXIMUS Z90 Formula 主板、SQ52206 能量监视器、lt3074 线性稳压器、ADPM12160 DC/DC 电源模块以及 MPM82504 和 MPM3695 DC/DC 电源模块。
*工业 I/O(Industrial I/O)*:DFRobot SEN0322 氧气传感器。
*输入(Input)*:ByoWave Proteus 游戏控制器和 Apple Magic Mouse 2。
*媒体(Media)*:ST VD55G1 和 VD56G3 图像传感器以及 OmniVision OV02C10 图像传感器。
*杂项(Miscellaneous)*:FSL vf610-pit 周期中断定时器、SGX vz89te 集成传感器、Maxim max30208 温度传感器、TI lp8864 汽车显示器、MT6893 MM IOMMUs、Sophgo CV1800 和 SG2044 SoCs、Qualcomm sm8750 SoCs、Amlogic c3 和 s4 SoCs 以及 Renesas RZ/V2H(P) R9A09G057 DMA 控制器。
*网络(Networking)*:Renesas RZ/V2H(P) SoC、Broadcom asp-v3.0 以太网设备、AMD Renoir 以太网设备、RealTek MT9888 2.5G 以太网 PHY、Aeonsemi 10G C45 PHY、Qualcomm IPQ5424 qusb2 PHY、IPQ5018 uniphy-pcie 设备、Mediatek MT7988 xs-PHY 以及 Renesas RZ/V2H(P) usb2 PHY。
*音频(Sound)*:Fairphone FP5 声卡。
杂项(Miscellaneous)
对 STA2x11 视频输入端口驱动程序的支持最终被移除。
文档生成脚本
scripts/bpf_doc.py
现在可以生成 JSON 输出,包含 BPF 辅助函数(BPF helpers)和 BPF API(BPF API)的其他元素的信息。这一改变使得外部工具更容易保持其对 BPF 接口(BPF interface)的最新了解。将“default”写入 LED 设备的 sysfs 触发器(sysfs trigger),现在将把该设备的触发器重置为默认值。
Compute express link (CXL) 设备(计算表达链接设备)现在支持可靠性、可用性和可服务性(reliability, availability, and serviceability,RAS)扩展。最重要的是,这些扩展让 CXL 设备能够参与各种错误检测和纠正方案(error detection and correction schemes)。
此版本包含许多对
perf
的改进,包括支持在 BPF 中计算系统调用统计信息(system call statistics)、更好地解密 Rust 符号、更精细的选项用于收集内存统计信息、一个用于故意引入锁争用(lock contention)的标志等等。USB 音频设备现在支持音频卸载(audio offloading)。这使得,例如,即使系统其余部分处于睡眠状态,来自 USB 设备的音频也能持续流动。在拉取请求中,Greg Kroah-Hartman 表示:“我认为这创造了在最长时间(2 年多)内合并最多补丁系列(30+)的记录。”
网络(Networking)
设备内存的内容现在可以通过 TCP 发送,从而实现从 GPU 到网线的零拷贝传输(zero-copy transmission)。
BPF 可以通过 struct_ops 程序来实现流量控制队列规程(traffic-control queueing disciplines,qdiscs)。
鉴于长期弃用后仍没有任何用户,数据报拥塞控制协议(datagram congestion control protocol,DCCP)的支持正在被移除。DCCP 旨在防止 UDP 缺乏速率控制所可能导致的问题,但这些问题在很大程度上并未出现。它最初于 2005 年加入。希望这次移除能有助于清理当前与 DCCP 共享的 TCP 栈(TCP stack)部分。
内核现在支持将通用安全服务应用编程接口(generic security services application programming interface,GSSAPI)用于AFS 文件系统,从而允许管理与 YFS 和 OpenAFS 服务器连接的加密。
OpenVPN 现在拥有一个虚拟驱动程序,用于将一些操作卸载到内核,这应该能提高其速度,特别是对于大容量传输。
安全相关(Security-related)
randstruct GCC 插件(通过随机化内核数据结构(kernel data structures)的布局来增加攻击者访问难度的插件)现在再次工作,并且有测试来确保其持续运行。ARM_SSP_PER_TASK GCC 插件(允许不同任务使用不同栈保护字(stack canaries)的插件)已被弃用,因为其功能已在上游 GCC 中提供。
完整性测量架构(Integrity Measurement Architecture,IMA)的测量结果现在可以跨 kexec 调用进行传递。一个新的内核配置选项
IMA_KEXEC_EXTRA_MEMORY_KB
决定了在软重启(soft reboot)时为新的 IMA 测量预留多少内存。受信任安全管理器(trusted security manager,TSM;Intel 的信任域扩展(trust domain extensions),也称为 TDX 的一部分)进行的测量现在作为 sysfs 的一部分暴露出来。这使得用户空间(user space)有机会根据硬件的证明(attestations)做出决策。
SELinux 的性能开销已通过增加目录访问决策(directory-access decisions)的缓存和支持 genfscon 策略语句中的通配符(wildcards)而得到降低。
内核的 EFI 代码已扩展,允许发出包含 UEFI SecureBoot 撤销信息(UEFI SecureBoot revocation information)的
.sbat
段;上游内核项目不会维护撤销信息,但各个发行版现在可以访问所需内容,从而能够发布自己的撤销数据库(revocation databases)。可加载模块(loadable modules)中的
.static_call_sites
段在模块初始化(module initialization)后现在变为只读。
虚拟化和容器(Virtualization and containers)
64 位 Arm 现在在启用保护性 KVM(protected KVM)时,支持非保护性客户机上的透明巨页(transparent huge pages)。
64 位 Arm 上的嵌套虚拟化(Nested virtualization)支持也已启用,尽管默认仍为禁用。
KVM 上的 x86 虚拟机主机(x86 virtual machine hosts)现在支持 TDX,从而能够在 Intel 处理器上使用机密客户机(confidential guests)。这一改变“已经酝酿了多年”,包含了大量的补丁。
RISC-V 上的 KVM 支持不再是实验性的。
内核内部变更(Internal kernel changes)
电源管理子系统(power-management subsystem)获得了用于管理 CPU 频率(CPU frequency)、操作性能点(operating performance points,OPPs)和相关电源管理 API(power-management APIs)的 Rust 抽象。
内核的最低支持 GCC 版本已更新到所有架构的 GCC 8;这次更新使得可以移除内核构建中使用的五个剩余 GCC 插件中的两个。相应的最低 binutils 版本为 2.30。
一系列内存管理(memory-management)变更包括更多的 folio 转换、用于核心内存管理操作(core memory-management operations)的Rust 抽象、对内存整理(memory compaction)的更好支持,以及移除
VM_PAT
。当使用断言(assertions)和结果(results)时,Rust 测试错误消息现在与 KUnit 更紧密地集成。Rust 代码现在也可以使用 XArrays。
6.16 内核现在进入稳定期(stabilization period),最终版本预计在 7 月 27 日或 8 月 3 日发布。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~