LVM で snapshot をとって、そのパーティションを dd で吸い出して gzip 圧縮してファイル保存、ということをしてたんですが。
どうも gzip がボトルネックになって、dd での読み出し速度が出ない。せっかく CPU がマルチコアなのに gzip は 1 CPU しか使っていないようなので、mgzip を使ってみた。
参照元は マルチコアCPUを活用したファイル圧縮 | SourceForge.JP Magazine です。今回は dd からの出力を圧縮する都合で、標準入出力を扱えない pbzip2 はパス。
まずインストール。
普通に make するとコンパイルが通らないので、参照元の記事のとおり、mgzip.c 内の gz_header をすべて mgz_header に置換する。
$ tar zxvf smp_mgzip_1.2c.tar.gz $ cd smp_mgzip_1.2c/ $ ./configure $ perl -pi -e 's/gz_header/mgz_header/g' mgzip.c $ make $ make test $ sudo cp mgzip /usr/local/bin
make install はできないので cp した。
速度とファイルサイズの比較。 -t オプションは使用するスレッド数。
コマンド 圧縮に掛かる時間(秒) ファイルサイズ(MB) --------------------------------------------------------- gzip 15.14 64.3 mgzip 5.72 77.8 mgzip -t 3 4.78 ↑ mgzip -t 4 3.90 ↑ gzip -5 12.37 65.4 mgzip -5 7.51 67.6 mgzip -5 -t 3 7.53 ↑ mgzip -5 -t 4 7.53 ↑ gzip -9 31.92 63.7 mgzip -9 18.04 66.0 mgzip -9 -t 3 17.68 ↑ mgzip -9 -t 4 18.36 ↑
- linux-2.6.28.2.tar.bz2 を展開した 297MB の tar ファイル
- CPU : Athlon 64 X2 (2.8GHz DualCore)
- OS : Ubuntu-8.04(x86_64)
デフォルトだとファイルサイズは 20% ほど大きくなるが、速度は 3〜4 倍! 圧縮率を上げようと -9 を付けると、サイズは普通の gzip より大きく、速度は遅く、という多少微妙な結果に。-5 ぐらいがバランスがいいのかな。