LWN:5.19 合并窗口第一部分!
关注了就能看到更多这么棒的文章哦~
5.19 Merge window, part 1
By Jonathan Corbet
May 27, 2022
DeepL assisted translation
https://lwn.net/Articles/896140/
在撰写本文时,针对 5.19 开发周期,已经有将近 4600 个 non-merge changeset 合入 mainline 仓库了。5.19 合并窗口进展得很不错。目前合入的改动涵盖了很多领域,包括 kernel 核心、架构支持、网络、安全、虚拟化等等。继续阅读来了解合并窗口第一部分的情况。
目前已经合入的有意思的改动包括:
Architecture-specific
移除了若干 x86 特有的 boot option (nosep, nosmap, nosmep, noexec, and noclflush)。每个 option 都是用来关闭掉 CPU 中一个相应功能的,目前已经不再需要关闭了
彻底移除了 x86 上的 a.out 可执行格式的支持,之前在 5.1 的时候已经 deprecated 了。
x86 split-lock detection 机制得到了强化。不再仅仅是对进程使用 split lock 时给出 warning (缺省行为)了,而且会尽量拖慢相应的进程的执行。这样就可以确保系统正常的性能,也许相应的应用程序就可以得到 fix 了。
新增的 Intel “in-field scan” 机制可以在正式部署的系统里面进行检测并发现 CPU 的问题了。相应的文档 commit 里面有更多信息。
xtenda 架构支持了更多功能,包括 SMP coprocessors, KCSAN, hibernation 等等。
m68k 架构实现了一个基于 android Goldfish 模拟器的虚拟机。
Arm 支持了 Scalable Matrix Extension (只支持 host mode,guest 系统还不支持)
Core kernel
对 io_uring 子系统进行了一些改善工作。新增了 IORING_RECVSEND_POLL_FIRST flag,如果在网络操作里面设置上的话,会让这个操作直接进入 polling 模式,而不是先试图去进行传输。这样就可以在调用者不需要这个操作马上进行的时候能节省一些开销。还新增了一些 flag 来减轻 fixed file descriptors 的管理工作。accept() 支持了 "multi-shot" 模式,允许在一次操作里面 accept 多个连接。新增了一些操作用来修改文件的扩展属性。支持了 socket() 系统调用。最后,还支持了 "passthrough" 操作,可以把 NVMe 命令直接发送给设备。
所有这些新的 API 都完全没有文档。可以在 BPF maps 中存放 typed 指针了。相应的 merge commit 里面有更多细节。不要把这个功能跟“dynamic BPF pointers”混起来,后者也会被包含在 5.19 里,请参看相关的 merge commit。
Filesystems and block I/O
EROFS 只读文件系统进行了大量的重构,来利用 fscache 机制。实测下来可以显著提升那些运行了很多基于 EROFS 映像文件的 container 容器的系统性能。相关的 merge 描述有更多介绍。
EROFS 的工作额外为 fscache 添加了一个 on-demand mode,参看相关 commit
Hardware support
硬件监测。Aquacomputer Octo 温度传感器和风扇控制器,Aquacomputer Farbwerk 360 温度传感器,Infineon XDPE152 电压调节器,Microchip LAN9668 温度传感器,以及 Nuvoton NCT6775F I2C 接口。
杂项。Nvidia SN2201 平台开关,Silicon Mitus SM5703 电压调节器,以及联发科的 SPI NAND 闪存接口。
网络。Marvell Octeon PCI 终端网卡,CTU CAN-FD IP 核(见文档),Analog Devices 工业以太网 T1L PHY,pureLiFi LiFi 无线 USB 适配器,联发科 PCIe 5G WWAN modem T7xx 适配器,德州仪器 DP83TD510 以太网 10Base-T1L PHY,Sunplus 双 10M/100M 以太网适配器,以及 Realtek 8852CE PCI 无线网络(Wi-Fi 6E)适配器。
另外:一些旧的网络驱动程序已经被删除,因为它们没有被维护,而且估计也没有被使用了。
此外:电源管理子系统已经支持了那些在 "artificial" power scale 上运行的设备。简而言之,这意味着这样的设备提供了关于不同功率状态的相应效率的信息,但这些信息并不是跟现实世界的标准相对应的。相应的文档提交中包含了更多的信息。
Networking
BIG TCP patch set 已被合并,这项工作允许在数据中心的网络上发送巨大的 IPv6/TCP 数据包。
继续添加 packet-drop 原因标注,让管理员更加容易了解网络数据包为何无法通过系统。
multipath TCP(MPTCP)协议现在可以在某些无法使用 multipath 功能的情况下退回到常规 TCP。
新增一个用户空间 API 用于管理 MPTCP flow。文档不多,但在这次的 merge commit 中有一个介绍。
Security-related
各种保密计算(confidential-computing)机制允许把机密数据推入虚拟机并且不暴露给 host 系统。内核的 EFI 子系统现在可以通过 securityfs 下的一个目录(security/coco)将这些机密信息暴露给 guest。commit 中的相关文档给出了更多信息。
kernel 的 lockdown 模式可以防止特权进程改动了在内核控制之外的内核内存。或者,至少来说这是它的本来目的。事实证明,只要启动内核调试器(kernel debugger)就可以轻松绕过 lockdown 机制。有一个 commit 合入了 mainline(当然也适用于 stable update),从而填补了这个漏洞。
对随机数生成器进行了一些改进,以提高鲁棒性和性能。相应的 merge commit 包含了概述。
支持了 structure randomizaiton hardening 加固,依赖 Clang 编译器第 15 版
Landlock security module 现在支持了对文件进行重命名。
Integrity Measurement Architecture (IMA) 现在可以使用 fs-verity 的文件摘要值来进行验证了。
"unprivileged BPF "的含义有了一些变化。在当前的内核中,禁用 unprivileged BPF 会使得所有 bpf() 系统调用命令都不可用。而在 5.19 中,非特权进程将可以访问那些实际上不会创建 object 的命令。这使得有特权的进程可以加载 BPF 程序,之后无特权的进程可以与之交互。merge commit 中有更多信息。
Virtualization and containers
支持 AMD 的 Secure Nested Paging 功能。简而言之,该功能会让虚拟机在其加密内存被来自外界的访问获取到的时候得到通知。这种机制的一种用法是挫败重放攻击(replay attack)。
支持了英特尔可信域扩展(TDX, Trusted Domain Extensions)机制的支持,它提供了一些类似的功能。更多信息请看文档提交。
Internal kernel changes
Objtool 是内核构建系统的一部分,用来对 object 文件进行一些转换工作,它的接口被完全重构了。相应的 commit 给出了相关改动的概述,还有一个文档 commit 提供了 objtool 提供了的一些功能。
继续向 memory folios 迁移。有一个 pull request 将一些地址空间的操作转换为新的(类似的)操作。
SLUB 内存分配器的调试基础设施已经得到了改进;更多信息请参见文档提交。
将内核信息的打印转移到 per-console 的 thread(LWN 2019 年的文章中有描述)的工作终于被合并了。这应该可以避免那些缓慢的 console 来阻塞日志记录或对系统产生日常延迟。另外,printk()的 indexing 功能现在也被记录到了文档里。
5.19 合并窗口刚刚开始;可以预计它将一直开放到 6 月 5 日。窗口关闭的时候 LWN 会对后半部分的内容进行总结,敬请关注。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~