カーネル(zImage)は自己展開可能な圧縮形式になっています。カーネルconfig時に圧縮形式を選択できます。
$ make menuconfig
General setup --->
Kernel compression mode (Gzip) --->
(X) Gzip 標準
( ) Bzip2
( ) LZMA
( ) XZ
( ) LZO
圧縮形式の違いによるzImageバイナリサイズと展開時間の差について調査しました。
ターゲットボード †
CPU | SH7724-500MHz |
ROM | 32M byte |
RAM | DDR2-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
結果 †
| gzip | bzip2 | lzma | xz | lzo |
バイナリサイズ(byte) | 2514976 | 2400288 | 2072608 | 2072608 | 2727968 |
サイズ比較 | 100.0% | 95.4% | 82.4% | 82.4% | 108.5% |
展開時間(秒) | 1.779 | 4.476 | 3.975 | 3.367 | 0.771 |
展開時間差分(秒) | 0 | 2.697 | 2.196 | 1.588 | -1.008 |
展開時間比較 | 100.0% | 251.6% | 223.4% | 189.3% | 43.3% |
考察 †
- バイナリサイズを優先するなら xz が良い(デメリット=起動時間が+1.5秒長くなる)
- 起動時間を優先するなら lzo が良い(デメリット=バイナリサイズが108%になる)
- bzip2はサイズがそれほど小さくならず展開時間が長くなるのでお勧めできない
関連 †