試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Cromfsの圧縮時間と圧縮率についての実験と、速度の比較など

手元のOpenOffice.org/usr/lib32/openoffice/以下について、mkcromfsのオプションをいじって変化を見た。
所要時間に関しては、他の作業もしていたため、大体の目安程度に。圧縮の対象によっては、圧縮時間や実際の縮み具合などは変わってくる可能性がある点にも注意。

--lzmafastbytesオプションによる変化

 --lzmafastbytes <value>
     Specifies the number of "fast bytes" in LZMA compression
     algorithm. Valid values are 5..273. Default is 273.

このオプションの値を色々と変えて比較してみた(参考までにSquashfsと、無圧縮のTarボールも含めた)。--lzmafastbytes-e以外のオプションは付けていない。

--lzmafastbytesオプションによる、OOoの圧縮時間と圧縮後サイズの変化
形式/--lzmafastbytesの値圧縮時間圧縮後サイズ
Tar(無圧縮時のサイズとして)0.08s user 2.44s system 16% cpu 14.926 total317,091,840
Squashfs/deflate59.42s user 1.76s system 89% cpu 1:08.11 total131,670,016
Cromfs デフォルト(273)3967.56s user 30.10s system 89% cpu 1:14:32.64 total98,973,334
Cromfs 有効範囲真ん中(139)3523.30s user 27.33s system 89% cpu 1:05:56.87 total98,923,040
Cromfs 真ん中と下限の中間(72)3178.47s user 25.65s system 87% cpu 1:00:47.40 total98,982,274
Cromfs (38)2816.75s user 22.99s system 88% cpu 53:26.58 total99,248,777
Cromfs (22)2463.75s user 21.32s system 87% cpu 47:05.75 total99,907,170
Cromfs (14)2177.87s user 19.18s system 88% cpu 41:27.96 total100,946,560
Cromfs (9)1914.90s user 17.17s system 88% cpu 36:21.87 total102,688,212
Cromfs 有効範囲の下限(5)1441.70s user 14.49s system 88% cpu 27:28.71 total108,610,779
この例においては、--lzmafastbytesの値は、デフォルトでは無駄に高く、圧縮率重視であっても14か22ぐらいで十分ではないか、という結果となった。

-rオプションによる変化

 --randomcompressperiod, -r <value>
     Interval for randomly picking one fblock to compress. Default: 20
     The value has no effect on the compression ratio of the filesystem,
     but smaller values mean slower filesystem creation and bigger values
     mean more diskspace used by temporary files.

このオプションは、圧縮後のサイズには全く影響せず、出力されるファイルシステムは、いずれも同じファイルサイズとなるが、大きな値を指定すると、圧縮時にディスク領域を多めに使用する代わりに圧縮時間を短縮できる。
下の実験では、--lzmafastbytesは5で、-eオプションも付けている。-r以外の他のオプションは付けていない。

-rオプションによる、OOoの圧縮時間の変化
-rの値圧縮時間
11524.82s user 14.37s system 86% cpu 29:36.57 total
20(デフォルト)1441.70s user 14.49s system 88% cpu 27:28.71 total
1000001248.70s user 12.02s system 89% cpu 23:33.09 total
100000に指定することで確かに時間は短縮され、低い値である「1」では、明らかにデフォルト値(20)のときよりも遅いことが判明。これを指定しない手はない。

-bオプションによる変化

 --bsize, -b <size>
     Set the size of file fragments. Default: 65536
     Smaller fragment size improves the merging of identical file content,
     but causes a larger block table to be generated, and slows down the
     creation of the filesystem.

値を下げると似たようなデータどうしをつなげやすくなる(より縮みやすい場合がある)が、ブロックテーブルが大きくなり、ファイルシステム作成に時間がかかる、とのこと。
この実験でも、--lzmafastbytesは5で、-eオプションも付けている。-b以外の他のオプションは、一部の-qqqによる出力抑制を除き、付けていない。

-bオプションによる、OOoの圧縮時間と圧縮後サイズの変化
形式/-bの値圧縮時間圧縮後サイズ
Tar(無圧縮時のサイズとして)0.08s user 2.44s system 16% cpu 14.926 total317,091,840
Squashfs/deflate59.42s user 1.76s system 89% cpu 1:08.11 total131,670,016
Cromfs デフォルトの1/64(1024) -qqqで出力抑制1857.29s user 109.34s system 83% cpu 39:03.92 total107,756,753
Cromfs デフォルトの1/16(4096) -qqqで出力抑制1338.69s user 36.46s system 81% cpu 28:01.68 total108,150,090
Cromfs デフォルトの1/8(8192)1309.01s user 23.70s system 85% cpu 26:05.56 total107,400,199
Cromfs デフォルトの1/4(16384)1351.82s user 18.07s system 83% cpu 27:11.22 total107,279,377
Cromfs デフォルトの1/2(32768)1390.38s user 16.52s system 80% cpu 29:04.62 total108,689,138
Cromfs デフォルト(65536)1441.70s user 14.49s system 88% cpu 27:28.71 total108,610,779
Cromfs デフォルトの8倍(524288)2661.02s user 21.46s system 90% cpu 49:09.15 total108,621,228
実際に試してみると、大きなサイズを指定した場合、ブロック分け(Blockifying)段階で、小さいサイズを指定したときよりも大幅に時間がかかってしまった。圧縮後のサイズは、小さめの値を指定したときのほうがやはり縮みやすいようだ。適切な値はどのあたりかというと微妙なところで、何とも言えない。

オプションと圧縮後のアクセス速度の変化

オプションを変化させて作成したファイルシステムをそれぞれマウントし、中に含まれる全ファイルに対してmd5sumをするのにかかる時間を調べた。
結果としては、--lzmafastbytes-bオプションを変化させてもあまり変わらず、全て2分半前後だった。参考までに、無圧縮時のオリジナルのファイルに対しては12秒ぐらいで、Squashfsで圧縮したものは、無圧縮時とほとんど同じ(13秒ぐらい)だった。
(2007/9/6)端末への出力やcpufreqにより、正確でない処理時間を書いてしまったため、両方を切ってやり直した。一度ディスクから読んだものを空きメモリに保存するページキャッシュの影響も大きいため、再起動もしている。

アクセス速度の体感差

/usr/lib32/openofficeをマウントポイントとして、このディレクトリ以下にあるファイルをCromfsとSquashfsに圧縮したものをそれぞれマウントし、OpenOffice.org Calcを起動して、ウィンドウが出るまでの時間を大まかにみたところ、下のような結果となった。

  • 無圧縮時 約9秒
  • Cromfs 約36秒
  • Squashfs 約9秒

Cromfsで圧縮したものは、体感的には、仮想マシン上のLiveCDでOOoを起動させているような遅さが感じられた。Squashfsは速い。


使用したバージョン:

関連記事: