关注了就能看到更多这么棒的文章哦~
The first half of the 6.3 merge window
By Jonathan Corbet
February 23, 2023
DeepL assisted translation
https://lwn.net/Articles/923846/
截至目前,已经有 5776 个 non-merge 的 changeset 被拉入 6.3 版本的 mainline 内核;这还不到合并窗口开启前在 linux-next 中所等待的工作的一半。因此,这个合并窗口正在顺利进行,也还远未完成。到目前为止,相当多的重要工作已经完成;请继续阅读,看看在 6.3 合并窗口的前半部分有哪些进入内核。
到目前为止,合并的变化包括
Architecture-specific
删除了一大批旧的、未使用的 Arm board 文件,使内核代码的行数减少了超过 15 万行。6.0 中的一个 commit 描述了已删除 board 文件的所有系统的列表。同时,也有不少 devicetree 文件也被添加进来,用来支持 46 个新的 arm64 系统。
用于 arm64 系统的新增 virtconfig 这个构建目标是一个相对轻量级的 config,打算用在虚拟系统上启动。
AMD 的 "automatic IBRS" 功能现在得到了支持。这是一种 Spectre 防御措施,它限制了间接跳转(indirect-branch)的预测执行,其性能开销低于 retpoline 引入的开销。
m68k 架构添加 seccomp()的系统调用过滤。
现在支持 Arm scalable matrix extension 2 指令集。
BPF trampoline 现在在 s390x 和 RISC-V RV64 系统上也有用了完全支持。
Core kernel
这次针对内核 Rust 语言的支持雏形来说,改进相对较少,但根据 Miguel Ojeda 的说法,这种支持 "越来越接近于可以有第一批 Rust module 被提到 upstream 的程度了"。这些改动包括移除 alloc crate 中不适用的部分,实现了 Arc 类型(它提供了一个具有引用技术的指针),ScopeGuard 类型(它会在超出范围时运行一些清理代码),以及 ForeignOwnable 类型,以便在 Rust 和 C 代码之间移动指针。
有一个新的文档涵盖了对 BPF kfuncs 的稳定性方面的期望;它描述了正在进行的关于 BPF API 应如何稳定下来的讨论中的当前结论。
cgroup.memory=nobpf 这个命令行参数禁用了 BPF 程序的内存统计;关于这个背后的理由,请参见相关 merge 信息。
新增一个红黑树数据结构,可用于 BPF 程序。更多信息请参见相关 merge 消息。
可重启序列(restartable sequence)机制现在向进程提供了一个 "per-memory-map concurrency ID"。这个 ID 可以被认为是(当作)一个 CPU number,但这个数字需要尽可能地保持为零。它的目的是在那些大型系统中的只使用了 CPU 子集的应用程序中,实现更有效的 per-CPU 数据结构。相关 commit 中包含一些更多的信息。
Filesystems and block I/O
tmpfs 文件系统现在支持 ID-mapped mount 了。
Erofs 支持了对 per-CPU file-data 的解压缩,从而减少了数据访问的延迟。
Btrfs slab allocator 现在可以按照 extent 的大小来对它们进行区分,因此任何一个 block group 都被归类为小(小于 128KB)、中(大于 8MB)、大 extent 这三者之一。这显然减少了内存碎片话,尤其是在那些 allocation size 跟文件寿命非常相关的工作场景中,而显然是实际工作场景。请看相关 commit message 了解细节。
旋转磁盘驱动器仍然存在,甚至变得更加复杂:multi-actuator driver 有多个独立控制的读取臂,为了获得最佳性能,必须保持所有都忙碌起来。BFQ I/O 调度器已经添加了对这种驱动器的支持;相关 commit message 有更多信息介绍它是如何工作的。
Hardware support
GPIO 和引脚控制。高通 QDU1000/QRU1000、IPQ5332、SA8775P 和 SM8550 引脚控制器,联发科 MT7981 引脚控制器,以及 StarFive JH7110 引脚和 GPIO 控制器。
硬件监控。MPS MPQ7932 稳压器,HPE GXP 风扇控制器,NXP MC34VR500 电源管理 IC,以及英飞凌 TDA38640 电压调节器。
输入。EVision 键盘和 Steam Deck 力反馈控制器。
杂项。Xilinx ZynqMP 片上存储器控制器、联发科低压热传感器控制器、英特尔拓扑感知寄存器/pm 胶囊接口、Aspeed ACRY RSA 引擎、StarFive JH7110 随机数发生器、Maxim MAX20411 单降压转换器和 Broadcom BCMBCA HS SPI 控制器。
网络。Microchip KSZ9563/LAN937x 以太网交换机 PTP 时钟,Realtek RTL8188EU 无线接口,Ocelot VSC7511、VSC7512、VSC7513 和 VSC7514 外部交换机,基于 Amlogic GXL 的 MDIO 总线复用器,Motorcomm 8531 PHY,以及 Qualcomm WiFi 7(ath12k)接口。
声音。联发科 MT8188 控制器,Iron Device SMA1303 音频放大器,瑞萨 IDT821034 四路 PCM 编解码器,Awinic AW88395 音频放大器,Realtek RT712 SDCA 编解码器,以及英飞凌 PEB2466 四路 PCM 编解码器。
另外:对在 BPF 中编写人机界面设备驱动程序的初步支持已经被合并,尽管分发这种驱动程序的机制仍有待解决。更多信息请参见相关文档。
Networking
增加了对 Physical Layer Collision Avoidance(PLCA) Reconciliation Sublayer 的支持;据说它可以提高 shared media Ethernet 上的访问性能。相关的文档 patch 描述了如何配置和使用这个功能。
用于控制 WiFi 接口的 "wireless extensions" API 在 2006 年遇到了麻烦,但仍然作为一个仿真层来被支持着。这个 API 将不再支持 WiFi 7(802.11be)接口,因为它无法配置所有的可用功能。从 6.3 开始,使用 wireless extensions API 的话,在当前大多数设备上都会给出 warning。
对 netlink API 添加文档的工作仍在进行;相关成果可以在 core API 和 user-space API 手册中看到。另外还增加了一个新的工具,用于根据 YAML specification 来生成 netlink 协议代码。
新增 IP_LOCAL_PORT_RANGE socket 选项,使多个 host 更容易通过 NAT gateway 来进行对外连接(outgoing connection);该 commit 包含了相关细节。
Multi-path TCP 现在可以处理混合使用 IPv4 和 IPv6 协议的流量了。
BIG TCP 支持已经扩展到了 IPv4。
新增 default_rps_mask sysctl 开关,允许创建一个默认的、每个网络命名空间具有一份的接收包转向(RPS, receive packet steering)配置。
由于缺少维护以及感兴趣的人,对一些 queuing discipline 的支持(具体来说是 class-based queuing(CBQ)、ATM virtual circuits(ATM)、differentiated service marker(dsmark)、traffic-control index(tcindex)和 resource reservation protocol(RSVP))已经被移除。
Internal kernel changes
旧的内存分配函数 get_kernel_pages() 已经被移除,因为现在 kernel 代码树内部已经没有地方用它了。
6.3 合并窗口可望保持开放到 3 月 5 日,届时 6.3-rc1 将被发布出来,内核将进入开发周期的稳定阶段。不过在这之前,还有很多改动需要进入 mainline;在合并窗口关闭之后就会有其余工作的总结。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~