LWN:5.9合并窗口,第一部分!

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

5.9 Merge window, part 1

By Jonathan Corbet
August 7, 2020
https://lwn.net/Articles/828120/

在写本文之时(应该是 8 月 7 日之前的事了),在 5.9 开发周期中已经有 3,900 个 non-merge changeset 合入 mainline 了。这个开发周期才刚开始没多久,就已经有了许多值得指出的新功能了。

Architecture-specific

  • Unicore 架构被移除了,这个架构在 2018 年删除一些没有用到的架构时尚未被移除,这次终于被删除掉了。

  • X86 kernel 在编译生成时使用了 Zstandard compression(即使用了新的 zstd 压缩算法,这里有性能对比 https://facebook.github.io/zstd/ )

  • 目前 x86 kernel 提供了一个专门的设备,用来访问 CPU 的 model-specific register(MSR)。但是提供这个功能会引来许多麻烦。在 5.9 中,kernel 可以按照白名单过滤只允许对少数寄存器的 MSR 写操作,或者彻底禁止(最终目的是希望彻底禁止)

  • 终于合入了 x86 FSGSBASE 指令的支持,这个讨论很久的事情终于结束了。这个功能可以让 user space 来安全高效地访问 FS 和 GS segment base registers。

Core kernel

  • io_uring 子系统现在可以完整支持 asynchronous buffered read(有缓冲的异步读)操作了,不需要回到以前利用 kernel thread 的方式。写操作应该会在后续的开发周期里面也添加进来。

  • deadline scheduler 可以支持 capacity awareness 了。也就是说可以在非对称系统上更合理地决策了。参见这个文档 patch https://git.kernel.org/linus/65065fd70b5a

  • 新增了一个名为 sched_uclamp_util_min_rt_default 的 sysctl 开关。用来控制 realtime task 运行时缺省会增加多少 CPU-frequency,目的是为了在移动设备上控制功耗。这个 patch 里有更多信息 https://git.kernel.org/linus/1f73d1abe583

  • kernel 的 energy model 到目前为止只描述了 CPU 的 energy 行为,扩展之后可以支持外设了。参见此 patch 的描述 https://git.kernel.org/linus/7b7570ad0d76。

  • 新增 close_range() 系统调用,可以让进程高效地关闭多个已打开的文件描述符。

Filesystems and block I/O

  • Btrfs 的 mount 选项新增了 rescue=,这里希望用来今后添加所有 rescue 相关的参数。目前它只包含一些现有参数的别名。移除了 alloc_start 和 subvolrootid 参数。

  • Btrfs 还得到一些性能提升,尤其是 fsync() 操作这里。

  • 在 5.8 kernel 时增加了 inline encryption 的支持,现在 5.9 中 ext4 和 F2FS 文件系统也通过新的 mount 选项 inlinecrypt 来提供了支持。这些文件系统就能利用上 block-device controller 里的 encryption 功能了。

  • 新增了 debugfs= 这个 command-line 选项,用来控制是否提供 debugfs。设为 on,就会正常提供 debugfs,设为 off 的话就跟把 debugfs 彻底从 kernel 中拿掉时一样。no-mount 参数则在 kernel 内部仍支持 debugfs,只是不允许被 mount。

Hardware support

  • Crypto: Silex Insight BA431 random number generators, TI K3 SA2UL crypto accelerators, and Ingenic random number generators.

  • Miscellaneous: NVIDIA Tegra210 external memory controllers, Renesas RPC-IF SPI controllers, Corsair Commander Pro controllers, and Microchip Sparx5 SoC temperature sensors.

  • Regulator: ChromeOS embedded-controller regulators, Qualcomm USB Vbus regulators, Qualcomm LAB/IBB regulators, Silergy SY8827N regulators, Fairchild FAN53880 regulators, and NXP PCA9450A/PCA9450B/PCA9450C regulators.

  • Systems-on-chip: Intel Movidius (A.K.A. "Keem Bay"), Microchip Sparx5, and MStar/Sigmastar Armv7.

  • USB: Xilinx ZynqMP PHYs, SAMSUNG SoC series UFS PHYs, Qualcomm IPQ806x DWC3 USB PHYs, and Ingenic X-series PHYs.

Security-related

  • 使用 Clang 编译的 kernel 可以配置成把 on-stack variables 都自动初始化成 0。Clang 今后会如何实现这个功能,目前还不清楚,参见https://git.kernel.org/linus/f0fe00d4972a ,所以今后等 Clang 有新的 release 的时候,这个选项可能还需要再改动一次。

  • seccomp 子系统在跟 user-space notification 配合在一起使用时,可以允许管理进程(supervisor process)向被监控进程注入文件描述符。这样就可以完全模拟那些创建文件描述符的系统调用了。

  • 新增 CAP_CHECKPOINT_RESTORE capability,提供了要对进程做 checkpoint 和 restore 的一些权限,这样就不需要其他权限了。这个 capability 在 6 月份时作为 CAP_RESTORE 曾经介绍过。参见 merge commit 来了解它具体做了哪些动作。

Internal kernel changes

  • 移除了只有在 Alpha 架构上才使用的 smp_read_barrier_depends() barrier,主要依靠 READ_ONCE()里面的一些更聪明的逻辑来替代。

  • GCC 11 提供了要支持 KCSAN data-race detector (LWN:使用KCSAN查找race condition!)的所有功能,因此 KCSAN 现在也可以用在 GCC 编译的 kernel 上了。

  • uninitialized_var()这个宏被移除了。它的目的是去除编译器关于变量可能未初始化就使用的 warning。原因是它经常帮助隐藏了一些 bug。

  • 在 5.8 kernel 的 entry/exit 代码中进行的许多清理,有一些延续到了 5.9 kernel 中,主要是更通用的 entry 和 exit 函数。要进入 kernel,需要做许多在各个体系架构上各不相同的动作,不过整体要做的事情以及它们之间的前后顺序通常都基本相同。新的代码如果被各个体系架构都采用的话,就可以帮助减少这一部分的代码,也避免今后再引入这类 bug。参见 entry, exit, interrupt handler 的相关 patch (https://git.kernel.org/linus/142781e108b1 等)来帮助理解。

5.9 merge window 预计会持续到 8 月 16 日,目前还有许多重要的 git 仓库还没有合入,因此第二部分的 summary 预计会包含更多的改动,到时候可能要花几天时间来总结并发布到 LWN 上了。

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值