LWN:5.15 合并周期后半部分!

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

The rest of the 5.15 merge window

By Jonathan Corbet
September 13, 2021
DeepL assisted translation
https://lwn.net/Articles/868221/

Linus Torvalds 在 9 月 12 日 宣布了 5.15-rc1,并且关闭了合并窗口,当时已经有 10,471 个 non-merge changesets 合入了 mainline 仓库。其中包括了很多重要改动和改进。请继续阅读下面的总结来了解自从上次介绍过前半周期之后又合入的将近 7,000 个改动都包括哪些内容。

Architecture-specific

  • 支持 Arm 的非对称系统的 scheduling support 如期合入了。参见相关的 documentation patch 了解更多。

  • Arm64 内核现在可以作为 Hyper-V 客户端编译生成了。

  • ARC 架构现在支持了 3 级和 4 级页表。很明显这是朝着最终支持 64-bit 处理器迈出的一步。

Core kernel

  • printk() indexing patch 已经被合入了。这个功能可以从 printk() 打印的所有消息作为 list 提取出来,用户空间的监控工具就可以利用这个 list 来检查有哪些变动了。

  • 利用 memory cgroup 进行内存使用情况统计的功能可以支持 kernel 中更多的数据结构了,包括用来进行 polling,signal handling,namespace 等等场景的数据。不过其中一些改动后来已经被 revert 掉了,因为导致了性能有所下降。

  • 内存管理子系统中可以将 page 降级放到一个较慢的 NUMA node 上,而不是完全回收这部分内存。这个机制可以将那些不太常用的内存 page 移动到使用 nonvolatile memory 的 NUMA node 上去,这比起直接丢弃这些 page 要好。这是之前 LWN 文章 中介绍过的 tiered memory-management 的一部分.

  • 合入了 multi-preference memory policy patch。这个功能可以让进程提出要求它的内存 page 分配要来自于它指定的那几个 NUMA node。

  • 新增 process_mrelease() 系统调用,允许特权进程来加速回收已 exit 的进程的内存。

  • LWN 曾经介绍过, 在 mmap() 中增加了 MAP_DENYWRITE 的代码被移除了。这样一来就减少了那些不允许对文件进行写入的情况下看到 ETXTBSY 错误的情况。参见 this commit 了解具体是哪些场景.

  • "Event probes" 是一类新增的 kernel probe,用来挂在现有的 trace event 上,不过可以带有自己特有的 format string 了。这样就可以对于现有的 tracepoint 提供一个新的视角了。 这个 commit 带有简要的使用介绍。

  • 合入了 DAMON subsystem。DAMON 允许 user space 来监控和优化内存使用情况。这个 documentation patch 包含了更多信息。

Filesystems and block I/O

  • 在 mount 上来的 XFS 文件系统中无法再关闭 disk quota 统计。/Enforcement/ 仍然可以关闭,但是底层的统计 tracking 仍然在进行。根据 pull request 里的说法 "我们尽量小心进行的这个修改,除了 quotaoff 不再会导致系统 hang 之外用户应该不会看到其他差异了"。

  • XFS 现在支持了时间戳超过 2038 年的文件系统。这个功能已经存在一段时间了,今后不再被认为是实验性的功能了。

  • EROFS 文件系统支持了在未压缩的文件上进行 direct I/O。

  • Overlay 文件系统现在可以正确处理 immutable, append-only, sync, 以及 noatime 属性了。

  • NTFS 文件系统有了一个新的实现,据说比起 kernel 现在的版本要好得多。之前人们还 不确定 这个版本会不会合入 5.15,看来这些文件系统维护者的担忧已经被扫清了。

Hardware support

  • Clock: Qualcomm SC7280 clock controllers, Qualcomm MSM8953 global clock controllers, Qualcomm MSM8994 multimedia clock controllers, Qualcomm SM6350, SM6115 and SM4250 global clock controllers, and MediaTek MT8192 clock controllers.

  • Graphics: Innolux EJ030NA 320x480 LCD panels, Widechips WS2401 DPI panels, Samsung ATNA33XC20 eDP panels, and Ilitek ILI9341 240x320 QVGA panels.

  • Industrial I/O: Sensirion SGP40 gas sensors, Analog Devices AD5110 digital potentiometers, and Renesas RZ/G2L analog-to-digital converters.

  • Media: Amlogic Meson IR transmitters, Sony imx335 and imx412 image sensors, and OmniVision OV9282 sensors.

  • Miscellaneous: Xilinx Versal FPGAs, General Electric ACHC microcontrollers, Nintendo Wii consoles, Qualcomm SC8180X interconnects, Realtek RTL8188EU Wireless LAN NICs (replacement driver, still in staging), Intel IXP4xx expansion bus interfaces, Renesas RZ/G2L USB/PHY controllers, Apple DART I/O memory-management units, Renesas I2C-controlled synchronization management units, MediaTek CPU-frequency controllers, Renesas RZ/G2L DMA controllers, and NVIDIA Tegra30 thermal sensors.

  • PCI: Rockchip DesignWare PCIe controllers, Toshiba Visconti PCIe controllers, and Keem Bay PCIe controllers.

  • Pin control: Qualcomm 9607 pin controllers, Qualcomm SM6115 and SM4250 pin controllers, STMicroelectronics STM32MP135 pin controllers, NXP i.MX8ULP pin controllers, Intel Keem Bay pin controllers, and Renesas RZ/G2L pin and GPIO controllers.

  • Sound: Renesas RZ/G2L serial sound interfaces.

Security-related

  • 内核现在支持 GCC 的 -fzero-call-used-regs=used-gpr 编译选项了。按英语直译的话,这意味着函数内部使用到的所有寄存器都会在函数返回之前被清零。这个做法可以避免数据被泄露到函数之外。同时,正如 Kees Cook 在 change log 里面 所说的,这个功能 "有助于将内核映像文件中有用的 ROP [return-oriented programming] gadget 数量减少大约 20%".

Virtualization and containers

  • 新增了一个完全没有文档的 gpio-virtio 驱动,允许 guest 访问 host 系统所提供的 GPIO 引脚。

  • 新增了一个驱动框架,名为 "VDUSE"。可以利用它给 guest 的 Virtio 传输层在用户空间实现虚拟块设备(virtual block devices)。参见 this documentation commit 来了解更多。

Internal kernel changes

  • Restricted DMA pools 可以被用来对 DMA 设备在没有 I/O MMU 的系统上限制能访问的 page。

  • Kernel 编译缺省打开了 -Werror flag,只要有编译器 warning 就会直接导致编译失败。新增了一个 WERROR config 变量,可以用来关闭这个选项,这样就可以在使用太新的(或者太旧的)编译器的时候避免新增的 warning 阻止了编译。这个改动目前导致有些情况下会出现编译失败,不过目前 Torvalds 并不想解决这些情况:

    尽管  明确要求要进行 clean build, 并且一般来说每个 merge window 里面都会拒绝几个 build request,但这并不意味着我们的编译真的就一直保持 clean 了。

    我提出要没有 warning 的要求已经很多年了。这意味着 我的 编译环境多年来都是很干净的了。

    我希望 所有的 编译都要是 clean 的,至少要尽量 clean。

    尽管这样,Torvalds 最终还是合入了 这个 patch 来将 WERROR config 变量的缺省值设置得跟 COMPILE_TEST 匹配起来从而减少全球各地的 kernel 编译环境碰到的麻烦。还有一个 patch 用来消除 GCC 针对 main 这个名字被用在不是函数的地方而发出的 warning 信息。

  • 当使用 Clang 编译器来编译 kernel 的时候,也会缺省使用 LLVM integrated assembler。

  • SLUB 分配器被大幅重写,希望尽量减少关闭中断的次数,从而能跟实时抢占功能配合起来。参见 this changelog 了解更多。

  • 不再可以使用 ioremap() 来创建可执行的 mapping 区域。

  • kernel documentation 中许多内容被翻译为繁体中文。

注意 folio patch set 并没有合入。参见 this article 来了解原委。

总体来说,这个合并窗口还是非常困难的。按 Torvalds 的说法: “这次合并窗口并不像我们以前有时候能达到的那么顺利的合并窗口”。希望后面的稳定阶段能顺利一些。如果一切顺利能在 9 周的原定节点完成的话,我们会在 10 月 31 日看到最终的 5.15 版本正式发布。

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

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

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

79deedcc9cb4258f3f712c92f9bf9b9b.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值