Ubuntu 将重新设计 Initram 虚拟文件系统的压缩策略,将成为linux下最好用最棒棒的文件系统

此前,Ubuntu 将其 Initramfs 的压缩算法从 LZ4-9 (LZ4 压缩算法最高等级)改成了 Z…

此前,Ubuntu 将其 Initramfs 的压缩算法从 LZ4-9 (LZ4 压缩算法最高等级)改成了 Zstd -19 (Zstd 压缩算法最高等级)。然而 12月9日,Canonical 公司的 Julian Andres Klode 提出,Zstd -19 压缩等级导致 Initramfs 出现非常严重的解压时间和内存消耗问题,目前他正在努力进行测试,以为 Ubuntu 重新设计恰当的 initramfs  压缩策略。

Initramfs 全称 init ram filesystem ——是 Linux 一种基于内存的虚拟文件系统:先把目标 root 目录以压缩的 cpio 格式存放。然后 Linux 系统启动时会把 Initramfs 文件解压缩,根据解压出来的文件类型/目录来加载真实的文件系统。一些 Linux 系统如果因非正常关机造成文件系统损坏,则再次开机时会停留 Initramfs 的解压阶段不能正常启动图形化界面。

关于 Initramfs 我们介绍到这,既然 Initramfs 涉及到压缩和解压缩,那压缩算法对它的加载速度影响就非常大。Ubuntu 将压缩算法改成  Zstd-19 后出现解压速度慢和内存消耗大的问题,对低端设备或者嵌入式硬件非常不友好,比如只有 512MB RAM 的 Raspberry Pi Zero(树莓派-zero),就老是崩溃。

为了搞清楚不同压缩等级所需的时间/内存,Canonical 公司的 Julian Andres Klode 做了不同压缩等级的测试。

在 ThinkPad T480s 桌面:

压缩等级用户态时间实耗时间 内存消耗压缩文件大小
lz4-99.65s11.09s12M64M
Zstd-15.69s6.99s24M57M
Zstd-612.59s8.58s99M47M
Zstd-1219.85s10.85s249M41M
Zstd-19 71.29s  26.95s 519M 35M
测试结果

在 树莓派 Pi 4 (arm64)的测试:

压缩等级用户态时间实耗时间 内存消耗压缩文件大小
lz4-921.10s 64.85s21M29M
Zstd-113.73s44.55s21M27M
Zstd-626.07s49.09s91M24M
Zstd-1248.18s54.67s203M22M
Zstd-19 130.07s92.80s350M20M
测试结果

从测试结果的时间和内存消耗来看,即使是最低级的 Zstd-1,也比最高等级的 lz4 算法要优秀得多,因此选择 Zstd 算法肯定是对的,问题就出在最高级的 Zstd-19 ,它对压缩效果的提升并不大,所需的时间和内存却大幅增加。

基于此测试结果,Julian Andres Klode  提出自适应压缩级别的思路:在 512 MB 及以下内存的硬件使用 Zstd-1 ,在 2 GB 及以下内存的设备上使用 Zstd-6,其余设备则使用 Zstd-12。如此一来,所有搭载 Unbuntu 设备的 Initramfs 都只会占用 5% 左右的内存,降低压缩级别还能让有快速 I/O 的硬件开机时间减少几分之一秒,岂不美哉?

新的 Initramfs 压缩策略最晚应该会在 Ubuntu 22.04  发布,22.04 是一个长期支持的版本(LTS),大概在明年 2 月冻结新特性,3 月底发测试版。

后续更新:

  • 在 Julian Andres Klode 提出“按内存决定压缩等级”的想法后,同属 Canonical 公司的 Heinrich Schuchardt 作了一些回应:设备内存只是问题之一,还要考虑 Cpu 性能等其他因素,比如 SiFive 的 Unmatched 和树莓派 4 这两款板子,虽然有 8G 内存,但是 CPU 性能拉跨,这种设备也应该使用低级的压缩算法。
  • …后面有很多人参与讨论,涉及到对 I/O 的速度、开销,压缩算法边际收益等等的讨论,俺就不一一列举了,感兴趣的话可以从 Julian 的《重新评估默认的 initramfs 压缩》邮件开始阅读。

关于作者: qwephp

.

为您推荐