关注了就能看到更多这么棒的文章哦~
6.4 Merge window, part 1
By Jonathan Corbet
April 28, 2023
DeepL assisted translation
https://lwn.net/Articles/930068/
截至目前,已经有将近 7500 个 non-merge changeset 被合入 6.4 内核版本的 mainline 仓库。6.4 版本的合并窗口显然已经启动,并且已经合入了许多重要改动。请继续阅读了解目前为止最重要的改动有哪些。
BPF
现在可以在更多的 BPF map 类型中存储 kptrs(具体来说是 per-CPU hashmap、LRU hashmap 和 local-storage map)。
BPF 程序现在可以在 bpf_timer_start() 中使用绝对时间。
新增了用于 packet 和 XDP buffer 的 kptr 类型。还有其他一些新增 kptr 类型,包括 RCU-protected kptr 和 reference-counted kptr。
开发人员在 uprobe 程序中添加了 Android APK 包的的相关支持。这样以来就可以更容易地把 uprobe 关联到存储在 APK 包中的代码上了。
合入了 generic iterator patch,最终目标是使 BPF 程序中的循环更易写。
BPF verifier log 包含了 verifier 拒绝程序的原因这些重要信息,现在可以采用循环记录模式。这使得开发人员在寻找信息时,最有价值的部分更大可能仍保留在日志中。
Core kernel
新增两个 ptrace() 操作:PTRACE_GET_SYSCALL_USER_DISPATCH 和 PTRACE_SET_SYSCALL_USER_DISPATCH,它们用来供一个进程操纵另一个进程的 system-call user dispatch 相关设置。这个功能的目标使用场景是用户空间的检查点/恢复(checkpoint/restore)机制。
如果底层文件系统支持的话,io_uring 子系统可以对一个文件发起多个 direct I/O 并行写入;目前,ext4 和 XFS 有这种支持。还有一个新的 "multishot" timeout 超时选项,可以重复产生 timeout,不需要每次都重新设置 timer 计时器。
Filesystems and block I/O
用 O_DIRECTORY 和 O_CREAT 两个 flag 来调用 open() 的话语义会很奇怪,并且多年来发生过几次变化。从 6.4 版本开始,这种 flag 组合会导致系统调用失败,返回 EINVAL 错误。
F2FS 文件系统现在可以支持每个 zone 的 size 不是 2 的幂次的 zoned block device。
ublk 驱动的 command code 有了改变。这一改动显然会破坏那些使用了旧的代码的程序;对于他们来说,可以使用配置选项(UBLK_LEGACY_OPCODES)来让旧代码继续正常工作。
Hardware support
GPIO 和引脚控制: Loongson 64 位 GPIO 控制器,Fairchild FXL6408 8 位 I2C 控制的 GPIO 扩展器,以及 Intel Elkhart Lake PSE GPIO 控制器。
图形: Magnachip D53E6EA8966 DSI 面板,索尼 TD4353 JDI 面板,诺瓦泰克 NT36523 面板,飞思卡尔 i.MX LCD 控制器,以及三星 MIPI DSIM 桥。
硬件监控: Starfive JH71x0 温度传感器和 ACBEL FSG032 电源。
杂项: 高通云 AI 加速器、飞思卡尔 i.MX8 图像传感器接口、微星笔记本电脑嵌入式控制器、联想 Yoga 平板电脑模式开关、Richtek RT5739 稳压器、Richtek RT4803 升压稳压器和硅谷机顶盒随机数发生器。
网络: Realtek RTL8710B(U)无线接口、联发科 MT7530 和 MT7531 交换机、意法半导体 STM32 基本扩展 CAN 控制器、StarFive dwmac 以太网控制器、AMD/Pensando 核心设备适配器、Realtek 8822BS、8822CS 和 8821CS SDIO 无线网络适配器、NXP 100BASE-TX PHYs 和 Microchip 10BASE-T1S 以太网 PHYs。
Miscellaneous
值得提一下新增的文档中包括了内核贡献成熟度模型(the kernel contribution maturity model)以及关于如何建立一个 trimmed kernel 的详细教程。
nolibc 库添加了 loongarch 支持。
Networking
内核现在在 SCTP 协议中支持了公平容量(fair capacity)和加权公平排队(weighted fair queuing) stream scheduler。
在系统的 devicetree 中支持了将 LED 绑定到网络交换机或 PHY。
新增一个基于 netlink 的 API,用于调用用户空间的 helper 函数。关于该功能的概述请参见相关 commit,而关于如何使用该功能来实现 TLS-handshake 请求也有一个相关 commit。
现在可以将 BPF 程序关联到 netfilter 的 hook 上,使得可以用 BPF 来做出数据包转发决策;相关 merge commit 中有更多信息。
Security-related
正如人们所预期的那样,SELinux runtime disable 这个功能已经被移除了。这个功能已经被弃用多年了,而且大多数发行版早已将其禁用,所以很可能没有人会注意到这一点。
SELinux 的 "checkreqprot" 功能,可以用来规避对创建可执行内存映射的限制策略,因此也已经被删除。这个功能已经经过了一个漫长的废弃(deprecation)周期,似乎不太可能有人会受到影响。
内核现在可以限制 .machine keyring (存放着机器所有者的密钥),只允许使用公认的证书机构正确签名过的密钥。其目的是允许这个 keyring 可以跟完整性测量架构(IMA, Integrity Measurement Architecture)子系统一起使用。
Internal kernel changes
新增一个通用的机制,能够从用户空间创建内核工作进程(kernel worker process),更多信息请参见相关 commit。
正如预期的那样,SLOB 内存分配器已经被移除。
如果仍然保持了通常的两周时间表的话,6.4 合并窗口可望一致持续开放到 5 月 7 日。等到窗口关闭时,LWN 上会再提供一次摘要。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~