关注了就能看到更多这么棒的文章哦~
The first half of the 6.11 merge window
By Jonathan Corbet
July 18, 2024
Gemini-1.5-flash translation
https://lwn.net/Articles/982034/
6.11 内核发布的合并窗口于 7 月 14 日打开;截至撰写本文时,自那时起已有 4,072 个非合并变更集 (non-merge changeset) 被拉入主线 (mainline) 存储库。换句话说,这个合并窗口才刚刚开始。尽管如此,已经有足够的时间让一些有趣的更改为下一个内核版本落地;请继续阅读以了解迄今为止已合并的内容摘要。
6.11 合并窗口前半段的一些最重大变化包括:
架构特定
64 位 Arm 架构现在支持 ACPI 系统上的 CPU 热插拔;请参见 此文档提交 了解更多信息。
X86 内核现在可以使用 AMD 的 SEV-SNP 安全加密虚拟化机制,作为 guest 来运行,该机制使用 安全 VM 服务模块。
x86 的“fake EFI 内存映射”功能已移除,该功能允许在启动时创建虚构的内存映射条目。此功能被认为是无人使用的,且与机密计算配置有冲突;如 合并消息 所说:“结合最近关于机密 VM 和未接受内存的进展以及 kexec,创建一个已知不准确的固件内存映射视图并将其传递给操作系统是一个我们无需的功能,因此已移除”。
内核核心
io_uring 子系统现在提供实现
bind()
和listen()
的操作。nsfs(命名空间文件系统)上的一个新的
ioctl()
操作集将在 PID 命名空间之间进行进程和线程组 ID 的转换。pidfd 文件系统还支持一些新的
ioctl()
调用,以获取由 pidfd 表示的进程的命名空间文件描述符。嵌套的底半部锁(nested bottom-half locking)补丁 已经合并;这主要是在实时内核中提高延迟,但也应该为其他用户带来好处。
BPF 增强功能包括 一个新的迭代器 用于遍历 bitmask,一个 通知机制 用于在
struct_ops
对象被分离时通知用户空间,将更多类型(包括 kptrs)放入数组的能力,以及 弹性拆分(resilient split) BTF 机制 用于在可加载模块中获得更可靠的类型元数据。
文件系统和块 I/O
statx()
系统调用现在允许路径参数为空指针的情况,前提是设置了AT_EMPTY_PATH
标志。在当前的内核中不是这么做的,而是要求路径在这种情况下必须是一个空字符串;允许使用空指针使内核能够更有效地处理AT_EMPTY_PATH
调用。open_by_handle_at()
系统调用在当前内核中如果调用者缺乏搜索初始挂载命名空间的能力,就会失败;这使得它在容器中无法使用。在 6.11 中,此系统调用的权限检查在内核可以自行确信调用者对相关文件有适当访问权限的情况下有所放宽;请参见 此变更日志 了解更多信息。为了匹配大多数 Unix 系统的行为,Linux 内核传统上一直禁止写入系统中某个进程正在使用的可执行文件;这就是一些读者可能看到的“text file busy”信息的来源。此限制旨在防止运行程序时出现意外情况。内核开发人员过去几年 一直在逐步取消 此限制,主要是因为它实际上并没有保护任何东西。从 6.11 开始,内核将不再阻止对繁忙的可执行文件的写入;请参见 此变更日志 以获取更多详细信息。
listmount() 和 statmount() 系统调用已在许多方面进行了扩展。
listmount()
现在能够 以逆序列出挂载点,首先显示最新的挂载点。这两个系统调用现在都将在无法访问初始挂载命名空间的情况下工作,并且这两个系统调用现在可以在外来挂载命名空间以及本地命名空间中运行。statmount()
已经获得能够返回文件系统挂载时的选项。对用 Rust 编写的块驱动程序的支持已经合并;到目前为止,只有
null_blk
示例驱动程序 使用了此支持。尽管如此,在主线中拥有这种支持将使用 Rust 开发实际有用的块驱动程序变得更容易;预计这些驱动程序将在未来的内核版本中出现。block 子系统现在支持 原子写入操作,这些操作将写入整套块或完全不写入。在用户空间级别,可以使用
pwritev()
的新RWF_ATOMIC
标志来请求原子行为。statx()
已经进行了增强,以便为给定文件提供有关原子写入功能的信息。此变更日志 提供了一些更多信息。
硬件支持
时钟: 高通 SM8650 摄像头时钟控制器。
硬件监控: 符合 SPD5118 的温度传感器,Monolithic Power Systems MP2993 双循环数字多相控制器,Monolithic Power Systems MP9941 数字降压转换器,Monolithic Power Systems MP2891 多相数字 VR 控制器,以及 Monolithic Power Systems MP5920 热插拔控制器。
其他: ChromeOS 嵌入式控制器传感器,ChromeOS EC 基 charge 控制器,Analog Devices AXI PWM 发生器,使用 GPIO 线模拟的 PWM 设备,瑞萨 RZ/G2L USB VBUS 调节器,QiHeng Electronics ch341a USB 转 SPI 适配器,恩智浦 i.MX8MP AudioMix 复位控制器,Turris Omnia MCU 控制器,以及龙芯 3 CPU 频率控制器。
网络: 瑞昱 RTL8192DU USB 无线网络适配器,瑞萨以太网-TSN 接口,Vining 800 CAN 接口,Kvaser USBcan Pro 5xCAN 和 Mini PCIe 1xCAN 接口,Tehuti Networks TN40xx 10G 以太网适配器,新思科技 DesignWare 以太网 XPCS 控制器,Airoha SoC 千兆以太网适配器,博通 BCM4388 蓝牙芯片组,以及 Meta“fbnic”网络适配器(请参见 本文 了解一些背景信息)。
其他
现在有一个新的上电顺序(power-sequencing)子系统,负责确保系统设备按正确的顺序启动。该子系统没有文档记录;可以在 此变更日志 中找到一些信息。
“粗略逻辑分析器(sloppy logic analyzer)”模块可以将一组 GPIO 线变成一个不太完美的逻辑分析仪;请参见 此提交 了解更多信息。“请注意,这是在没有其他方法的情况下来提供的分析仪方案,可能会受到延迟、非确定性代码路径和不可屏蔽中断的影响。因此称之为'sloppy'。但是,对于例如远程开发来说,它可能有助于获得第一手资料并帮助进一步调试。”
网络
新增
net.tcp_rto_min_us
sysctl 旋钮可用于调整 TCP 套接字的最小重传超时。ethtool
实用程序已经获得能够为使用 Net DIM 的接口微调中断配置的功能。在 此提交 中有一些最小的文档记录。
内核内部更改
为 6.11 合并的第一个更改是由 Linus Torvalds 添加的一个新的“运行时常量(runtime constant)”机制。其想法是用在启动时确定且不再更改的值(特别是指向目录条目 (dentry) 缓存的指针以及缓存大小)来替换保存值的变量。通过简单地将这些值直接塞入使用它们的指令中,可以避免一些开销(指针加载和运行时移位)。对于使用频繁的数据结构,这种优化可以带来测量上可以看到的差异。
当然,没有文档记录;此提交 包含一个用于不支持此功能的架构的虚拟实现。
RUNTIME_CONST()
宏用于定义一个将用作运行时常量的变量。该变量必须使用runtime_const_init()
设置,它将重写所有使用它的指令。有两个访问器:runtime_const_ptr()
和runtime_const_shift_right_32()
,提供了用于 dentry 缓存的实际所需操作。在多次尝试之后,iomap 子系统终于有了 一些文档记录。
如果正常的计划继续进行(而且很长时间以来一直没有),6.11 合并窗口将于 7 月 28 日的 6.11-rc1 版本结束。在 linux-next 中仍然有超过 8,000 个变更集,因此下一个版本的更改列表远未完成。与往常一样,LWN 将在合并窗口关闭后返回,并总结后半部分带来的内容。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~