Linux 4.0
Linux 4.0 于 UTC-7 4月12日发布,代号是 Hurr durr I'ma sheep
看起来非常无厘头。
这是一次大版本升级,上一次从 2.6.39
跳到 3.0
还是2011年7月的事情,当时新特性非常给力,比如 Xen dom0 支持, Btrfs 自动 defragmentation / scrubbing 以及其它性能改进,还有 Wake on WLAN 支持等等。
根据名为「我是一只羊」的发布者,发布 v4.0 时内核 git repository commit 总数超过50万,其中的 git 对象超过4百万。巧的是,2011年7月发布 v3.0 时 commit 总数刚好是25万,而 git 对象是2百万,正好翻倍了。
看起来内核新版本的发布,从基于特性切换到了基于时间 Linus 看似更倾向于后者。
v4.0 最显著的的特性要算是 Red Hat 和 SUSE 合作开发的 live kernel patching infrastructure (利用内核的 ftrace
功能) - 具体的代码在源代码树的 kernel/livepatch
目录下
livepatch: kernel: add support for live patching [commit]
livepatch: samples: add sample live patching module [commit]
更多细节可以看 [merge commit]
还有个值得注意的显著特性是:新的 lazytime
metadata update model 引入的新 lazytime
挂载选项来解决使用 relatime
(同时也是违背 POSIX 标准的)时导致某些应用程序无法正常工作的问题。
使用该挂载选项会导致 access / modified / changed 时间更新只在 page cache 里发生。变化只有在下面两种情况下才会被写到磁盘:
- inode 因系统调用必须被更新,如
fsync()
,syncfs()
或sync()
- 未被删除的 inode 从内存中被 evict 前
以上两种都是 POSIX 兼容的。
详细的特性和改进列表请参考 Linux Kernel Newbies 和 LKML 相关页面。
估计又会有一批傻屄程序员写的应用(内核版本号检查时的猪逻辑,你们懂的)在升级后会挂掉,就如同当初从 v2.6.39 升级到 v3.0 时一样。当初 Oracle Linux 为了避免这种问题,特地把 UEK 2 版本标记为 2.6.39 而实际上其 code base 是基于 upstream v3.0 的。希望有人能把这类应用收集起来做个 hall of shame ;-D