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

Linux News搬运工

共 3747字,需浏览 8分钟

 · 2021-11-23

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

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 深度文章以及开源社区的各种新近言论~



浏览 26
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报