【gzip】圧縮対決【bzip2】
■ このスレッドは過去ログ倉庫に格納されています
>>61 おー、やっと反応があった。 > "*.log"以外のファイルやディレクトリがあるんじゃないのか。 それが logディレクトリ配下には "*.log"しか置いてないのよ。 $ tar tvJf logs_without_dir.tar.xz | wc -l 210 $ tar tvJf logs_with_dir.tar.xz | wc -l 211 1行違うのはディレクトリ自身の分ね。 それに >>60 の "xz -l" の結果を見ても、 Uncompressed のサイズはどっちも 702.6 MiB だし。 ためしに tar cf - log/*.log|xz > logs_without_dir_pipe.tar.xz してみるとどう? >>63 両方↓やってみた。 $ tar cf - log/*.log|xz > logs_without_dir_pipe.tar.xz $ tar cf - log|xz > logs_with_dir_pipe.tar.xz $ ls -sh1 logs_with*_dir_pipe.tar.xz 1.3M logs_with_dir_pipe.tar.xz 416K logs_without_dir_pipe.tar.xz $ xz -l logs_with*_dir_pipe.tar.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 1,246.3 KiB 702.6 MiB 0.002 CRC64 logs_with_dir_pipe.tar.xz 1 1 414.7 KiB 702.6 MiB 0.001 CRC64 logs_without_dir_pipe.tar.xz ------------------------------------------------------------------------------- 2 2 1,660.9 KiB 1,405.3 MiB 0.001 CRC64 2 files やっぱり、当たり前と言えば当たり前だけど、結果は同じ。 あんまり関係ないと思うけど、念の為ログの説明しとくと、 hyperestraierインデックス作成時(maildir対象)のログね。 cronで回した際のログなので使用文字列の重複率非常に高し。 んで、ちょっとテストケースを作ってみた。 mkdir -p /somewhere/test/dir/log cd /somewhere/test/dir time for i in $(seq -w 1 1000) do for j in $(seq -w 1 2000) do echo "test log text line ${j}" done > log/${i}.log done $ du -m log 47 log $ ls log|wc -l 1000 $ tar cf logs_with_dir.tar log $ tar cf logs_without_dir.tar log/*.log $ tar czf logs_with_dir.tar.gz log $ tar czf logs_without_dir.tar.gz log/*.log $ tar cjf logs_with_dir.tar.bz2 log $ tar cjf logs_without_dir.tar.bz2 log/*.log $ tar cJf logs_with_dir.tar.xz log $ tar cJf logs_without_dir.tar.xz log/*.log 結果: $ xz -l logs_with*dir.tar.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 16.9 KiB 46.4 MiB 0.000 CRC64 logs_with_dir.tar.xz 1 1 13.8 KiB 46.4 MiB 0.000 CRC64 logs_without_dir.tar.xz ------------------------------------------------------------------------------- 2 2 30.7 KiB 92.8 MiB 0.000 CRC64 2 files $ gzip -l logs_with*dir.tar.gz compressed uncompressed ratio uncompressed_name 5114261 48650240 89.5% logs_with_dir.tar 5114237 48650240 89.5% logs_without_dir.tar 10228498 97300480 89.5% (totals) ※ bzip2 は "-l" オプションなし $ ls -al logs_with*tar* -rw-r--r-- 1 hiro hiro 48650240 2013-01-07 10:27 logs_with_dir.tar -rw-r--r-- 1 hiro hiro 549025 2013-01-07 10:28 logs_with_dir.tar.bz2 -rw-r--r-- 1 hiro hiro 5114261 2013-01-07 10:27 logs_with_dir.tar.gz -rw-r--r-- 1 hiro hiro 17336 2013-01-07 10:30 logs_with_dir.tar.xz -rw-r--r-- 1 hiro hiro 48650240 2013-01-07 10:27 logs_without_dir.tar -rw-r--r-- 1 hiro hiro 543453 2013-01-07 10:30 logs_without_dir.tar.bz2 -rw-r--r-- 1 hiro hiro 5114237 2013-01-07 10:27 logs_without_dir.tar.gz -rw-r--r-- 1 hiro hiro 14120 2013-01-07 10:31 logs_without_dir.tar.xz logs_with_dir.tar.xz の方が 1.2倍くらい大きくなる。 三倍も差があるわけじゃないけど、圧縮率の差が大きいのは やっぱり tar.xzなんだよなぁ。 *.tar 大きさ同じなのになー、やっぱ不思議。 そんなに差出なかった -rw-r--r-- 1 aaa users 5118621 1月 7 22:29 logs_with_dir.tar.gz -rw-r--r-- 1 aaa users 13828 1月 7 22:24 logs_with_dir.tar.xz -rw-r--r-- 1 aaa users 13796 1月 7 22:26 logs_without_dir.tar.xz xzのやつをxz -dで解いた後xz -9で固めたらこうなった -rw-r--r-- 1 aaa users 48650240 1月 7 22:24 logs_with_dir.tar -rw-r--r-- 1 aaa users 48650240 1月 7 22:26 logs_without_dir.tar -rw-r--r-- 1 aaa users 13692 1月 7 22:24 logs_with_dir.tar.xz -rw-r--r-- 1 aaa users 13584 1月 7 22:26 logs_without_dir.tar.xz >>67 むむ、ぬぁにぃぃぃ、こっちの環境のせいなのかぁ? こっちでも、 xz -d して xz -9 してみた。 -rw-r--r-- 1 hiro hiro 48650240 2013-01-07 23:37 logs_with_dir.tar -rw-r--r-- 1 hiro hiro 48650240 2013-01-07 23:40 logs_without_dir.tar -rw-r--r-- 1 hiro hiro 16972 2013-01-07 23:37 logs_with_dir.tar.xz -rw-r--r-- 1 hiro hiro 13668 2013-01-07 23:40 logs_without_dir.tar.xz やっぱり 1.2倍くらい違う。 えーと、こっちの環境は debian 6.0.6/squeeze で $ tar --version tar (GNU tar) 1.23 $ xz --version xz (XZ Utils) 5.0.0 liblzma 5.0.0 debian パッケージ的には、 $ apt-show-versions tar xz-utils tar/squeeze uptodate 1.23-3 xz-utils/squeeze uptodate 5.0.0-2 なんだけど、そっちの環境を教えてもらえますか? Slackware 14.0 tar (GNU tar) 1.26 xz (XZ Utils) 5.0.4 liblzma 5.0.4 だった ひょっとしてと思ってたけど、これ多分メモリの搭載量によって結果変るんだと思う さっきやったPCでまた新しくデータを作ってからlogs_with_dir.tar.xzを作って それを別の二台に送って解凍してからまた固めたらこうなった 一番上が最初のPC Mem: 1165120 696316 468804 0 10940 328680 Mem: 3915520 129536 3785984 0 9660 85404 Mem: 767544 97744 669800 0 15752 67784 -rw-r--r-- 1 aaa users 13908 1月 8 00:09 logs_with_dir.tar.xz -rw-r--r-- 1 aaa users 13828 1月 8 00:12 logs_with_dir.tar.xz -rw-r--r-- 1 aaa users 16948 1月 8 00:16 logs_with_dir.tar.xz xzとtarは全部同じバージョン 最後のPCでwithoutのほう試すの忘れて電源切っちゃったけど 多分13800前後になるんだと思う なんでか分からないけどディレクトリ付きのほうが 圧縮するときメモリ使うってことじゃないかな と適当なこと書いたけどxzやってる間そんなメモリ使ってないな >>70 おー、そういう検証はとてもありがたい。 しかし Slackwareが出てくるとは…、年季入ってそうっすね。 こっちのメモリは、↓な感じ。 Mem: 3371996 2639292 732704 0 264628 1622812 まさにwithoutの方頼もうと思ってたら、電源切っちゃいましたか… メモリの使い方については、xz の man pageの "Memory usage"に いろいろ書いてありますね。 でも、メモリ搭載量で圧縮率に変動があるとしても、元々のお題の ディレクトリを含む/含まないによって圧縮率が変わることへの 直接の回答にはなっていないような感じ… んで、今さらながら より新しいバージョンの xz-utilsの NEWSを見てみたんだけど、 http://git.tukaani.org/?p=xz.git ;a=blob;f=NEWS;hb=HEAD 5.0.3 (2011-05-21) * liblzma fixes: - lzma_stream_buffer_encode() no longer creates an empty .xz Block if encoding an empty buffer. Such an empty Block with LZMA2 data would trigger a bug in 5.0.1 and older (see the first bullet point in 5.0.2 notes). When releasing 5.0.2, I thought that no encoder creates this kind of files but I was wrong. なんかこれっぽい感じ。 今日はもう寝るけど、明日にでも sid の 新しいバージョンビルドして確認してみよう。 >>67 のときと同じのを展開した後はこれで tar cJf logs_with_dir2.tar.xz log tar cJf logs_without_dir.tar.xz log/*.log Mem: 767544 97056 670488 0 15600 67276 -rw-r--r-- 1 aaa users 13908 1月 9 22:33 logs_with_dir.tar.xz -rw-r--r-- 1 aaa users 16948 1月 9 22:36 logs_with_dir2.tar.xz -rw-r--r-- 1 aaa users 13812 1月 9 22:34 logs_without_dir.tar.xz Mem: 1165120 359552 805568 0 7776 196436 -rw-r--r-- 1 aaa users 13908 1月 8 00:47 logs_with_dir.tar.xz -rw-r--r-- 1 aaa users 13828 1月 9 22:35 logs_with_dir2.tar.xz -rw-r--r-- 1 aaa users 13812 1月 9 22:36 logs_without_dir.tar.xz 同じPCでも今回はサイズが微妙に違った 明日とか言いつつ、時間たっちゃったな。 てことで xz-utils 5.1.1alpha+20120614 で確認してみた。 なんで 5.0.4じゃないかというと、debian sid に 5.0.4 がなかったから。 試した結果だけど、若干前よりどちらも圧縮率は上がったけど、 圧縮率の差はそのまま。 >>73 の 5.0.3のliblzma fixesは関係なかったみたい。 $ ls -al logs_with*tar* -rw-r--r-- 1 hiro hiro 16920 2013-01-14 03:54 logs_with_dir.tar.xz -rw-r--r-- 1 hiro hiro 13836 2013-01-14 03:55 logs_without_dir.tar.xz $ xz -l logs_with*dir.tar.xz Strms Blocks Compressed Uncompressed Ratio Check Filename 1 1 16.5 KiB 46.4 MiB 0.000 CRC64 logs_with_dir.tar.xz 1 1 13.5 KiB 46.4 MiB 0.000 CRC64 logs_without_dir.tar.xz ------------------------------------------------------------------------------- 2 2 30.0 KiB 92.8 MiB 0.000 CRC64 2 files >>67 の人が検証してくれたおかげでとりあえず確認できたのは、 どうやらメモリ環境によって圧縮率は変動するらしいってことくらいか。 確かにそれらしいことが xz の man pageの "Memory usage"に 書かれてるけど、ディレクトリありなしによって圧縮率が変動する ことの理由にはなってないよなぁ。 てことで、なんかすっきりしないけど、解明はあきらめました。 >>67 の人は協力してくれてありがとう。 誰かが xz-utilsのソース読み込んで、 この現象をすっきり説明してくれることを願う。 >>67 >>75 今更だが気になったので実験。 ファイルはGNUのtar-1.26.tar.xzを使用した。 Debian wheezy 7.0 tar 1.26 xz (XZ Utils) 5.1.0alpha liblzma 5.1.0alpha Mem: 8104148 2631116 5473032 0 21232 1628468 これをgz,bzip2,xzでそれぞれ -c をつけてリダイレクトして圧縮する。 $ tar -cf tar_with.tar tar-1.26 $ tar -cf tar_without.tar tar-1.26/* $ du -b * | sort 14899200 tar_with.tar 14899200 tar_without.tar 1763224 tar_without.tar.xz 1788988 tar_with.tar.xz 2348783 tar_without.tar.bz2 2360563 tar_with.tar.bz2 3455923 tar_without.tar.gz 3456187 tar_with.tar.gz となった。.tarを比較してみる。 $ diff tar_with*.tar バイナリファイル tar_with.tar とtar_without.tar は異なります と出力されたのでtarの方に原因があると思われ。 ディレクトリの有無によるファイルサイズの違いについては xz-utilsよりtarのソースを読んだ方がいいかもしれない。 CMIX http://www.byronknoll.com/cmix.html 圧縮率のためならメモリもCPUも使いまくるというポリシーの実装。 ベンチマークを見ると、30MBのファイルを550kBに圧縮できる代わりに、 メモリ20GBと24分という時間をかけている。 すごいけど推奨メモリ32GBはきつい… BWTのの改良方法考えたんだけど、方法書くから誰かプログラム組んでもらえない? プログラム起こす人いたら、仕様書きます。 BWTのWikipedia見て思いついたことなので、私の仕様に不備があったら、 プログラム書かなくっても教えてもらえると助かる 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 EVBFQZKA6L 僕の知り合いの知り合いができた副業情報ドットコム 関心がある人だけ見てください。 グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 V2TCB おまいら7zとxzは親戚で圧縮率が全く同じだって知ってた? >>83 7zは lzma2 や ppmd などから符号を選べる lzma2を選択したらxzと同じになる それだけ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる