カーネル圧縮展開時間について

カーネル(zImage)は自己展開可能な圧縮形式になっています。カーネルconfig時に圧縮形式を選択できます。

$ make menuconfig
General setup  --->
  Kernel compression mode (Gzip)  --->
      (X) Gzip    標準
      ( ) Bzip2
      ( ) LZMA
      ( ) XZ
      ( ) LZO

圧縮形式の違いによるzImageバイナリサイズと展開時間の差について調査しました。

ターゲットボード

EK724.jpg

CPUSH7724-500MHz
ROM32M byte
RAMDDR2-256Mbyte

調査方法

  • ブートローダからzImageのエントリポイントにジャンプする直前にTMU2を初期化する
  • TMU2は約2.604MHzでフリーランニングさせておく/分解能38.4マイクロ秒
  • カーネルの start_kernel() 関数の入り口でTMU2の値を控えておき、秒に直して表示する

実行例

#>boot
kernel parameter :console=ttySC0,115200 root=/dev/mtdblock2 rootfstype=jffs2 ro Jump to 0x80020000
Linux version 3.0.4 (kaihatsu@debian) (gcc version 4.4.5 (Debian 4.4.5-8) ) #13 Wed Sep 21 22:42:01 JST 2011
4633329, 1.779 esec

結果

gzipbzip2lzmaxzlzo
バイナリサイズ(byte)25149762400288207260820726082727968
サイズ比較100.0%95.4%82.4%82.4%108.5%
展開時間(秒)1.7794.4763.9753.3670.771
展開時間差分(秒)02.6972.1961.588-1.008
展開時間比較100.0%251.6%223.4%189.3%43.3%
  • gzipを標準としている(1.00)

考察

  • バイナリサイズを優先するなら xz が良い(デメリット=起動時間が+1.5秒長くなる)
  • 起動時間を優先するなら lzo が良い(デメリット=バイナリサイズが108%になる)
  • bzip2はサイズがそれほど小さくならず展開時間が長くなるのでお勧めできない

関連

Last-modified: 2019-07-22 (月) 17:56:00 (1732d)