Tarの速度がなぜ違うのですか?

Tarの速度がなぜ違うのですか?

インターネットでcpioがtarよりも速いと聞きました。

だからシェルスクリプトを使って確認してみました。

#1/bin/bash

rm ct.tar ct.cpio
sync && sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"  #nocache

start="$(date -u +%s.%N)"
tar cf cpiotar.tar
end="$(date -u +%s.%N)"
elipsed="$(bc <<<"$end-$start")"
echo "tar $elapsed"

sync && sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"  #nocache

start="$(date -u +%s.%N)"
find $1 -depth | cpio -o > ct.cpio
end="$(date -u +%s.%N)"
elapsed="$(bc <<<"$end-$start")"
echo "cpio $elapsed"

このシェルスクリプトは "parameters"ディレクトリを保持し、経過時間を確認します。

サイズが1GBに近いディレクトリでスクリプトを実行しています。結果は次のとおりです。

tar 74.157502069
cpio 10.269119009

スクリプトを再実行すると、結果は次のようになります。

tar 3.335409300
cpio 7.097516017

結果が本当に変ですね。

cpioは違いを示さないので、tarは突然非常に速くなります。

なぜこれが起こるのですか?

答え1

おそらく書き込みキャッシュを扱っているでしょう。

ファイルシステムのパフォーマンスを測定するには、常に次の手順を実行します。

$ echo 3 | sudo tee /proc/sys/vm/drop_caches
$ time ( your_commands; sync )

あなたの例では電話をかけないようです。sync 後ろにファイルの書き込み/生成。

書き込みバッファリングは、ファイルシステムにファイルを作成するときにプライマリストレージにすぐに自動的に書き込まれないことを意味します。かなりの遅延がある可能性があります。

その他の関連コンテンツ:

関連情報