关注了就能看到更多这么棒的文章哦~
6.2 Merge window, part 1
By Jonathan Corbet
December 15, 2022
DeepL assisted translation
https://lwn.net/Articles/917733/
曾几何时,Linus Torvalds 试图在合并窗口的早期能够平均每天向 mainline 合入大约 1000 个 changeset。但对于 6.2 来说,情况是很不一样的。在最初两天,有不少于 9278 个 non-merge changeset 被合入。不用说,这些 commit 修改了内核很多领域的代码,尽管与 6.1 相比,根本性的变化比较少。
到目前为止,为 6.2 合并的最重要的变化包括。
Architecture-specific
arm64 架构现在可以在启动时启用或禁用软件实现的影子堆栈;实现方式是在有需要的时候对相关指令打 patch 来实现的。这个改动使得可以使用同一个内核来支持有 pointer authentication(其实 shadow stack 在这方面没有增加多少)和没有这个指针认证的系统。
现在支持英特尔的 "异步退出通知(asynchronous exit notification)"机制;这使得 SGX enclave 里的代码能够检测到 single-step 攻击。
新增了一组操作,允许 hypervisor 支持来自英特尔 TDX guest 的请求;相关的文档提交中有一些更多的信息。
新增了一个 sysctl 开关,用于控制 x86 系统该如何相应某个使用了 split lock 的进程;该提交中有概述信息,背景有 LWN 文章 https://lwn.net/Articles/911219/ 。
BPF
BPF 程序增加了对 cgroup 本地存储的访问能力; 关于细节,请参见相关文档提交。
BPF 程序现在可以定义类型、分配对象并创建它们自己的数据结构了;相关的 merge message 给出了一个概述。
现在,BPF 代码可以访问和存储 task_struct 对象了;参见相关提交来了解。
Core kernel
在进程调用 exec()时,可以做到将其移动到一个新的 time namespace 了。这样一来,就允许进程在取消共享其 time namespace 后执行 vfork()+exec() 系列操作了,这在当前的内核中是不可行的。
更多的 Rust 基础架构代码已经被合并,详情见本文 https://lwn.net/Articles/914458/ 。
Filesystems and block I/O
Squashfs 文件系统现在可以用 threads= 选项来 mount,从而控制如何进行并行解压(parallel decompression)了;详情请参见相关 commit。
Squashfs 现在也可以处理 ID-mapped mountle 。
内核对 POSIX 访问控制列表(POSIX access-control list)的处理已经进行了大规模的重构。应该不会有什么改动会影响到最终用户。相关的 merge commit 里包含了一个关于所做工作的详细概述。
fscrypt 机制现在可以使用 SM4 加密算法了,尽管正如该 merge message 中所说的,fscrypt 维护者建议不要使用它。
饱受诟病的 Btrfs RAID5 和 RAID6 实现的可靠性得到了改善;相关的 merge message 里描述了所做的改变。还有更多针对 Btrfs 的性能改进被合入了。
内核现在可以在关闭 NFSv2 的情况下完成编译了;这是朝完全移除该功能迈出的一步。
访问 NVMe 设备的权限检查有了改动;如果写入过程在设备特殊文件的权限位上有适当的访问权限,那么读取或写入该设备的操作现在就可以正常完成了。之前,此类操作需要 CAP_SYS_ADMIN。
在 2016 年被废弃的 packet CD/DVD 驱动终于被移除。
Hardware support
Clock: MStar CPUPLL 时钟、Ingenic JZ4755 CGU 时钟、联发科 FHCTL 硬件控制器时钟、高通 SC8280XP 和 SM6375 显示时钟控制器,以及高通 SM8550 全局时钟控制器。
GPIO and pin control: 高通公司 SDM670 引脚控制器,Loongson-2 SoC 引脚控制器,以及英特尔 Moorefield 引脚控制器。
Graphics: Open firmware display controllers,瑞萨 RZ/G2L MIPI DSI 编码器,Jadard JD9365DA-H3 WXGA DSI 面板,以及 NewVision NV3051D DSI 面板。
Hardware monitoring: Ampere Altra SMpro 硬件监控器和 OneXPlayer EC 风扇控制器。
Input: Hynitron cst3xx 触摸屏,Cypress TrueTouch Gen5 触摸屏,以及 Himax hx83112b 触摸屏。
Media: OmniVision OV08X40 和 OV4689 传感器,意法半导体 VGXY61 传感器,东芝 TC358746 并行-CSI2 桥接器,全志 A31 图像信号处理器,Microchip 图像传感器控制器,瑞萨 RZ/G2L MIPI CSI-2 接收器,以及瑞萨 RZ/G2L 摄像机数据接收单元。
Miscellaneous: ARM CoreSight 性能监测单元、Amlogic DDR 带宽性能监测器、Loongson-2 SoC 全局实用程序寄存器块、基于 WMI 的戴尔平台传感器、ChromeOS 人类存在传感器、苹果 CPU 频率控制器、ARM SCMI 电源帽控制器、Richtek RT6190 4 开关降压控制器、联发科 MT6357 电源管理 IC 和凌阳 SP7021 MMC 控制器。
Networking: Realtek 8852BE PCI 无线网络适配器,Motorcomm yt8521 千兆以太网 PHY,瑞萨 R-Car S4-8 以太网交换机,联发科 MT7996 无线接口,NVIDIA Tegra 多千兆以太网控制器,Realtek 8821CU、8822BU、8822CU 和 8723DU USB 无线网络适配器,以及博通 BCM4377/4378/4387 蓝牙接口。
Sound: Realtek RT1318 编解码器。
SPI: Microchip pci1xxxx PCIe 开关,Socionext F_OSPI SPI 闪存控制器,以及 Nuvoton WPCM450 闪存接口单元。
Also: 内核有一个新的框架来管理计算加速设备(compute-acceleration devices)。在 6.2 中没有哪个真实设备使用了该框架;这可能会在 6.3 中有所变化。同时,相关文档提交给出了这个新子系统的概述。
Miscellanous
新的 rv tool 可以用来控制 runtime verification 子系统的动作。详情请参见文档提交。
内核文档的 HTML 版本现在默认使用 Sphinx "alabaster" 主题来构建。
Networking
IPv6 stack 已经支持了 "protective load balancing",描述如下:
PLB(保护性负载平衡)是一种基于 host 的跨交换机链路的负载平衡机制。它利用传输层的拥堵信号(如 ECN)来随机改变出现拥堵的连接的路径。
https://dl.acm.org/doi/10.1145/3544216.3544226 这份论文里有更多细节。
Security-related
RANDOM_TRUST_BOOTLOADER 和 RANDOM_TRUST_CPU 配置选项已被删除;现在设置这些参数的唯一方法是使用命令行选项。更多信息请参见相关提交。
Landlock security module 现在可以控制 file truncation 操作了。相关文档提交有一些更多的信息。
Internal kernel changes
read-copy-update(RCU)子系统有了一个新的 "lazy" 模式(由 RCU_LAZY 这个配置选项控制)。在这个模式被激活时,对 RCU callback 的处理将被延迟,以便这些 callback 可以一起批量处理。在轻负载的系统中,这可以节省 5-10%的功耗。对于无法等待的那些 callback,新增了一个
call_rcu_hurry()
函数。相关提交中有详细的说明。如本文https://lwn.net/Articles/911914/ 所述,现在所有架构上的 char 类型都默认为无符号。
为小内存系统设计的 SLOB slab 分配器已被废弃,并可能在未来的版本中被移除。我们鼓励任何仍然使用它的用户转移到 SLUB,因为另一个分配器(SLAB)最终也会成为被废弃的目标。为了帮助那些小型系统,新增了一个 SLUB_TINY 配置选项,可以减少 SLUB 分配器的内存需求。
对消息信号中断(MSI, message-signaled interrupts)的支持已经进行了大规模的重构,处理多年来的技术债务,以及为后续新技术做好准备。相关的 merge comit 详细描述了这一情况。
timer 子系统也有了改变。del_timer()和 del_timer_sync()分别被改名为 timer_delete()和 timer_delete_sync()。还新增了一些函数如 timer_shutdown()和 timer_shutdown_sync(),目的是为了让清理定时器的任务更简单一些,因为在这个过程中这个 timer 可能被 rearm (使用)起来;在它们被调用之后,任何试图 rearch timer 的行为都将被忽略掉。
如果按照通常的两周时间表的话,6.2 合并窗口可望于 12 月 25 日结束。考虑到这个日期的重要性以及 Torvalds 的一些预先警告,那么这个合并窗口很有可能会比平时的窗口更短一些。无论如何,一旦 6.2-rc1 发布,LWN 将对被合入的新增改动进行总结。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~