インターネットで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
後ろにファイルの書き込み/生成。
書き込みバッファリングは、ファイルシステムにファイルを作成するときにプライマリストレージにすぐに自動的に書き込まれないことを意味します。かなりの遅延がある可能性があります。
その他の関連コンテンツ: