关注了就能看到更多这么棒的文章哦~
5.18 Merge window, part 2
By Jonathan Corbet
April 4, 2022
DeepL assisted translation
https://lwn.net/Articles/889266/
Linus Torvalds 在 4 月 3 日发布了 5.18-rc1 内核预编译版本,在此之前,他已经将 13207 个 non-merge changeset 拉到了 mainline 仓库。因此,这个合并窗口不仅纷争不断(有大量的 regression 以及被拒绝的 pull request),同时也是相对繁忙的。在写完第一篇 5.18 合并窗口的总结后,有超过 9000 个 changeset 被合入。现在是时候来补充记录这个开发周期中的剩余改动了。
在 5.18 合并窗口的后半部分,最有趣的变化包括:
Architecture-specific
live patching 也支持 32 位 PowerPC 系统了。
RISCV 架构已经支持了 "Sv57" 页表格。这是一种支持 57 位虚拟地址的五级页表。
RISCV 的 perf 实现代码已经被移除,取而代之的是基于 SBI PMU 和 Sscofpmf 扩展的另一个 perf 实现。这就可以支持大多数 perf 功能了。
RISCV 的 SBI CPU-idle extension 在 5.18 中开始支持。
RISCV 还支持了 restartable sequence。
Intel software-defined silicon driver,允许英特尔控制这个处理器中哪些功能是可以使用的,已经被合入 mainline 了。
对 AMD 的 "host system management port" 的支持,这是 "为操作系统级软件提供通过一组 mailbox 寄存器来访问系统管理功能的接口",已经被合入 mainline。文档提交中可以找到少量的额外信息。
Core kernel
BPF type format(BTF)机制现在可以对指向用户空间内存的变量进行标注(annotate)了。这个功能的好处之一就是为 verifier 提供了一种更好的方法来检测和检查用户空间的内存访问。更多信息请参见 merge changelog。
BPF program-packing memory allocator 已经被合并;这使得那些存在大量加载好的 BPF program 程序的系统中能更有效地使用内存。
MADV_DONTNEED madvise() 命令现在可以支持 hugetlb page。
新增一个 madvise() 操作,MADV_DONTNEED_LOCKED,它将(像 MADV_DONTNEED 一样)触发对指定 page 的回收。但与 MADV_DONTNEED 不同的是,这个操作甚至适用于已经被 lock 在内存中的 page;这些 page 被强制取出,但它们的 "locked" 状态并没有改变。因此,如果受影响的 page 后续由于内存缺页而回来,那么它们将保持被 lock 的状态。相关的 changelog 解释了这个功能背后的原因。
Filesystems and block I/O
Device-mapper I/O 统计功能已被大幅重构了,这可以使 dm-crypt 等场景的统计更加准确。
Reiserfs 文件系统已被弃用(deprecated),有望在 2025 年被移除。
对 write stream 的支持已经从 block 子系统中移除。目前没有任何设备支持该功能,也看不到有什么未来需求。
现在支持 NVMe 设备上的 64-Bit integrity checksum 完整性校验。
exfat 文件系统新增挂载选项(keep_last_dots),这个选项会让它不去除文件名的尾部句号;这使得该文件系统与 Windows 不兼容,后者会去除尾部句号。
Hardware support
时钟。Microchip PolarFire 时钟控制器、瑞萨 RZ/G2L 时钟控制器、瑞萨 9 系列 PCIe 时钟发生器、恩智浦 i.MX93 时钟控制器、StarFive JH7100 音频时钟、苹果 M1 数字控制振荡器、高通 QCM2290、SM6125 和 SM6350 显示时钟控制器、高通 SM6350 图形时钟控制器和全志 H616/R329 RTC 时钟控制器。
Graphics。ChromeOS 隐私屏幕控制器、ITE IT6505 DisplayPort 桥接器、所罗门 SSD130x OLED 显示器和 MIPI DBI 兼容面板。
Industrial I/O。Semtech SX9324 和 SX9360 接近传感器、Analog Devices ADXL367 三轴加速计、Analog Devices ADMV1014 微波降频器、Analog Devices ADA4250 instrumentation amplifiers、Analog Devices ADMV4420 K-band 降频器和 Analog Devices LTC2688 数模转换器。
Miscellaneous。SiGma Micro-based 键盘,Airoha EN7523 GPIO 控制器,UPI uG3105 电池监视器,Injoinic IP5xxx power bank IC,Macronix 外部硬件 ECC 引擎,Silergy SY7636A 温度传感器,Maxim Semiconductor MAX77714 电源管理 IC。AMD PSP I2C semaphores、联发科 ADSP mailbox controllers、ASPEED PECI 控制器、Layerscape security fuse processors、Sunplus 片上控制器、Sunplus UARTs、Rockchip NANENG COMBO PHYs、联发科键盘、Imagis IST30xxC 触摸屏。
Networking。Realtek RTL8367S 以太网交换机、Davicom dm9051 SPI 以太网控制器、Fungible 以太网适配器、联发科 MT7986 无线 MAC、联发科 MT7921U 802.11ax 2x2:2SS 无线适配器、Lynx 28G SerDes PHY 和 I2C 连接的管理控制器传输协议(MCTP)设备,实施的是 DSP0237 规范。
Pin control and GPIO:Broadcom BCM4908 引脚控制器、Meson s4 引脚控制器、Sunplus SP7021 PinMux 和 GPIO 控制器、Renesas R8A779F0 引脚功能控制器、Mediatek MT8186 引脚控制器、NXP i.MX93 引脚控制器、Nuvoton WPCM450 引脚和 GPIO 控制器,以及 Qualcomm SC8280xp 引脚控制器。
USB。Richtek RT1719 Sink Only Type-C USB 控制器和高通公司嵌入式 USB 调试器。
Miscellaneous
像往常一样,用户空间的 perf 工具有一长串的改进;详见相关 merge commit 中的总结。
Networking
bridge 子系统现在支持多生成树(multiple spanning trees);更多信息请参见 merge commit。
继续致力于在网络代码中添加监控点来揭示丢包原因。
加载到 network control group 的 BPF program 现在可以使用一些新增 helper 函数来明确设置系统调用的返回值。这有助于了解某个特定系统调用被拒绝的原因。
现在支持从以 BPF_PROG_RUN 运行的 BPF program 中传输数据包。欲了解更多信息,请参见相关 merge commit、changelog 以及文档 patch。
在 express data path (XDP) 机制中加入了对 fragment 的支持, 允许处理 jumbo frame (巨帧)等。更多信息请参见相关 commit。
network namespace 拆分(teardown)工作大大加快了,这对于一些有大量网络流量的大型系统来说非常重要。
Security-related
严格的 memcpy() 边界检查 patch 已经被合并了。这项工作应该有助于在一系列内存安全问题进入 production kernel 之前就提前 fix。
内核在编译时已经启用了 -Warray-bounds 和 -Wzero-length-bounds warning。这是一个长期努力的成果,旨在消除内核代码中的零长度的数组以及一些相关技巧。
为 x86 架构增加了 indirect branch tracking 的 control-flow integrity。这个功能可以防止 indirect branch 被重定向到那些不应该跳转到的位置。具体来说,所有的 indirect branch 都必须落在 ENDBR 指令位置。
Virtualization and containers
virtio-crypto 设备已经支持了 RSA 加密。似乎没有相关文档,但 commit 中的内容对某些人来说可能就够了
Internal kernel changes
正如 https://lwn.net/Articles/885941/ 所述,内核现在编译时改为符合 C11 语言标准,而不是 C89 标准了。
新增的 "fprobe" 机制允许在不需要 ftrace 的全部功能时进行快速的函数调用追踪(quick function-call tracing);更多信息请参见相关文档 commit。
build 系统现在支持两个新的环境变量:USERCFLAGS 和 USERLDFLAGS;它们可以分别用来向编译器和链接器传递额外参数。
网络文件系统的内部支持代码有了很大的改动;请看相关 merge changelog 来了解更多。
早已过时的 PCI DMA API 已经被移除,驱动程序应该使用常规的 DMA API 来代替。
5.18 内核现在进入了稳定阶段,在这个阶段,所有这些新功能中所存在的 bug 将被发现并 fix。假设正常的时间表保持不变的话,那么最终 5.18 版本可望在 5 月 22 日或 29 日发布。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~