Linux で各種圧縮コマンドの性能比較
サーバーの管理をやっていると容量不足等で不要ファイルを圧縮することが多々あります。 また巨大なファイルの圧縮等をすると非常に時間が掛かってサーバーに負荷がかかり運用中の サービス影響することもあります。またあまりに圧縮・解凍に時間が掛ると何より時間が勿体ないです。 そこで Linux で提供されている様々な圧縮・解凍コマンドを検証してみます。
比較する Linux の圧縮・解凍ソフトウェア
ここでは如何にして早くファイルを圧縮・解凍出来るか様々な Linux コマンドを使って 圧縮・解凍のパフォーマンスを計測してみました。現在は圧縮・解凍処理を行う際に複数 CPU (マルチコア) をフル活用して圧縮・解凍を行うツールもあります。下記の様々な ツールで検証してみました。
zip gzip pigz pigz -11 bzip2 lbzip2 pbzip2 xz pxz pixz
検証環境
検証に利用したマシンのスペックは次の通りです。Ubuntu 17.04 と 4CPU、搭載メモリーは 8GB です。$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 17.04 Release: 17.04 Codename: zesty
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz physical id : 0 siblings : 4 core id : 0 cpu cores : 4 processor : 1 vendor_id : GenuineIntel model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz physical id : 0 siblings : 4 core id : 1 cpu cores : 4 processor : 2 vendor_id : GenuineIntel model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz physical id : 0 siblings : 4 core id : 2 cpu cores : 4 processor : 3 vendor_id : GenuineIntel model name : Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz physical id : 0 siblings : 4 core id : 3 cpu cores : 4
$ cat /proc/meminfo MemTotal: 8044660 kB
各 Linux 圧縮・解凍コマンドの検証
それでは早速検証を開始しますが、まず圧縮対象となるファイルを作成します。 作成するファイルサイズは 10MB としますので、以下のように dd コマンドを使ってゼロ埋めされた ファイルを作成します。$ LANG=C dd if=/dev/zero of=tmp.txt bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB, 10 MiB) copied, 0.0119667 s, 876 MB/s $ ll -h tmp.txt -rw-rw-r-- 1 foobar foobar 10M 2017-09-14 10:43:23 tmp.txt
tmp.txt という 10MB のファイルを作成したら、以下のコマンドを実行して 何度か検証してみます。以下は同じコマンドの圧縮コマンドと解凍コマンドを 使用して圧縮後に解凍を各ツールで連続して実行します。
time zip -q tmp.zip tmp.txt && time unzip -qu tmp.zip && rm tmp.zip time gzip tmp.txt && time gunzip tmp.txt.gz time pigz tmp.txt && time unpigz tmp.txt.gz time pigz -11 tmp.txt && time unpigz tmp.txt.gz time bzip2 tmp.txt && time bunzip2 tmp.txt.bz2 time lbzip2 tmp.txt && time lbunzip2 tmp.txt.bz2 time pbzip2 tmp.txt && time pbzip2 -d tmp.txt.bz2 time xz tmp.txt && time unxz tmp.txt.xz time pxz tmp.txt && time unxz tmp.txt.xz time pixz tmp.txt && time pixz -d tmp.txt.xz
上記コマンド群を5回実行してその平均値を取ってみました。その結果が次の通りとなっています。
検証結果 [ lbzip2 が最速 ]
この結果から、総合的に見て圧縮・解凍共に lbzip2 コマンド(圧縮)とその解凍コマンドである lbunzip2 が圧縮・解凍性能共に非常に優秀です。10MB のファイルを圧縮するために lbzip2 は 0.021 秒を要しており、それを解凍するために lbunzip2 コマンドが 0.015 秒を要したということで、その他のコマンドに比して最速です。
次点としては pigz コマンドもかなり優秀ですね。なお CPU の利用率が 100% を 超えているものはちゃんと複数 CPU が使われていることを示しています。
逆に 100% 以下のコマンドは複数 CPU を使い切れていない ということになります。
-----------------------+----------+------------- 圧縮/解凍コマンド | CPU利用率 | 合計所要時間(秒) -----------------------+----------|------------- zip -q tmp.zip tmp.txt | 99% cpu | 0.109 total unzip -qu tmp.zip | 0% cpu | 0.003 total -----------------------+----------|------------- gzip tmp.txt | 97% cpu | 0.103 total gunzip tmp.txt.gz | 96% cpu | 0.083 total -----------------------+----------|------------- pigz tmp.txt | 272% cpu | 0.037 total unpigz tmp.txt.gz | 163% cpu | 0.024 total -----------------------+----------|------------- pigz -11 tmp.txt | 394% cpu | 1.962 total unpigz tmp.txt.gz | 117% cpu | 0.027 total -----------------------+----------|------------- bzip2 tmp.txt | 97% cpu | 0.095 total bunzip2 tmp.txt.bz2 | 94% cpu | 0.059 total -----------------------+----------|------------- lbzip2 tmp.txt | 243% cpu | 0.021 total lbunzip2 tmp.txt.bz2 | 293% cpu | 0.015 total -----------------------+----------|------------- pbzip2 tmp.txt | 257% cpu | 0.045 total pbzip2 -d tmp.txt.bz2 | 89% cpu | 0.036 total -----------------------+----------|------------- xz tmp.txt | 99% cpu | 0.289 total unxz tmp.txt.xz | 94% cpu | 0.059 total -----------------------+----------|------------- pxz tmp.txt | 101% cpu | 0.286 total unxz tmp.txt.xz | 93% cpu | 0.030 total -----------------------+----------|------------- pixz tmp.txt | 97% cpu | 0.290 total pixz -d tmp.txt.xz | 91% cpu | 0.044 total -----------------------+----------|-------------