7-zipがLinuxの他のLZMA実装よりもはるかに速いのはなぜですか?

7-zipがLinuxの他のLZMA実装よりもはるかに速いのはなぜですか?

これまでのところ、tarLZMA圧縮オプション(--lzmaまたは--xz--lzip

最近、7-Zipが2021年にLinuxに移植されたことを確認しました(https://www.xda-developers.com/7-zip-linux-official-release/)。私は以前のP7Zipについて話していません(https://p7zip.sourceforge.net/)、これはもはやメンテナンスされていないようですが、公式7-Zipに関するものです。

そのため、テストした結果、同じ圧縮率に対して他のすべてのLinux LZMA実装よりもはるかに高速であることに非常に驚きました。

これは私のテストです(Debian 11)。各テスト間でRAMキャッシュを消去しました(sync && echo 3 > /proc/sys/vm/drop_caches)。

私は、さまざまな種類のファイル、PDF、テキスト、オープンオフィスなどを含む163Mフォルダを作業しています。

$ du -hs TEST/
163M    TEST/

7-Zipを使用すると、15秒で127Mファイルに圧縮できます。

$ time tar c -hp TEST/ | 7zz a -si test.tar.7z
real    0m14,565s
(...)

$ ll test.tar.7z
(...) 127M (...) test.tar.7z

他のすべてのLZMA実装では、同じアーカイブサイズに対して約5倍(約1'13 ")の時間がかかります!

$ time tar -chp --lzma -f test.tar.lzma TEST/
real    1m13,159s

$ time tar -chp --xz -f test.tar.xz TEST/
real    1m12,889s

$ time tar -chp --lzip -f test.tar.lz TEST/
real    1m12,525s

$ ll test.tar.{7z,lz*,xz}
(...) 127M (...) test.tar.7z
(...) 127M (...) test.tar.lz
(...) 127M (...) test.tar.lzma
(...) 127M (...) test.tar.xz

問題がないことを確認するためにtar同じテストを実行しましたが、スイッチを使用するのではなく出力にtarパイプしていました。結果は同じです。lzma|xz|lzip--lzma--xz--lzip

したがって、デフォルトでは、7-ZipのLinuxバージョンは他のすべてのLZMA実装を非常に暗くします。私は7-ZipがLinuxの所有者と権限をサポートしていないと思いますが、ファイルを圧縮するときは問題ありません.tar

それでは、7-ZipのLinuxバージョンが他のLZMA実装よりもはるかに速い理由を知っている人はいますか?

答え1

私の質問に対する答えを見つけました。デフォルトではデフォルトで7zzはマルチスレッドのように見えますが、xzorの場合はそうではありませんlzip。方程式にマルチスレッドを追加すると、7-Zipがまだ少し速い場合でも結果ははるかに近づきます。

$ time tar c -hp TEST/ | 7zz a -si test.tar.7z
real 0m17,986s

// free memory

$ time tar c -hp TEST/ | xz --threads=0 > test.tar.xz
real 0m22,920s

// free memory

$ sudo apt install plzip

$ time tar -chp --lzip -f test.tar.lz TEST/
real 0m20,134s

興味深いことに、インストールplzip(並列lzip)はtar --lzipそれを自動的に使用できます(少なくともDebianでは/usr/bin/lzipシンボリックリンクになるためです)。/usr/bin/lzip.plzip

[編集する]

また注意事項バージョン5.5.1以降(2024年1月)、未使用であり、xzデフォルトはマルチスレッドです。

これで、マルチスレッドモードがデフォルトモードです。これにより圧縮速度が向上し、複数のスレッドで解凍できる .xz ファイルが生成されますが、メモリ使用量が増加し、圧縮が若干悪くなります。

答え2

7zzを使う手書きの編集、p7zip、xzはそうではありません。

さらに、XZのLZMAの実装は非常に古いです。過去7年間、Igor Pavlovは7-zipの速度を上げるために多数の変更を行いました。

関連情報