关注了就能看到更多这么棒的文章哦~
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深度文章以及开源社区的各种新近言论~