将文件并行复制到同一个 NFS 挂载是否有意义?

将文件并行复制到同一个 NFS 挂载是否有意义?

以下是一个例子:

( cp /tmp/one /nfs/one ) &
( cp /tmp/two /nfs/two ) &
( cp /tmp/three /nfs/three ) &
( cp /tmp/four /nfs/four ) &
( cp /tmp/five /nfs/five ) &
wait

对于繁忙的 NFS 服务器,这样做有什么好处吗?

cp /tmp/one /nfs/one;
cp /tmp/two /nfs/two;
cp /tmp/three /nfs/three;
cp /tmp/four /nfs/four;
cp /tmp/five /nfs/five;

我的想法是,我可能会在第一个例子中花费更多时间来启动子 shell(尤其是在一台同时执行多次、启动大量用户进程的机器上),但由于带宽和 NFS inode 更新限制,它对我没有任何好处。

有问题的文件大小在 20k 到 2mb 之间,每次不超过 6 个,并且它们总是被复制到相同的完整路径(只是文件名不同)。在一组服务器(约 50 个)上发生了许多这样的情况,所有服务器都引用同一小组 NFS 挂载。

答案1

并行化可能没有帮助。但这将取决于几个因素:本地磁盘的速度、本地网络的速度以及服务器的速度。

如果在进行单次复制时本地磁盘被固定,则不行。这不会有帮助。

如果在进行单次复制时您的本地网络被限制,则不行。这不会有帮助。

如果在进行单个复制时,您的 NFS 服务器网络被限制,则不行。这不会有帮助。

如果您的 NFS 服务器的磁盘在进行单次复制时被固定,那么...好吧,您明白了。

确定它是否有用的最佳方法是反复计时这两项操作,比如说 10 次,以获得统计上有用的结果。基本上,如果你发现在进行一次复制时,上述四件事中的任何一件都没有达到最大值,那么你可能看到并行执行的性能优势。但只有测试才能告诉你这一点。

答案2

由于某些文件大小为 20k,因此您可能会将部分带宽花费在实际写入之外的操作上。

-n该工具中有一个出色的 NFS选项iostat,它可以显示 IOPS 中有多少百分比用于实际写入。

# iostat -nmht 20

Filesystem:   ... rMB_svr/s  wMB_svr/s  ops/s  rops/s  wops/s
nfsserv:/share
              ... 0.00       17.5       9660   0.00    4508

请等待几个周期(这里每个周期为 20 秒)以便 iostat 积累一些统计数据。

在此示例中,只有一半的 IOPS 是写入操作。您还可以看到此处的块大小为 4k。通过重叠 WOPS 和非 WOPS 并并行运行进程,您可能会提高性能。

尝试观察 NFS 服务器上的 CPU 负载以及网络带宽利用率。在具有磁盘阵列的 NFS 服务器上,运行多个进程应该会有很好的效果。

相关内容