关注了就能看到更多这么棒的文章哦~
6.0 Merge window, part 1
By Jonathan Corbet
August 5, 2022
DeepL assisted translation
https://lwn.net/Articles/903487/
预计是 "6.0" 版本内核的合并窗口已经有了一个强劲的开端,在最初的几天里就有了 6820 个 non-merging changeset 被拉入 mainline 仓库。到目前为止这些工作遍布内核代码中各个部分;请继续阅读本文来了解这个合并窗口的前半段改动的摘要。
到目前为止,被接受的最重要的修改包括:
Architecture-specific
arm64 架构现在可以对 transparent huge page 进行 swap,不再需要先将其分割成 base page 了。不过这个功能目前跟 memory tagging extension 还不兼容。
core kernel
限制进程跨 CPU 迁移的 energy-margin 启发式规则已经被移除了,这样可以让系统整体的能量利用效率更高。
对大型系统上的 task 的安放策略还进行了其他一些调整,使得整体性能更好,但这个 pull 的描述里面警告说,在一些 workload 中可能会看到行为有变化。
io_uring 中对 epoll_ctl() 操作的相关支持已被标为 deprecated,如果没有人抱怨的话会在未来的版本中删除。
新的 IORING_RECV_MULTISHOT 标志可以让 recv() 调用支持 multi-shot 操作,从而大大改善了从同一个 socket 中进行大量 recve 操作的应用程序的性能。
io_uring 中对 buffered write 的支持(目前仅针对 XFS 文件系统)得到了很大的改善,性能提高了 2 倍左右。
io_uring 中现在也支持 zero-copy 方式的网络传输了。
针对 uprobe 位置的 BPF 程序现在允许 sleep 了。
新增了一个 BPF iterator 用于遍历 kernel symbol;没有提供文档,但有一个 self-test 的例子用来说明如何使用。
Filesystems and block I/O
有两个看似未使用的分布式 lock-manager 的特性(DLM_LSFL_TIMEWARN 和 DLM_LKF_TIMEOUT)已被标记为 deprecated。目前的计划是在 6.2 开发周期中完全删除掉。
fsnotify 子系统有了一个新的 flag,FAN_MARK_IGNORE,可以更好地控制要忽略哪些特定事件;commit 的 changelog 里面有更多信息。
内核现在可以在 overlayfs 文件系统上正确地实现 POSIX 访问控制列表(access control list),并且这些文件系统是底下 overlay 的是 ID-mapped 底层文件系统之上的。感兴趣的人可以在这个 pull request 中找到关于希望解决的问题的更多细节。
有一个新的 user-space block driver,是基于 io_uring 的。它完全没有文档,但可以在 commit 的变更日志和 ubdsrv 的 GitHub 页面中找到一些信息。
新增了 Btrfs "send" 协议的新版本(version 2)。支持以更大的 block size 来发送数据、raw compressed extents,并包括更多的 metadata。当然,version 1 的协议仍然可以在两端得到支持。
Hardware support
Graphics: LogiCVC 显示控制器、飞思卡尔 i.MX8QM/QXP 像素组合器、飞思卡尔 i.MX8QM/QXP 显示像素链接、飞思卡尔 i.MX8QXP pixel link to display pixel interface、飞思卡尔 i.MX8QM 和 i.MX8QXP LVDS 显示 bridge、飞思卡尔 i.MX LCDIFv3 LCD 控制器和 EBBG FT8719 面板。当然,内核也增加了几十万行的 amdgpu 寄存器头文件。
Hardware monitoring: Analog Devices ADM1021、ADM1021A、ADM1023、ADM1020、ADT7481、ADT7482 和 ADT7483 温度传感器,Maxim MAX1617 和 MAX6642 温度传感器,National Semiconductor LM84 温度传感器,ON Semiconductor NCT210、NCT214、NCT218 和 NCT72 数字温度计,Philips NE1618 温度传感器,Analog Devices LT7182S 降压开关,和 Aquacomputer Quadro 风扇控制器。
Media: 全志 A31 MIPI CSI-2 控制器,全志 A83T MIPI CSI-2 控制器,以及安森美半导体 AR0521 传感器。
Miscellaneous: 海思 HNS3 性能监测单元、英伟达 Tegra186 定时器、瑞萨 RZ/G2L 中断控制器、龙芯 PCH LPC 控制器、龙芯 3 扩展 I/O 中断向量控制器、Arm SCMI 系统电源控制器、联发科智能电压缩放引擎、高通互连带宽监控器、凌阳 SP7021 复位控制器、凌阳 SP7021 中断控制器、微芯片 FPGA I2C 控制器以及瑞萨 RZ/V2M 接口。
Networking: 瑞萨 RZ/N1 A5PSW 以太网交换机,瑞萨 RZ/N1 MII 转换器,旺讯 10GbE PCI Express 适配器,以及微芯 LAN937x 交换机。还有一个新的 module,可以将 ELM ELM327 OBD-II 适配器改为当作业余爱好者级别的 CAN 网络接口。
Regulator: Richtek RT5120 PMIC 电压调节器,联发科 MT6370 SubPMIC 调节器,以及 Maxim 597x 电源开关。
Miscellaneous
自 2012 年以来,sysfs 中的 "efivars" 接口已被 deprecated;在 6.0 中会被完全删除。我们相信,所有的用户都已经转移到 EFI 数据的 efivarfs 接口。
Networking
新增了若干 BPF helper 用于生成和检查 SYN cookies。没有文档,但有一个 self-test 例子可以参考。
还有一套新的 BPF kfuncs 用来访问和修改 connection-tracking state。
内核中的 TLS 实现有了一些性能上的改进;详情请见相关 blog。
Security-related
x86 内核现在可以从 bootloader 传入的 setup 数据中获取到随机数种子了。在 m68k kernel 里面利用该平台的 bootinfo 协议已经添加了类似的功能。
SafeSetID 安全模块现在可以控制那些用 setgroups() 进行的设置。
内核支持了 ARIA block cipher 算法。
BPF 安全模块现在可以实现针对 cgroup 的 hook 了,以前是针对单个目标进程。
Internal kernel changes
运行 KUnit 单元测试现在会标记内核为 taint 状态,因为理论上其中一些测试会让系统状态不佳。
linux-next 中仍有超过 6000 个 changeset,所以 6.0 的合并窗口还远未完成。假设通常的时间表保持不变的话,这个窗口将一直开放到 8 月 14 日;当然,在窗口关闭后,LWN 将发布后半部分的变动总结。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~