pbzip2は標準入出力を扱っても速い(ただし1.1.0以降)
feed消化していて思い出したけど pbzip2 を試そうと思っていたんだった。
いろいろな都合でディスクを節約したいということで tar アーカイブを転送しながら pbzip2 で圧縮するという想定で、cpio と組み合わせて以下のように試してみた。(フォーマットを tar にしていないのは長過ぎるファイル名のものがあるため。)
ちなみに stdin から入力を与えて正しく並列に処理できるのは 1.1.0 かららしい。今(2010-07-31)のところ Debian は unstable にしか該当バージョンがないので、lenny の人も squeeze の人も恩恵には与れないはず。
試したのは MacBook ( Core 2 Duo ) + MacPorts の pbzip2 1.1.1 で対象はPC説教講座の素材とか。
結果、生成済みのファイルではなく標準入出力を使った場合でも pbzip2 の方が速かった。当たり前なんだろうけど、一応確認しないとね。
ということは
find FOO | cpio -o -H ustar | pbzip2 > FOO.tbz2
ってやると
tar jxf FOO.tbz2
で、展開できるアーカイブができあがる。こうなればある程度 portable と言っていいんじゃないかな?
なお、できあがる圧縮ファイルは bzip2 より微妙に pbzip2 の方が大きい。と言ってもほんとに微妙。gzip とは比べるまでもないので、この程度の差でスピードが確保できるなら十分すぎるほど実用的だと思う。
展開も pbzip2 を使った方が速いんだろうけど、最後は tar などに集約されてしまうので、どれだけ速くなるんだろう? これを書いているときは空いててそれなりの性能の出る機械がなかったので試してない。
実際に想定しているケースは
nc -l -p PORT | pbzip2 > FOO.tbz2
で待ってるホストに対して
find FOO | cpio -o -H ustar | nc HOST PORT
で飛ばして処理しようと思っている。rsync の方が転送効率はいいし安心なんだろうけど、ベタにディスクスペースを食っちゃうのを避けたいという、とても姑息なことを考えている状態。
※ と思ったら想定していた remote の機械はマルチプロセッサ、マルチコアじゃないから速くならなかった! あほか!