`tar -xf`パフォーマンス(ブロックサイズによって異なります)

`tar -xf`パフォーマンス(ブロックサイズによって異なります)

私は現在パフォーマンスの最適化tar -xf、つまりファイルの解凍作業をしています。

tar -xfデフォルト設定でsを呼び出すと、write一度に10KiBの出力がチャンクとして記録されることがわかりました。ただし、現在の設定(O_DIRECTフラッシュストレージへのI / Oでフラグを使用)では、これにより重大なストレージ損失が発生します。

tar出力ファイルに書き込まれるブロックサイズを増やす方法はありますか?パラメータを使用していますが、これによりパフォーマンスが向上することが-bわかりました。この場合、これは有効な使用法ですか? (対応するファイルはデフォルト設定で作成されます。)tar -b 512 -xvf2xtar

スループットを向上させるために私ができる他の方法はありますかtar

答え1

tarのオプションは、-btarがデバイスに書き込むブロックサイズを制御するので、これが望むものです。ただし、-b 512tar(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 modegtar-no-fsyncufs

関連情報