关注了就能看到更多这么棒的文章哦~
5.10 Merge window, part 1
By Jonathan Corbet
October 16, 2020
https://lwn.net/Articles/834157/
在撰写本文之时,kernel 的 mainline git 仓库中,正在开发的 5.10 版本已经合入了 7,153 个 changeset。这是过去 4 天的工作成果,说明这个开发周期很明显有个强劲的开头。请继续阅读来了解 5.10 kernel 目前为止合入了哪些重大的改动。
Architecture-specific
arm64 架构可以对 Arm 的 CMN-600 interconnect 进行 performance-event monitor 了。
支持了 Arm v8.5 memory tagging extension。这个功能会允许对物理内存中每 16 字节的区域分配一个 4 bit 的 tag。CPU 在通过指针来引用这个区域的时候,它会确保指针中保存的 tag 跟这个区域对应的 tag 是一致的。用好这个功能就可以检测出 use-after-free 和 buffer-overflow 的 bug,从而阻止这类攻击。https://lwn.net/Articles/834157/ 这里有更多信息。
ia64 的 performance-monitor 代码被移除了。估计不会有人怀念这个功能,因为这个功能已经好几年无法正常工作了。
AMD 的"secure encrypted virtualization" (SEV) 功能会把分配给虚拟机(guest)的 memory 进行加密。Linux 已经支持 SEV 一段时间了。5.10 会包含新增的 SEV-ES 功能,对 SEV 进行了扩展,可以加密 guest 的处理器寄存器了,这样一来,除非 guest 专门把这些内容共享出来,否则 host 也看不到这些内容了。
Core kernel
io_uring 子系统支持创建 restricted ring,可供传递给一些不那么可信的进程。
pidfd_open()系统调用新增了 PIDFD_NONBLOCK flag,用来创建非阻塞模式的文件描述符。参见这个 commit(https://git.kernel.org/linus/4da9af0014b5 )来了解 non-blocking pidfd 有些什么特性。
Filesystems and block I/O
Btrfs 文件系统的 fsync()操作性能有显著提升。
XFS 进行了许多工作来解决 year-2038 问题。目前这个文件系统里的时间戳已经能支持到 2468 年了。开发者们明确知道在 448 年之后会有问题,不过他们不打算在 440 年内来看这个问题。
Hardware support
Graphics: Lontium LT9611 DSI/HDMI bridges, Toshiba TC358775 DSI/LVDS bridges, Toshiba TC358762 DSI/DPI bridges, Mantix MLAF057WE51-X MIPI-DSI LCD panels, Cadence DPI/DP bridges, Samsung S6E63M0 RGB DSI interfaces, and NXP i.MX8MQ display controllers.
Hardware monitoring: Analog Devices ADM1266 sequencers, MPS MP2975 multi-phase controllers, Intel MAX10 BMC monitoring chips, and Moortec Semiconductor MR75203 PVT controllers.
Industrial I/O: Analog Devices ADXRS290 dual-axis MEMS gyroscopes, AMS AS73211 XYZ color sensors, and TI HDC2010 relative humidity and temperature sensors.
Miscellaneous: Amazon Annapurna Lab memory controllers, MediaTek MStar interrupt controllers, Xiphera XIP8001B true random number generators, Ingenic true random number generators, MCHP Sparx5 SDHC interfaces, Baikal-T1 SPI controllers, TI LP5036/30/24/18/12/9 LED controllers, Kontron sl28cpld interrupt/watchdog/PWM controllers, ENE KB3930 embedded controllers, Intel MAX 10 board management controllers, Kinetic KTD253 backlight drivers, Hisilicon 3670 SPMI controllers, Hisilicon Hi6421v600 SPMI power-management ICs, and Qualcomm SM8150 and SM8250 interconnect buses.
Pin control: Qualcomm 8226 pin controllers, Actions Semi S500 pin controllers, Mediatek MT8192 and MT8167 pin controllers, Toshiba Visconti TMPV7700 series pin controllers, and Allwinner A100 pin controllers.
Regulator: Richtek RT4801 regulators, Raspberry Pi 7-inch touchscreen panel ATTINY regulators, MediaTek MT6360 SubPMIC regulators, and Richtek RTMV20 load switch regulators.
Sound: MediaTek MT6359 codecs, Microchip S/PDIF controllers, Cirrus Logic CS4234 codecs, and Texas Instruments TAS2764 mono audio amplifiers.
USB: Hisilicon hi3670 USB PHYs, Mediatek MT6360 Type-C controllers, UniPhier AHCI PHYs, Intel Lightning Mountain USB PHYs, STMicroelectronics STUSB160x Type-C controllers, Maxim TCPCI based Type-C chips, and Qualcomm PMIC USB Type-C detectors.
提供了一套全新的 API 来操作 GPIO line。当然这个文档基本没有什么文档,可以从这里看到一些信息(https://git.kernel.org/linus/b53911aa872d )。
将"raw" char device 放入了 deprecated 状态,预计会在 5.14 版本中移除。这种 device 给块设备提供了一套传统 Unix 风格的字符设备接口。它之前主要用来做 direct I/O(从 2002 年开始使用 O_DIRECT flag 可以进到这个模式)。
Security-related
crypto 子系统中移除了对 RC4-HMAC-MD5 KerberosV 算法的支持。这种算法创建出来是为了跟 Windows 2000 兼容。作者说移除这个算法只会影响那些从 2008 年起再没有过升级更新的、现在仍然连在网络上的 Windows NT/2000 系统。
支持了 SM2 数字签名算法。
在 SELinux policy 加载之前,可以移除文件的 security.selinux 扩展属性了。这样就可以在尚未启用 SELinux 的环境里对文件进行"unlabel"操作了。
Virtualization and containers
支持了 Amazon Nitro enclaves。参看 Documentation/virt/ne_overview.rst 来了解更多。
Internal kernel changes
新增了一种特别的 lock 类型,seqcount_latch(https://lwn.net/Articles/834157/)
有一些代码或者数据 p,被加入 kernel image 里面,但是没有明确被 linker script 加入,它们被成为“orphan ps”。在 kernel 编译过程中会生成针对它们的 warning 信息。这个改动的目的是保护 kernel 不受 linker 放置这些 p 时产生负面影响。changelog(https://git.kernel.org/linus/34eb62d868d7) 中称这些 orphan ps 是一个长久存在的、经常引起莫名其妙 bug 的来源。
静态调用(static call)是一种高效地进行间接函数调用(indirect function call)的机制,尤其是在一些系统上,如果没有这种机制,就必须要使用 retpolines (https://support.google.com/faqs/answer/7625886) 来避免 Spectre 漏洞攻击。从 2018 年开始就在开发这个机制了(https://lwn.net/Articles/774743/#static) ,现在终于合入 5.10 了。
printk()底层实现里面开始使用了一个新的 lockless ring buffer,这是解决 printk 中一系列问题的第一步。此前的文章(https://lwn.net/Articles/800946/) 中有介绍 printk()的工作机制,以及这个新加的 ring buffer 是怎么回事。
编译 kernel 所需的 Clang 最小版本变为了 10.0.1。
5.10 合并窗口预计会在 10 月 25 日关闭,之后会开始稳定开发期。请静待 LWN 届时对于 5.10 合并周期的第二篇文章。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
欢迎分享、转载及基于现有协议再创作~
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~