数日前、私は(少なくとも私にとって)奇妙なことに気づきました。私は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を介して同じコマンドの転送速度に達するのを妨げるものを理解できません。
NFS共有への書き込みは、SSH経由で同じ場所に書き込むよりも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
。
皆さん、ありがとうございました!