关注了就能看到更多这么棒的文章哦~
The rest of the 6.14 merge window
By Jonathan Corbet
February 3, 2025
Gemini-1.5-flash translation
https://lwn.net/Articles/1006378/
在 Linus Torvalds 发布 6.14-rc1 并关闭了此开发周期的合并窗口时,大约有 9,307 个非合并变更集(non-merge changeset)已被拉入主线代码仓库(mainline repository)— 这是多年来合并窗口活动的最低水平。尽管如此,自从 上半合并窗口总结 撰写以来,拉取的 5,000 个提交中仍有一些有趣的更改。
不过,首先要了解这个周期有多么不典型,以下是最近几个开发周期的合并窗口提交计数:
Release | Commits |
---|---|
6.13 | 12,142 |
6.12 | 12,115 |
6.11 | 12,954 |
6.10 | 12,402 |
6.9 | 13,342 |
6.8 | 13,052 |
换句话说,长期以来的常态是在合并窗口期间出现的提交至少比这次多 30%。要找到比这次更慢的合并窗口,有必要追溯到 2012 年的 3.6 版本(合并窗口期间有 9,140 个提交)— 尽管 2015 年的 4.0 版本,有 9,591 个合并窗口提交,也很接近。这次的放缓,在内核子系统中普遍感受到,很可能是由于开发周期相对于今年假期的时机,而不是长期趋势的指示;时间会证明一切。
同样值得记住的是一些视角;正如 Torvalds 在公告中所说:"当然,对我们来说,'微小'仍然意味着有 50 万行代码被更改,以及超过 1 万个提交在其中"。
6.14 合并窗口后半部分拉入的最有趣的更改包括:
架构特定
OpenRISC 架构已获得对 可重启序列(restartable sequences)的支持。
核心内核
有两个新的 BPF kfunc —
bpf_local_irq_save()
和bpf_local_irq_restore()
— 它们将禁用本地 CPU 上的中断并再次恢复它们。它们旨在帮助在 BPF 程序中实现中断安全的数据结构。此提交 包括一个自测程序,演示了它们的用法。madvise()
中的
MADV_DONTNEED
和MADV_FREE
操作现在将释放相关的页表(如果可能),以及指示的地址范围。对于某些工作负载,空的页表会浪费大量内存;请参阅 此提交 以获取已解决问题的描述。- ntsync 子系统
,它提供了一组 Windows NT 同步原语,在 6.10 中合并,但标记为“broken”。所有 broken 的部分现在都已修复,并且此子系统现已完全启用。ntsync 实现的接口记录在 Documentation/userspace-api/ntsync.rst 中。
文件系统和块 I/O
XFS 实时设备是一种特殊模式,旨在为文件系统操作提供一致且可预测的延迟。在 6.14 中,实时设备已获得对反向映射(将设备块映射到包含它的文件)和 reflink(在文件之间共享块)操作的支持。
fsnotify 子系统有一个新的事件类型,称为
FS_PRE_ACCESS
。如果监听器已请求此访问,它将在读取文件中的内容之前收到通知,并且该访问将被暂停,直到监听器响应。看起来,其预期目的是帮助实现分层存储系统,使监听器能够从慢速存储中填充数据(如果需要)。此操作需要CAP_SYS_ADMIN
权限;正如 合并消息 指出的那样:""管理员有责任确保用户空间事件处理程序不做可能 DoS 系统的愚蠢的事情""。- 非缓存缓冲 I/O 补丁
已被合并。此块 I/O 选项旨在提供直接 I/O 的大部分性能优势,使用普通的 POSIX I/O API,并且没有直接 I/O 的一些缺陷。
NFS 服务器现在支持 NFS4.2+ 属性委托(attribute delegation),与 6.11 合并的客户端支持相匹配。从 合并消息:""属性委托允许 NFS 客户端管理文件的 mtime,而不是将脏数据刷新到 NFS 服务器,以便文件的 mtime 反映上次写入,这要慢得多""。
NFS "localio" 功能 得到了增强,以便客户端可以在客户端和服务器位于同一主机上的情况下执行直接 I/O。
一直以来都在进行 工作,以允许用户空间中的文件系统(FUSE)子系统使用 io_uring 。该功能已在 6.14 中实现。在 Documentation/filesystems/fuse-io-uring.rst 中有一些初步的文档。
硬件支持
- GPIO 和引脚控制
:Qualcomm 8917 引脚控制器和 Mediatek MT7988 引脚控制器。
- 工业 I/O
:Texas Instruments OPT4060 RGBW 颜色传感器和 ROHM Semiconductor BD79703 数模转换器。
- 输入
:Intel 触摸主机控制器。
- 媒体
:ST Microelectronics STM32 摄像头串行接口控制器。
- 其他
:Microchip 处理器间通信接口、Samsung Exynos 邮箱、Nuvoton MA35 SoC NAND 控制器、ST Microelectronics STC3117 电量计、Thunderbolt 3 接口(在备用模式下)、Qualcomm SM8750 互连和 AMD AE4DMA 控制器。
- 声音
:TI TAS2781 SPI HD-audio 侧编解码器和 Awinic Technology aw88083 放大器。
其他
perf
工具像往常一样收到了许多增强功能;有关列表,请参见 此合并消息 。
安全相关
很久以前,有一个补丁系列实现了
O_MAYEXEC
open()
的选项,这将导致打开仅在系统策略(权限位、安全模块等)允许执行目标文件时才成功。其目的是使语言解释器(例如,对于 Python)能够决定执行给定的文本文件是否与本地安全策略一致。这个想法后来 被重新实现为trusted_for()
系统调用,但该调用在 5.18 合并窗口期间 被拒绝 。在 2024 年,这个想法以一种形式 返回,现在(经过更多更改后)已合并到 6.14 中。
execveat()
有一个新的选项(AT_EXECVE_CHECK
),该选项使调用检查是否允许执行指示的文件(而无需实际执行它)。有两个新的 securebit(可通过prctl()
访问),它们告诉解释器应如何处理输入。现在名为EXEC_RESTRICT_FILE
的位指示解释器在文件上使用AT_EXECVE_CHECK
来决定是否执行其内容,而EXEC_DENY_INTERACTIVE
告诉解释器拒绝读取交互式命令。必须单独更新解释器才能实现该功能。有关更多信息,请参见 Documentation/userspace-api/check_exec.rst 。
内部内核更改
CRC32 和 CRC-T10DIF 算法的代码已进行了重大重组;它们现在可以直接从库接口调用,不再需要涉及内核的加密层。结果是更简单,更高效的代码。
默认情况下,内核模块将使用 SHA512 算法而不是 SHA1 进行签名。
内核现在能够 分配和释放没有有意义引用计数的“冻结”页面 。此更改将使 slab 分配器效率更高,但也有助于长期缩小
page
结构的目标。新的
zpdesc
内存描述符 也通过充当 zswap 页面的struct page
替代品来实现后一个目标。更多的 Rust 绑定已合并,用于处理 PCI 总线、平台驱动程序、Open Firmware 等。根据 Greg Kroah-Hartman 的说法:""我们几乎处于“用 rust 编写一个真正的驱动程序”的阶段了,具体取决于你想做什么"" 。合并中包括 一个示例 PCI 驱动程序 和 一个平台驱动程序(用 Rust 编写)。
有 一种新的实现,用于构建时代码,该代码为可加载模块生成符号版本。它使用来自 DWARF 调试记录的信息,而不是直接解析源代码;这项工作的主要驱动力是为用 Rust 编写的模块启用符号版本控制。至少目前,旧的和新的实现都保留在内核中,并带有一个配置选项以在它们之间进行选择。
6.14 版本很可能会在 3 月 23 日发布,尽管总是有可能推迟一周。随着此版本的稳定,人们将关注 linux-next,以了解 6.15 是否会恢复到提交活动的平均水平。
(LWN 订阅者可以关注 即将发布的 6.14 版本,或许可以将其与 3.6 和 4.0 进行比较,在 LWN 内核源代码数据库中)。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~