initramfs-toolsがLZ4アーカイブ形式をサポート
「initramfs-tools」に「LZ4」アーカイブ形式のサポートが追加されました。initramfs-tools
「initramfs」の生成や展開、更新など、「initramfs」の操作を行うツール群です。「Linux kernel」のインストール時やアップデート時、毎回「initramfs」の生成が行われます。
「initramfs」を経由して「Ubuntu」が起動するため、「initramfs」は「Ubuntu」にとって重要なファイルです。
また圧縮された「initramfs」を展開するのに要する時間が、直接「Ubuntu」の起動時間に影響します。
ここで紹介しているアーカイブ形式は「CPIO」のことではなく、圧縮のためのアーカイブ形式のことです。
gzipとLZ4
「initramfs-tools」が「initramfs」を生成する際、「gzip」による圧縮が行われます。今回の変更により「LZ4」による圧縮がサポートされますが、現時点では引き続き「gzip」による圧縮が行われます。
すでに「Ubuntu 18.10」では、「LZ4」のサポートが行われた「initramfs-tools」が提供されています。
パフォーマンスとファイルサイズのトレードオフ
世の中には様々なアーカイブ形式が存在していますが、アーカイブ形式を比較する上で以下の2点が、よく話題に挙がります。- 圧縮・展開の速度
- 圧縮後のファイルサイズ
「gzip」と「LZ4」でも同様です。
ここではデフォルトのアーカイブ形式にどちらを採用するのかが議論されました。
「LZ4」は「gzip」と比較して展開速度が速いのですが、その一方でファイルサイズが大きくなり、ディスクからファイルを読み込む時間が増加します。
これらの要素は「Ubuntu」の起動時間に影響を与えます。
ただしディスクからファイルを読み込む時間は、近年多くのPCで採用されているSSDにより、影響は小さくなります。
またファイルサイズは、「/boot」ディレクトリーの使用量にも影響を与えます。
もしユーザーが「/boot」用のパーティションを作成し、その「/boot」用のパーティションサイズが小さい場合、ファイルサイズの増加により「/boot」の空き容量が足りなくなる可能性が出てきます。
もし「Linux kernel」のアップデート時に「/boot」の空き容量が不足している場合、「initramfs」の生成に失敗するため、新しい「Linux kernel」で「Ubuntu」を起動できなくなります。
自動選択はどうだろうか
現状デフォルトのアーカイブ形式は、「gzip」になっています。常に予め決められたアーカイブ形式(つまりデフォルトのアーカイブ形式)を利用するのではなく、コマンドオプションにより柔軟にアーカイブ形式を選択できるようにしてはどうだろうか、という提案があります。
この提案に乗り、「/boot」の容量に応じて自動的に最適なアーカイブ形式を選択する方式が提案されています。
つまりファイルサイズを最小化する「xz」形式と、展開速度を優先する「LZ4」形式を、ユーザーの環境に応じて自動的に選択する仕組みが提案されています。
テスト
各アーカイブ形式毎にテスト行われました。そのテスト結果が以下で紹介されています。
「HDD」と「SSD」環境における各アーカイブ形式毎の起動時間は、以下のようになっています。
この結果によると、「HDD」環境では「gzip」が最適な結果になっています。
「SSD」環境では、「gzip/lzo/LZ4」がほとんど差がない結果になっています。
次にファイルサイズを見てみましょう。
「LZ4」より「gzip」の方がサイズが小さくなっています。
この結果はあくまで一例であり、今後も異なる環境でのテストが予定されています。