几天前,我注意到了一件相当奇怪的事情(至少对我而言)。我运行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
从那做文件dir
。这是模式:
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达到相同命令的传输速度。
与通过SSH写入同一位置相比,写入NFS共享的速度为何慢2倍?
EDIT3(NFS服务器的/ etc / exports中的选项)rw,no_root_squash,no_subtree_check,sync
。客户端的/ proc / mounts显示: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
。
谢谢你们!