特集
» 2008年02月21日 13時00分 公開

Validation Case Study:マルチコアCPUを活用したファイル圧縮 (2/3)

[Ben Martin,Open Tech Press]
SourceForge.JP Magazine

圧縮および復元機能

 コマンドラインスイッチは、どちらの場合も、使い慣れた非並列版のものとほぼ同じだ。ただし、並列版にはないオプションがある。例えば、gzipのスイッチ--recursiveはmgzipにはない。

 pbunzip2の並列処理能力を見ると弱点が1つある。マルチコアを活用して圧縮ファイルを復元できるのはpbzip2で圧縮したファイルの場合だけなのだ。pbzip2はファイルを部分ごとに圧縮し、pbunzip2はその各部分を並列に復元する、このときマルチコアが利用されるからだ。従って、カーネルソースのミラーサイトからダウンロードしたlinux-2.6.23.tar.bz2を復元する場合も1つのコアしか使われないことになる。pbzip2がファイルを分割すると、それによって圧縮ファイルのサイズが増加するが、増加量はごくわずかとされている(pbzip2の説明書によると0.2%)。そこで、本体のbzip2プログラムがファイルを分割するようにしてはいかがだろう。シングルコアの利用者の負担はほとんど変わらず、マルチコアの利用者は大いに助かるはずだ。

 下に両ツールの簡単な使用例を示す。bzip2とgzipの利用者には、いずれもお馴染みのものだろう。この数字でpbzip2による圧縮ファイルのサイズを確認すると、確かに非並列版とほとんど同じ、わずか0.46%大きくなるだけだ。

$ bunzip2 linux-2.6.23.tar.bz2

$ gzip -c linux-2.6.23.tar > linux-2.6.23.tar.gzip

$ mgzip -c linux-2.6.23.tar > linux-2.6.23.tar.mgzip

$ ls -lh

-rw-r----- 1 ben ben 253M 2008-01-19 18:55 linux-2.6.23.tar

-rw-rw-r-- 1 ben ben 56M 2008-01-19 18:57 linux-2.6.23.tar.gzip

-rw-rw-r-- 1 ben ben 67M 2008-01-19 18:57 linux-2.6.23.tar.mgzip

$ gunzip -c linux-2.6.23.tar.mgzip > linux-2.6.23.tar.mgzip-gunzip

$ md5sum linux-2.6.23.tar.mgzip-gunzip linux-2.6.23.tar

853c87de6fe51e57a0b10eb4dbb12113 linux-2.6.23.tar.mgzip-gunzip

853c87de6fe51e57a0b10eb4dbb12113 linux-2.6.23.tar

$ bzip2 -c -k -9 linux-2.6.23.tar > linux-2.6.23.tar.bzip2

$ pbzip2 -c -k -9 linux-2.6.23.tar > linux-2.6.23.tar.pbzip2

$ ls -lh

-rw-r----- 1 ben ben 253M 2008-01-19 18:55 linux-2.6.23.tar

-rw-rw-r-- 1 ben ben 56M 2008-01-19 18:57 linux-2.6.23.tar.gzip

-rw-rw-r-- 1 ben ben 67M 2008-01-19 18:57 linux-2.6.23.tar.mgzip

-rw-rw-r-- 1 ben ben 44M 2008-01-19 19:03 linux-2.6.23.tar.bzip2

-rw-rw-r-- 1 ben ben 44M 2008-01-19 19:01 linux-2.6.23.tar.pbzip2

$ ls -l

-rw-r----- 1 ben ben 264704000 2008-01-19 18:55 linux-2.6.23.tar

-rw-rw-r-- 1 ben ben 45488158 2008-01-19 19:03 linux-2.6.23.tar.bzip2

-rw-rw-r-- 1 ben ben 57928789 2008-01-19 18:57 linux-2.6.23.tar.gzip

-rw-rw-r-- 1 ben ben 69968799 2008-01-19 18:57 linux-2.6.23.tar.mgzip

-rw-rw-r-- 1 ben ben 45695449 2008-01-19 19:01 linux-2.6.23.tar.pbzip2


 現行のpbzip2にも大きな欠点がある。mgzipは圧縮対象のデータをstdinから読めるためパッケージしたばかりのtarファイルをパイプを介して流し込めるが、pbzip2はstdinあるいはパイプを介しての入力はできない。従って、pbzip2でtarファイルを圧縮するには、実体あるファイルとしてtarファイルを作る必要がある。以下に、マルチコアCPU上でpbzip2を使って圧縮したtarballを展開するコマンドと、tarファイルをpbzip2で圧縮するコマンドを示す。

$ pbunzip2 -c /tmp/test/linux-2.6.23.tar.pbzip2 | tar xvf -

$ tar cvf linux-2.6.23.tar linux-2.6.23

$ pbzip2 -9 linux-2.6.23.tar

$ tar cvO linux-2.6.23 | mgzip > linux-2.6.23.tar.gz


Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ