Linux kernelとinitramfsのアーカイブ形式をLZ4に
現在開発中の「Ubuntu 19.10」では、「Linux kernel」と「initramfs」のデフォルトのアーカイブ形式が「LZ4」になる予定です。この変更により「Ubuntu」の起動にかかる時間が改善されます。
Linux kernel及びinitramfsの読み込みと展開
「Ubuntu」を起動すると、起動ストレージから「Linux kernel」及び「initramfs」イメージの読み込みと展開が行われます。展開は圧縮されたアーカイブを展開する処理を指します。
この時ストレージの速度や展開にかかる時間(CPUやメモリーの性能)が起動時間に影響を与えます。
「Linux kernel」のアップデート時などイメージを作成する時も同様に、これらの要素に影響を受けます。
読み込みにかかる時間と展開速度のトレードオフ
ストレージからイメージを読み込む際、イメージサイズ(ファイルサイズ)が小さいほど読み込みにかかる時間を抑えることができます。イメージサイズを小さくするには、圧縮率が高い圧縮形式でイメージを作成する必要があります。
その一方で圧縮及び展開にかかる時間は圧縮・展開のアルゴリズムに依存し、複雑なアルゴリズムほど時間がかかる傾向にあります。
一般的に高い圧縮率を求めるなら、高度なアルゴリズム(コストがかかるアルゴリズム)を選択することになります。
つまりイメージサイズを小さくするには圧縮率を高くする必要がありますが、圧縮・展開を早く行うには圧縮率が高くないアルゴリズムを採用する必要があります。
何が一番影響を与えるのか
イメージの読み込みにかかる時間と展開にかかる時間に着目すると、これらに強い影響を与える要素はハードウェア環境によって変わってきます。遅いCPU + 遅いストレージ
「遅いCPU + 遅いストレージ(例:HDD 5400 RPM)」を搭載した環境では、イメージの読み込みにかかる時間が最も影響を与えます。遅いCPU + 速いストレージ
「遅いCPU + 遅いストレージ(例:SSD)」を搭載した環境では、イメージの展開にかかる時間が最も影響を与えます。速いCPU + 速いストレージ
様々な圧縮形式において僅かな読み込み時間の差しかありません。Ubuntu kernel teamでテストを行った
「Ubuntu kernel team」は以下の圧縮形式でイメージを圧縮し、x86環境でテストを行いました。- BZIP2
- GZIP
- LZ4
- LZMA
- LZMO
- XZ
このうち「BZIP2」「LZMA」「XZ」は展開に時間がかかり、早々に候補から除外されました。
イメージサイズ
イメージサイズの観点で見てみると、イメージサイズが最も小さくなるのは「GZIP」です。続いて「LZO」で最大16%のサイズ増加、「LZ4」で最大25%のサイズ増加が見られました。
展開にかかる時間
展開にかかる時間で見てみると、「LZ4」や「LZO」が「GZIP」より高速な展開を行ったケースが計測され、特に「LZ4」はそのケースが「LZO」よりも多くありました。LZ4でどのくらい速くなるのか
起動時間の短縮はハードウェア環境によって異なり、テストでは「GZIP」と比較し「0.3秒(遅いハードウェア)」から「0.05秒(高速なハードウェア)」の短縮結果が測定されています。例え「遅いCPU + 遅いストレージ」を搭載した環境でも、展開速度の速さにより「GZIP」よりも望ましい結果が出ています。
デフォルトのアーカイブ形式をLZ4に
上記のテスト結果を受け「Ubuntu 19.10」では、「Linux kernel」と「initramfs」のデフォルトのアーカイブ形式が「LZ4」になる予定です。本件の対象となるアーキテクチャーは以下の通りです。
- x86
- ppc64el
- s390