LWN: 5.17 合并窗口第一部分!
共 3747字,需浏览 8分钟
·
2021-11-23 20:11
关注了就能看到更多这么棒的文章哦~
5.16 Merge window, part 1
By Jonathan Corbet
November 4, 2021
DeepL assisted translation
https://lwn.net/Articles/874683/
截止到撰写此文的时候,Linus Torvalds 已经为 5.16 版本内核而向内核合入了 6800 个 non-merge changesets。这个数量估计占了个合并窗口中总共会进入的 patchset 数量的一半以上,所以现在是一个好时机来了解到目前为止已经合入了哪些功能。其中包括了许多重大改动以及一些内核内部代码的大规模重构,但相对来说,多数都不算是突破性的新功能。
在 5.16 合并窗口的前半部分拉出的变化包括。
Architecture-specific
现在支持了 Arm 8.6 timer extension 扩展。
MIPS 系统新增了一个 BPF 虚拟机要用的 JIT (just-in-time)编译器。
KFENCE 现在在 PA-RISC 机器上也支持了。
在 PA-RISC 机器上点击 TOC 按钮("transfer of control,控制权转移")的话会使内核进入 debugger。
RISC-V 现在支持了 KVM 虚拟化,这个改动的耗时比开发者预计的要长。
内核已经支持了英特尔的高级矩阵扩展(AMX,Advanced Matrix Extension)功能。这一点得到了广泛讨论,并对现有的浮点支持代码进行了重大重构。
Core kernel
futex_waitv()系统调用(https://lwn.net/Articles/866112/ )已经合并。
CPU 调度器支持了 "clusters" 的概念,这是一种硬件连接方式,多个内核共享同一个二级缓存。能支持 cluster 的调度器会尽力把任务分配给系统的各个 cluster,来平衡整个机器上的 cache 的工作压力。
tracing 机制的 tracefs 接口现在支持设置 owner 和 group 的权限了;这个功能可以用来仅允许一个特定的 group 才能使用 tracing 功能。不过,"other" 的权限 bit 还是不能设置,也就无法允许所有人访问。
像往常一样,有一大堆 BPF 的改动。新增 bpf_trace_vprintk() helper 可以输出信息而不受 bpf_trace_printk()的三个参数的限制。新增了从 BPF 调用 loadable module 中的内核函数的支持。增加了一个新的 bloom-filter map 类型。非特权用户的 BPF 现在被默认禁用。还有一份新的文档描述了各种 BPF 组件的 license 授权以及对用户的要求。
Filesystems and block I/O
block layer 继续进行了一系列性能优化,从而显著提高了每个 cpu core 的操作速率(operation rates)。
现在支持 multi-actuator disk,也就是多执行器(rotating)磁盘,可以同时访问多个扇区(sector)。相关的 commit 记录了这些驱动器的 sysfs 接口。
新增了一个 ioctl() 命令 (CDROM_TIMED_MEDIA_CHANGE),用于检测 CDROM 驱动器中的光盘发生变化的 event。可见,人们仍然在使用 CDROM 驱动器……
EROFS 文件系统增加了简单的多设备(multiple-device)支持。
Hardware support
Media。OmniVision OV13B10 传感器,Hynix Hi-846 传感器,以及 R-Car 图像信号处理器。
Miscellaneous。Microchip 外部中断控制器、苹果 mailbox 控制器、Ingenic JZ47xx SoCs SPI 控制器、Cadence XSPI 控制器、Maxim MAX6620 风扇控制器、Intel Keem Bay OCS 椭圆曲线加密加速器、ACPI WMAA 背光接口、Intel ISHTP eclite 嵌入式控制器、Barco P50 GPIO 和三星 S6D27A1 DPI panel (显示屏)。
网络。Realtek RTL8365MB-VC Ethernet switches,Realtek 802.11ax 无线芯片,Asix AX88796C-SPI 以太网适配器,以及 Mellanox MSN4800-XX line cards。
Networking
新增一个用户可设置的 socket option,名为 SO_RESERVE_MEM。其作用是为相关的 socket 永久 reserve 一些内核内存。这反过来又能加速网络操作,特别是当系统的内存非常紧张的时候。注意,这个功能只有在使用 memory control group 时才可用,这里 reserve 的内存将会从该组的份额中扣除。
In-situ Operations(原地操作)、Administration(管理)和 Maintenance(维护),也就是 IOAM 的支持得到了加强,支持将 IOAM 数据封装到传输中的数据包内。commit 中有一点进一步的信息。
ethtool netlink API 获得了控制 transceiver module 的能力;更多信息请参见相关 commits。
netfilter 子系统现在可以在出口时(egress)对数据包进行分类,更多信息参见相关 commit。
新增了对自动组播隧道(Automatic Multicast Tunneling,RFC 7450)的支持。
有两个新的 sysctl 开关来控制当网络设备失去连接时如何处理 ARP cache。arp_evict_nocarrier 表示当一个接口失去底层连接的时候是否应该删除 ARP cache 中的条目,而 ndisc_evict_nocarrier 则是类似的针对 neighbor discovery table 进行的配置。两者都是为了在 WiFi 接口在同一网络的多个接入点(access points, AP)之间移动时保留 cache 条目而设计的。相关 commits 包含更多信息。
Security-related
大部分关于对 memcpy() 进行严格边界检查(bounds checking)的相关改动都已经被合并了。不过在内核中启用边界检查的 patch 还没有被合并,需要等待一些剩余问题得到 fix。
io_uring 子系统已经获得了 audit 支持。
SELinux 和 Smack security modules 现在可以对 io_uring 操作也施加安全策略了。
audit 会把传递给 openat2()的 open_how 结构的内容记录下来。
完整性测量架构(IMA,integrity measurement architecture)现在可以根据文件的 group ID 和访问它们的 user 来选择应用哪些规则。
seccomp() 线程针对 Spectre 漏洞的改善工作的默认做法已经改变了,导致这里应用的改善措施变少了,性能也就相应地提高了。请阅读相关 commit 来了解这个改动背后的原因。简单地说,额外的改善措施并没有真正获得更高的安全性。
Internal kernel changes
在过去的几个月里,folio patch set 一直是很多人热议的话题,它是 5.16 版本中第一个被合并进来的功能。这项工作增加了一种 "folio" 类型,来表示那些已知不是 tail pages 的 page,然后重新设计了内存管理部分的内部 API 都来使用 folio 类型。这样就得到了更好的类型清晰度(type clarity),甚至是有小幅性能提升,以及给未来找了很多工作要做。
新增了一个内部函数,cc_platform_has(),它为内核代码提供了一个通用接口,用来查询机密计算(confidential-computing)功能是否存在。它的第一个使用场景就是取代了 mem_encrypt_active() 来检查内存加密(memory encryption)是否打开了。
按照通常的两周时间表来说,5.16 合并窗口可望在 11 月 14 日关闭。到时候我们将带来为了下一个内核版本所做的其余修改的摘要总结。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~