linux – 为什么rsync比NFS快?

前端之家收集整理的这篇文章主要介绍了linux – 为什么rsync比NFS快?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几天前我注意到一些奇怪的东西(至少对我而言).我运行rsync复制相同的数据,然后将其删除到NFS挂载,名为/ nfs_mount / TEST.此/ nfs_mount / TEST从nfs_server-eth1托管/导出.两个网络接口上的MTU均为9000,其间的交换机也支持巨型帧.如果我做rsync -av dir / nfs_mount / TEST /我获得网络传输速度X MBps.如果我做rsync -av dir nfs_server-eth1:/ nfs_mount / TEST /我的网络传输速度至少为2X MBps.我的NFS挂载选项是nfs rw,nodev,relatime,vers = 3,rsize = 1048576,wsize = 1048576,namlen = 255,hard,proto = tcp,timeo = 600,retrans = 2,sec = sys,mountvers = 3,mountproto = TCP.

底线:两个传输都通过相同的网络子网,相同的线路,相同的接口,读取相同的数据,写入同一目录等.只有一个是通过NFSv3,另一个是通过rsync.

客户端是Ubuntu 10.04,服务器Ubuntu 9.10.

为什么rsync要快得多?如何让NFS匹配那个速度?

谢谢

编辑:请注意我使用rsync写入NFS共享或SSH到NFS服务器并在那里写入.两次我都做rsync -av,从清除目标目录开始.明天我会试着用普通的副本.

Edit2(附加信息):文件大小范围为1KB-15MB.文件已经压缩,我试图进一步压缩它们没有成功.我从那个目录制作了tar.gz文件.这是模式:

> rsync -av dir / nfs_mount / TEST / =最慢传输;
> rsync -av dir nfs_server-eth1:/ nfs_mount / TEST / =启用了巨型帧的最快rsync;没有巨型帧有点慢,但仍然比直接到NFS的速度快得多;
> rsync -av dir.tar.gz nfs_server-eth1:/ nfs_mount / TEST / =与其非tar.gz等价物大致相同;

使用cp和scp进行测试:

> cp -r dir / nfs_mount / TEST / =比rsync -av dir / nfs_mount / TEST /稍快,但仍然明显慢于rsync -av dir nfs_server-eth1:/ nfs_mount / TEST /.
> scp -r dir / nfs_mount / TEST / =总体上最快,稍微克服了rsync -av dir nfs_server-eth1:/ nfs_mount / TEST /;
> scp -r dir.tar.gz / nfs_mount / TEST / =与其非tar.gz等价物大致相同;

结论,基于此结果:
对于此测试,如果使用tar.gz大文件或许多小文件,则没有显着差异.巨型帧开启或关闭也几乎没有区别. cp和scp比它们各自的rsync -av等价物快.无论使用何种方法,直接写入导出的NFS共享要比通过SSH写入同一目录要慢得多(至少2倍).

在这种情况下,cp和rsync之间的差异无关紧要.我决定尝试cp和scp只是为了看看它们是否显示相同的模式,他们确实 – 2倍的差异.

由于我在两种情况下都使用rsync或cp,我无法理解是什么阻止NFS通过SSH达到相同命令的传输速度.

如何写入NFS共享比通过SSH写入同一位置慢2倍?

Edit3(NFS服务器/ etc / exports选项):rw,no_root_squash,no_subtree_check,sync.客户端的/ proc / mounts显示:nfs rw,mountproto = TCP.

谢谢你们!

解决方法

也许它的传输速度并不慢,但写入延迟会增加.尝试挂载NFS共享异步而不是同步,看看是否关闭了速度差距.通过ssh rsync时,远程rsync进程异步(快速)写入.但是当写入同步挂载的nfs共享时,不会立即确认写入:NFS服务器等待它们到达磁盘(或更可能是控制器缓存)之后再向NFS客户端发送写入成功的确认.

如果’async’修复了您的问题,请注意,如果NFS服务器中间发生某些事情,那么您很可能最终会在磁盘上出现不一致的数据.只要此NFS挂载不是此(或任何其他)数据的主存储,您可能会没问题.当然,如果你在rsync-over-ssh运行期间/之后拔出nfs服务器上的插件,你就会在同一条船上(例如rsync返回’完成’,nfs服务器崩溃,写缓存中的未提交数据现在丢失了在磁盘上留下不一致的数据).

尽管测试不是问题(rsyncing new data),但请注意,在计算校验和并生成需要的文件列表时,ssh上的rsync会在传输单个字节之前对远程服务器产生重大的cpu和IO需求.更新.

猜你在找的Linux相关文章