首页 文章详情

LWN:5.18合并窗口第一部分!

Linux News搬运工 | 130 2022-04-09 16:27 0 0 0
UniSMS (合一短信)

关注了就能看到更多这么棒的文章哦~

5.18 Merge window, part 1

By Jonathan Corbet
March 25, 2022
DeepL assisted translation
https://lwn.net/Articles/888736/

截至目前,在 5.18 开发周期中已有 4127 个 non-merging changeset 进入了 mainline。这个速度比起之前的合并窗口来说相对较慢,但其中还是有了很多的改动。请继续阅读下去,了解 5.18 合并窗口的前半部分中最重要改动的摘要。

Architecture-specific

  • 32 位 Arm 系统已支持将中断调用栈(interrupt stack)以及虚拟映射的内核栈(virtually-mapped kernel stack)分隔开来。

  • 删除了对没有内存管理单元(MMU)的旧版 Arm 系统(ARMv4 和 ARMv5)的支持。不过,对同样没有 MMU 的 ARMv7-M 系统仍然保持支持。

  • arm64 架构支持新增 "QARMA3" 指针验证算法(pointer-authentication algorithm)。Arm 的 QARMA 的这个变种显然更加快速,同时仍有足够的安全性。

  • Arm64 系统可以使用 GCC 12 版本编译器来支持影子堆栈(shadow-stack)。

  • PA-RISC 架构获得了最基本的 vDSO 支持,这反过来又使系统可以第一次支持运行时使用具有不可执行权限的堆栈(non-executable stack)运行。这个 patch 的最初版本是在 2006 年发布的,似乎有些功能总是需要比其他功能要花费更长时间才能进入 mainline。

  • 加入了英特尔 "hardware feedback interface" 的支持。这个机制允许硬件来告知内核当前系统中每个 CPU 的当前性能和能效比。这些能力可能会随着时间的推移而改变,例如因为发热过高而进行的限制。文档 patch 里有更多一些的信息。

  • 移除了 nds32 架构的支持。根据合并时的更新日志所说:

    硬件仍在使用,代码也很合理,但针对 mainline 的移植不再积极,因为所有的剩下用户都应该是在运行供应商的内核(vendor kernel),而这些内核应该永远不会再更新到后续版本上了。

Core kernel

  • io_uring 子系统已经有了一些改进。新增 IORING_SETUP_SUBMIT_ALL 选项会提交一整个批次的 request,哪怕中途遇到错误也一样。ring 本身对应文件描述符跟 ring 一起注册,为线程型应用程序(threaded application)提升了性能。细节请看相关的 changelog。新增的 IORING_OP_MSG_RING 操作允许一个 ring 向另一个 ring 发出 signal。此外,现在可以直接从 ring 中对 socket 进行 NAPI busy poll 轮询了。

  • 针对 alpha 和 m68k 架构(最后两个仍在使用 a.out 的架构),不再默认编译生成 a.out 可执行格式。a.out 代码实际上还没有被删除,但这可能很快会进行。

  • 合并了对 restartable-sequence API 的一些调整,以便在 GNU C Library 中提供支持。

  • DAMON operation schemes(DAMOS)机制为用户空间提供了对内存管理相关操作(尤其是 page reclaim)的更多控制。

  • tracing 系统现在支持 "user events",这基本上就是 user-space 应用程序中的 dynamic tracepoint。该功能在合并后的更新日志中的介绍是:

    用户空间可以向内核注册一个事件(event),描述该 event 的格式。然后,它将在一个 page mapping 中收到一个 byte 用来对照检查。然后,有特权的 task 可以跟对待其他 event 一样来启用该事件,这将把映射里的字节改为 "true",告诉用户空间的应用程序开始将该事件写入 tracing buffer 中。

    更多信息请参见添加文档的 commit 以及一个示例程序。

Filesystems and block I/O

  • 现在可以在 sysfs 中查看 block request queue 里的 inline-encryption 能力,详情参见 changelog。

  • 对于加密文件来说,通常无法进行 direct I/O,因为无论如何,数据必须通过内核 buffer 来进行加密或解密。但是,如果硬件做了加密工作,情况就不同了。在 5.18 中,如果使用 inline encryption,那么用 fscrypt 加密的文件可以用 direct I/O 来访问。文档 patch 中包含了更多的信息。

  • F2FS 文件系统已经支持了 ID-mapped mounts。

  • 如果 NFS 被启用了,那么对 NFSv3 的支持将始终内置在 NFS server 中。这样做的目的是使 NFSv3 成为 NFS 的基本、"始终支持" 的版本,从而为最终取消 NFSv2 支持来做好准备。

  • Btrfs 新增两个 ioctl() 操作(BTRFS_IOC_ENCODED_READ 和 BTRFS_IOC_ENCODED_WRITE),允许直接对于一个文件的 extents 进行读取和写入。这些命令的主要用途是支持更加新的、更加有效率的发送和接收操作。

Hardware support

  • 硬件监控 华硕 ACPI 嵌入式控制器、Vicor PLI1209BC 数字电源监督器、Aquacomputer Farbwerk 360 RGB 控制器,以及德州仪器 TMP464 和 TMP468 温度传感器。

  • 媒体 Microchip CSI2 demux 控制器,Hynix Hi-847 传感器,OmniVision OV08D10 和 OG01A1B 传感器,以及 Intersil ISL7998x 视频解码器。

  • 杂项 高通公司 MSM 电源管理器控制器、Xilinx ZynqMP SHA3 加速器、TI TPS6286x 电源稳压器、Richtek RT5190A 电源管理 IC、Sunplus SP7021 SPI 控制器、LiteX MMC 主机控制器和 Tesla 全自驱动时钟控制器。

  • 声音 德州仪器 TAS5805M 扬声器放大器,AMD PCI 音频协处理器,以及 Awinic AW8738 音频放大器。

Miscellaneous

  • 新增一些比较重要的文档,包括一些研究人员研究内核社区的指南,readahead 代码的概述,如何报告出 regression 问题,以及开发人员应该如何处理 regression。

Security-related

  • 新增一个 kernel keyring 名为 machine;它包含由 shim bootloader 接口所实现的机器所有者密钥(machine-owner keys)。machine keyring 中的密钥在内核中是可以被信任的,用来用来对初始启动过程后之后要使用到的部件(如 module 或 integrity 数据)进行签署(sign)。

  • 移除了 asymmetric TPM-backed private keys 的支持。这个功能最初是在 3.7 版本添加的,依赖于一个已经废弃了的(obsolete) TPM 版本,并且有一些自己的安全问题;希望没有人在使用它。

  • 随机数生成器也做了大量工作。/dev/random 和/dev/urandom 之间的差异已经被移除(尽管在报告了一个 regression 问题之后,不得不 revert 一些 urandom 的改动)。在 virtual machine 进行 fork 时,新增了一个机制来避免 random-stream 被复现。现在内部开始使用 BLAKE2s 算法。还有更多改动,细节请参见合并后的 changelog 以及 https://www.zx2c4.com/projects/linux-rng-5.17-5.18/ 。

  • 内核现在为 size_t 值提供了 saturating arithmetic helpers;可以用来加强代码以防止整数溢出的错误。更多信息请参见相关提交。

Internal kernel changes

  • 第一部分来自 fast kernel-headers 代码树里的工作已经合入,主要是对 scheduler header files 进行了大量的修改调整。

  • 去年发现的未被使用的 block-layer congestion-tracking 代码已经被删除。

  • 内存管理代码进行了改进,添加了 remote per-CPU page list draining。

  • 合并了更多 folio patch,这组补丁将内部的内存管理函数(包括 get_user_pages() 的各个变种)转换为使用 folio,并在 readahead 代码中实现了创建 large folio。第二组是将一些 address_space_operations 转换为 folio。

  • set_fs() 基础功能终于被完全移除。

快速检查可以看到 linux-next 目前包含了将近 9000 个尚未被拉入 mainline 的 commit,所以看起来 5.18 内核将会有更多的东西进来。合并窗口预计将持续到 4 月 3 日;在那之后不久,我们将对这个版本中剩余部分工作进行总结。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~



good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter