私は現在パフォーマンスの最適化tar -xf
、つまりファイルの解凍作業をしています。
tar -xf
デフォルト設定でsを呼び出すと、write
一度に10KiBの出力がチャンクとして記録されることがわかりました。ただし、現在の設定(O_DIRECT
フラッシュストレージへのI / Oでフラグを使用)では、これにより重大なストレージ損失が発生します。
tar
出力ファイルに書き込まれるブロックサイズを増やす方法はありますか?パラメータを使用していますが、これによりパフォーマンスが向上することが-b
わかりました。この場合、これは有効な使用法ですか? (対応するファイルはデフォルト設定で作成されます。)tar -b 512 -xvf
2x
tar
スループットを向上させるために私ができる他の方法はありますかtar
?
答え1
tarのオプションは、-b
tarがデバイスに書き込むブロックサイズを制御するので、これが望むものです。ただし、-b 512
tar(1)のマニュアルページは、ブロックサイズが512 * 512 = 262144であることを意味します。すべてのブロックサイズは有効で、tar出力を作成するデバイスが処理できます。歴史的に、tarコマンドはもともと別のテープドライブ用に作成されたので、このコマンドが必要でした。
答え2
すべてのtar実装にはパフォーマンスの問題がありますが、1990年以降starに組み込まれた実装はstar
解決されました。FIFO
Starはデフォルトで8MBのFIFOを生成します。これはStarが2つのプロセスに分岐するため、パフォーマンスを向上させるのに役立ちます。あるプロセスはアーカイブを読み取り、もう一方のプロセスはtar
抽出操作を実行します。最新のオペレーティングシステムと最新のテープデバイスを使用している場合は、マシンの物理メモリの最大半分に対応するより大きなFIFOサイズを指定することをお勧めします。オプションを表示しますstar fs=
。最新のテープドライブの場合は、さらにお勧めしますfs=256M
。これにより、ストリーミングテープモードが不可能なときにテープの位置を変更して発生する一般的なテープ摩耗の問題が大幅に削減されます。
物理テープ装置を使用している場合は、作成時にブロックサイズを増やす必要があります。テープ移植性のために6kBを超えるブロックサイズを使用しないでください。ローカルオペレーティングシステムとドライブがより大きなブロックサイズ(単にFIFOサイズの増加ではない)をサポートしている場合は、より大きい値を使用してください(Asteriskのマニュアルページを参照)。
ZFSなどの書き込み時にコピーファイルシステムを使用する場合、または遅いファイルシステムバッファ実装(Linuxなど)を使用している場合は、Doでのみ動作するファイルシステムstar
に切り替えることができます。 。 SolarisとStarのデフォルトセキュリティモードではパフォーマンスが10%未満に低下し、ZFSおよび低速Linuxバッファ実装ではこのセキュリティモードによりパフォーマンスが400%低下しました。insecure mode
gtar
-no-fsync
ufs