为什么Tar速度不一样?

为什么Tar速度不一样?

我在互联网上听说 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 写入/创建文件。

写入缓冲意味着当您在文件系统上创建文件时,它不会立即自动写入底层存储。可能会有相当大的延迟。

更多相关内容:

相关内容