2011年8月4日木曜日

"c1.xlarge"のような仮想コア数の多いインスタンスでの圧縮は"pbzip2"で

スズキです。

AMIのリージョン間移行などで、サイズの大きなファイル圧縮するときに、
圧縮時間を短縮するために"c1.xlarge"などのCPUパワーが大きなインスタンスを
利用することがあると思います。

ただし、"c1.xlarge"は仮想コア数が8なので、圧縮を並列処理で行ってない場合は、
一つの仮想コアしか利用せず、せっかくの"c1.xlarge"を有効に利用することができません。

残念ながら、"gzip"や"bzip2"は並列処理には対応しておらず、並列処理で圧縮するには、
"pbzip2"を利用する必要があります。

"pbzip2"は下記のように"epel"リポジトリからインストールできます。

# yum install -y pbzip2

実験の前に、圧縮対象のファイル(10GB)を用意しておきます。

# dd if=/dev/zero of=test.img bs=1M count=10240
# ls -lh
total 11G
drwx------ 2 root root 16K Aug  3 06:32 lost+found
-rw-r--r-- 1 root root 10G Aug  3 06:40 test.img

まずは"bzip2"で圧縮してみました。

# time bzip2 test.img 
real 4m34.865s
user 3m50.789s
sys 0m12.283s

"top"の結果より、仮想コアを1つしか利用していないことがわかります。

Cpu0  : 87.9%us,  3.5%sy,  0.0%ni,  4.1%id,  4.5%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

解凍も同様です。

# time bzip2 -d test.img.bz2 
real 2m57.142s
user 0m56.602s
sys 0m21.794s
Cpu0  :  0.0%us,  3.9%sy,  0.0%ni, 10.4%id, 85.7%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  6.5%sy,  0.0%ni, 61.5%id, 32.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  : 29.9%us, 11.5%sy,  0.0%ni,  0.0%id, 58.6%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

次に"pbzip2"です。"bzip2"より圧縮時間が短縮されていることがわかります。

# time pbzip2 test.img 
real 2m12.309s
user 3m52.277s
sys 0m14.952s

"top"の結果よりすべての仮想コア(8)を利用していることがわかります。

Cpu0  : 17.9%us,  5.5%sy,  0.0%ni,  4.8%id, 71.6%wa,  0.0%hi,  0.0%si,  0.2%st
Cpu1  : 15.3%us,  0.4%sy,  0.0%ni, 84.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 15.5%us,  0.6%sy,  0.0%ni, 83.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.2%st
Cpu3  : 15.6%us,  0.4%sy,  0.0%ni, 84.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  : 15.4%us,  0.6%sy,  0.0%ni, 80.1%id,  3.9%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  : 15.6%us,  0.4%sy,  0.0%ni, 84.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  : 15.3%us,  1.0%sy,  0.0%ni, 83.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  : 15.2%us,  0.6%sy,  0.0%ni, 84.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

しかし解凍にかかった時間は、あまり変わりません。

# time pbzip2 -d test.img.bz2 
real 2m33.437s
user 0m56.642s
sys 0m21.098s

"top"の結果を確認すると、解凍は1つしか仮想コアを利用していないことがわかります。

Cpu0  : 35.0%us, 37.9%sy,  0.0%ni,  0.9%id, 26.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  :  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu5  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

スナップショットを別リージョンに移行する場合は
"c1.xlarge"上で作業して、圧縮は"pbzip2"で!
--------
http://www.suz-lab.com

0 コメント: