LWN: Linux 5.6合并窗口进展——第一部分!

Linux5.6内核版本带来了众多新特性和改进,包括支持ArmE0PD和RNG指令,增强了实时任务调度,引入了timenamespace,支持BPF分发器,新增openat2()系统调用,Btrfs文件系统的异步discard模式,以及大量的硬件支持更新,如GPIO控制器,温度传感器,ADC转换器等。此外,WireGuard虚拟专用网络实现也被合入mainline。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

The 5.6 merge window opens

By Jonathan Corbet
January 30, 2020

原文来自:https://lwn.net/Articles/810780/

在写此文的时候(注:在1月30日之前),已经有4726个changeset合入了mainline git仓库,这些都是5.6开发周期的一部分。按近期的标准来说,这个进程不算快,不过也还是新增了许多功能,其中一部分其实已经等了几年才合入mainline。本文会介绍一下5.6 合并窗口的前半程的总结。

Architecture-specific

  • Arm E0PD功能得到支持。这个功能会通过kernel page-table隔离来增强安全性,同时不会增加额外开销。

  • Arm8.5 RNG指令得到支持,可以使用硬件随机数生成器,可以用来初始化kernel的随机数生成器。

Core kernel

  • 在heterogeneous异构系统上(big.LITTLE)实时任务现在可以设置uclamp_min参数(在kernel 5.3的时候引入了scheduler utilization clamping功能),从而确保他们被调度到一个足够强大的CPU上去。

  • Time namespaces终于被合入了。这个功能的主要用途就是确保在容器(container)从一个host主机迁移到另一个的时候,时钟行为仍然正常。不过肯定也会出现一些其他用途的。可以参看这个commit:https://git.kernel.org/linus/769071ac9f20

  • 新增了一个启动时候的参数(managed_irq),会让kernel来阻止managed interrupt来打扰那些隔离开了的CPU。参看相关commit:https://git.kernel.org/linus/11ea68f553e2

  • 合入了BPF分发器(dispatcher)以及批处理的BPF map操作,两者的介绍在这篇文章https://lwn.net/Articles/808503/

  • BPF全局函数,这是为了在kernel支持BPF库的一个准备工作。下一步是动态程序扩展(dynamic program extensions),这会允许在某个全局函数在被使用的时候来动态加载,或者被动态替换掉。

  • 新增了CPU idle-injection device,可以通过强制让过热的CPU短时间进入idle,来帮它降温。参看https://git.kernel.org/linus/0a1990a2d1f2

  • 新增了openat2()系统调用。包含一些新的flag用来限制路径如何解析。参看https://git.kernel.org/linus/b55eef872a96

Filesystems and block I/O

  • Btrfs文件系统新增了一个"asynchronous discard"模式,可以通过mount的时候使用discard=async参数来打开。这个功能没有什么文档,它会创建一个不再使用的block的列表,用于后续在合适的实际传递给存储设备的"discard"操作,而不是每次都马上执行discard动作。这样就可以避免正常读写操作被discard操作给拖慢,并且增大重用这些block的概率,并且可以让一些大范围的block discard操作可以一次完成。可以看patch的介绍:https://lwn.net/Articles/803037/

Hardware support

  • GPIO and pin control: SiFive GPIO controllers, Xylon LogiCVC GPIO controllers, Qualcomm WCD9340/WCD9341 GPIO controllers, and NXP IMX8MP pin controllers.

  • Hardware monitoring: Maxim MAX31730 temperature sensors, Maxim MAX20730, MAX20734, and MAX20743 regulators, Infineon XDPE122 VR controllers, Analog Devices ADM1177 power monitors, Allwinner sun8i thermal sensors, and Broadcom AVS RO thermal sensors. Also: 现在可以通过sysfs来查询ATA磁盘驱动里面的传感器了(尤其是温度值)),see this commit for details.

  • Industrial I/O: Analog Devices AD7091R5 analog-to-digital converters, Linear Technology LTC2496 analog-to-digital converters, Bosch BMA400 3-axis accelerometers, and All Sensors DLHL60D and DLHL60G pressure sensors.

  • Miscellaneous: Intel Uncore frequency controllers, TI K3 UDMA controllers and ring accelerator modules, HiSilicon DMA Engines, HiSilicon SPI-NOR flash controllers, ROHM BD71828 power regulators, Monolithic MPQ7920 power-management ICs, NXP i.MX8M DDR controllers, Microchip PIT64B clocks, Qualcomm MSM8916 interconnect buses, NXP i.MX INTMUX interrupt multiplexers, and AMD secure processors with trusted execution environment support.

  • Network: Broadcom BCM84881 PHYs, Qualcomm Atheros AR9331 Ethernet switches, Qualcomm 802.11ax chipsets, ZHAW InES PTP time stamp generators, and Marvell OcteonTX2 interfaces.

  • Sound: the ALSA subsystem 有不少改动,为了避免year-2038崩溃问题,也包括一些user-space API的扩展. 这里(https://git.kernel.org/linus/80fe7430c708)描述了主要改动. Support was also added for Qualcomm WCD9340/WCD9341 codecs, Qualcomm WSA8810/WSA8815 Class-D amplifiers, Realtek RT700, RT711, RT715, and RT1308 codecs, Ingenic JZ4770 codecs, and Mediatek MT6660 speaker amplifiers.

  • USB: Thunderbolt 规范加入成为了USB4的一部分,kernel里的Thunderbolt配置选项也相应的改了名字。此外还支持了MediaTek MUSB controller以及Intel EMMC PHY。

Memory management

  • 新增了一个cgroup控制接口来管理hugetlb的应用,参看https://git.kernel.org/linus/faced7e0806c

Networking

  • 经过很长时间,WireGuard虚拟专用网络(VPN)的实现终于合入了mainline。Linux Torvalds发了个W00t,表示对这个工作很满意https://lwn.net/ml/netdev/CAHk-=whKJ2Zae4xqk3op9aoB_PVEfwTKQ1iAxnoEY2K6C0SPcQ@mail.gmail.com/

  • 新增了"enhanced transmission selection scheduler"排队规则。这个功能文档很少,不过在help里面有一些描述:“这个Enhanced Transmission Selection scheduler是一个classful(不支持子网的路由模式)的队列规则,把此前的PRIO和DRR qdiscs的功能合并进同一个scheduler里面了。ETS则会让配置一些列严格的并且共享带宽的频段更加容易,从而实现802.1Qaz里面描述的transmission selection功能”。更多信息可以参加IEEE 802.1Qaz的页面。

  • 一直以来大家都希望把ethtool的ioctl()接口改为netlink。相应的基础工作已经有许多合入了5.6。参看相应的commit和这个文档https://git.kernel.org/linus/2b4a8990b7df

  • 开始在mainline里面加入multipath TCP的功能了,首先合入了一些它所依赖的功能。Multipath TCP在5.6里面还是不会得到支持,不过应该很快了。

  • 新增了BPF_PROG_TYPE_STRUCT_OPS这个BPF program类型,允许BPF program来填写,这样kernel可以使用相应的函数指针。第一个利用这个功能的场景是允许使用BPF来写TCP拥塞控制算法,例如实现了DCTCP https://git.kernel.org/linus/09903869f69f

  • 加入了Flow Queue PIE packet scheduler,主要目标是解决bufferbloat问题(缓存过满)。有线调制解调器可能可以利用上这个FQ-PIE功能。

Security-related

  • 将原有的可以在运行时来关闭SELinux security module的功能改为deprecated,今后应该会把这个功能拿掉。这个功能目前在Fedora和RHEL里面还有用,不过许多其他发行版已经不再使用了。正确的关闭SELinux的方式应该是使用selinux=0启动参数。

    有意思的是,为了让大家能尽快放弃使用这个功能,一个措施是在每次release里面都在启动过程中加长延时,让大家越来越受不了。

Internal kernel changes

  • ioremap_nocache()和devm_ioremap_nocache()一直有点重复,因为ioremap()功能已经提供了uncached mapping。这些函数就被移除了,这个改动影响了300多个文件,相应的调用点都修改好了。

按往常的经验来推算,5.6合并窗口会在2月9日左右关闭,而最终5.6版本的发布时间预计是在3月底或者4月初。建议继续等我们的下半部分的总结,应该会在5.6-rc1 release出来之后写完。

全文完

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值