我在互联网上听说 cpio 比 tar 更快。
所以我尝试用我的 shell 脚本来检查它。
#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"
此 shell 脚本存档“参数”目录并检查已过去的时间。
我用一个大小接近 1GB 的目录运行脚本。结果如下。
tar 74.157502069
cpio 10.269119009
如果我再次运行脚本,结果如下。
tar 3.335409300
cpio 7.097516017
结果真的很奇怪。
tar 突然变得非常快,因为 cpio 没有显示任何差异。
为什么会发生这种情况?
答案1
您可能正在处理写入缓存:
如果您想测量文件系统性能,请始终这样做:
$ echo 3 | sudo tee /proc/sys/vm/drop_caches
$ time ( your_commands; sync )
在你的例子中你似乎没有调用sync
后写入/创建文件。
写入缓冲意味着当您在文件系统上创建文件时,它不会立即自动写入底层存储。可能会有相当大的延迟。
更多相关内容: