以下是一个例子:
( 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 服务器上,运行多个进程应该会有很好的效果。