initramfsのデフォルトの圧縮形式を再検討
「initramfs」に使用するデフォルトの圧縮形式が再検討されています。LZ4からZstdに変更した
「initramfs」に使用するデフォルトの圧縮形式が「lz4 -9」から「zstd -19」へ変更されましたが、これにより以下の問題が引き起こされました。- アーカイブの処理が非常に遅い
- アーカイブの処理に多くのメモリーが必要
「1.」の問題は「zstd -19」を採用するすべての環境で影響を受けます。
「2.」の問題は「Raspberry Pi Zero」のようなメモリー搭載量が少ない環境でメモリー不足によるクラッシュを引き起こします。
圧縮形式と圧縮レベルのテスト
「Ubuntu」の開発者は問題を共有するため、アーカイブの処理にかかる時間、アーカイブの処理時の消費メモリー、そしてアーカイブサイズの3つの観点から、圧縮形式と圧縮レベルのテストを行いました。Ubuntu Desktop 22.04 LTS 開発版(amd64)
以下の結果は「Ubuntu Desktop 22.04 LTS 開発版(amd64)」で行われたテストの結果です。圧縮形式/圧縮レベル | ユーザータイム | 経過時間 | メモリー | ファイルサイズ |
---|---|---|---|---|
lz4 | 9.65秒 | 11.09秒 | 12MB | 64MB |
-1 | 5.69秒 | 6.99秒 | 24MB | 57MB |
-6 | 12.59秒 | 8.58秒 | 99MB | 47MB |
-12 | 19.85秒 | 10.82秒 | 249MB | 41MB |
-19 | 71.29秒 | 26.95秒 | 519MB | 35MB |
ファイルサイズとリソース消費量のバランスから「-12」付近の圧縮レベルが妥協点になるのではないかとのことです。
Ubuntu 20.04 LTS(arm64/Raspberry Pi 4)
以下の結果は「Ubuntu 20.04 LTS(arm64/Raspberry Pi 4)」で行われたテストの結果です。時間の計測対象は「mkinitramfs」のみが対象です。
「update-initramfs」ではファームウェアのコピーなど追加処理により、もっと多くの時間がかかります。
圧縮形式/圧縮レベル | ユーザータイム | 経過時間 | メモリー | ファイルサイズ |
---|---|---|---|---|
lz4 | 21.10秒 | 64.85秒 | 21MB | 29MB |
-1 | 13.73秒 | 44.55秒 | 21MB | 27MB |
-6 | 26.07秒 | 49.09秒 | 91MB | 24MB |
-12 | 48.18秒 | 54.67秒 | 203MB | 22MB |
-19 | 130.07秒 | 92.80秒 | 350MB | 20MB |
「-6」がいい感じであるとのことです。
適応圧縮を活用できないか?
「Zstd」は「適応圧縮(Adaptive compression)」をサポートしており、I/O速度による影響を加味しながら圧縮レベルを調整する機能を提供しています。例えば「Raspberry Pi」のようにI/Oが遅い環境ではCPUのアイドル時間を抑えるため、より高い圧縮レベルが選択されるでしょう。
この機能を本件に活用できないか検討が提案されています。
メモリー搭載量に応じて圧縮レベルを調整する?
メモリー搭載量に応じて圧縮レベルを調整する方法も提案されています。例えばメモリー搭載量の5%以内に抑えるなら、以下のような調整になります。
- メモリー搭載量が「512MB」以下なら「-1」
- メモリー搭載量が「2GB」以下なら「-6」もしくは「--adapt=min=1,max=6」
- それ以外なら「-12」もしくは「--adapt=min=12」
本件の解決に向けどのような方針や取り組みが好ましいのか、上記リンク先で議論が行われています。