gzipプロセスをスピードアップしたいです。 (サーバーはAIX 7.1です。)
具体的には、現在の実装をgzip *.txt
完了するのに最大1時間かかります。 (抽出されたファイルは大容量、合計10個のファイルです)
Q:ランニングがより効率的ですか?
pids=""
gzip file1.txt &
pids+=" $!"
gzip file2.txt &
pids+=" $!"
wait $pids
比較する
gzip *.txt
並列性、CPU消費などの面でgzip *txt
バックグラウンド(&)でgzipと同じように動作しますか、それとも他のオプションがより効率的ですか?
答え1
ホイールを再発明しないでください。を使用できpigz
、並列実装は配布gzip
リポジトリに配置する必要があります。そうでない場合は、次のように開始できます。ここ。
インストールされたら、pigz
次のように使用しますgzip
。
pigz *txt
以下を使用して生成された5つの30Mファイルに対してこれをテストしましたfor i in {1..5}; do head -c 50M /dev/urandom > file"$i".txt; done
。
## Non-parallel gzip
$ time gzip *txt
real 0m8.853s
user 0m8.607s
sys 0m0.243s
## Shell parallelization (same idea as yours, just simplified)
$ time ( for i in *txt; do gzip $i & done; wait)
real 0m2.214s
user 0m10.230s
sys 0m0.250s
## pigz
$ time pigz *txt
real 0m1.689s
user 0m11.580s
sys 0m0.317s
答え2
唯一の実際の方法は時間を合わせることです。gzip *.txt
別のファイルなので、一度に1つずつ実行したいと思います。
並列に実行(gzip file1.txt
などを使用して)可能より高速ですが、メモリ量、CPUコア数などによって異なります。最も重要なのは、これを実行している間にディスク競合が発生して速度が遅くなる可能性があることです(SSDでない限りある程度)。彼らは一緒に同じ量のCPU時間を使用します。
私は通常gzip *.txt
または同様のものを使用します。