Kilka dni temu zauważyłem coś raczej dziwnego (przynajmniej dla mnie). Uruchomiłem rsync, kopiując te same dane i usuwając je później na mount NFS, o nazwie /nfs_mount/TEST
. To /nfs_mount/TEST
jest hostowane / eksportowane z nfs_server-eth1
. MTU na obu interfejsach sieciowych wynosi 9000, przełączanie między obsługuje także ramki jumbo. Jeśli to zrobię rsync -av dir /nfs_mount/TEST/
, uzyskam prędkość transferu sieciowego X MB / s. Jeśli to zrobię rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
, uzyskam prędkość transferu sieciowego co najmniej 2X MBps. Moje opcje montowania NFS są 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
.
Konkluzja: oba transfery przechodzą przez tę samą podsieć sieci, te same przewody, te same interfejsy, odczytują te same dane, zapisują w tym samym katalogu itp. Jedyną różnicą jest jedna przez NFSv3, druga przez rsync.
Klientem jest Ubuntu 10.04, serwer Ubuntu 9.10.
Dlaczego rsync jest znacznie szybszy? Jak dopasować NFS do tej prędkości?
Dzięki
Edycja: pamiętaj, że używam rsync do pisania w udziale NFS lub SSH na serwerze NFS i pisz tam lokalnie. Za każdym razem robię rsync -av
, zaczynając od czystego katalogu docelowego. Jutro spróbuję z zwykłą kopią.
Edycja2 (dodatkowe informacje): Rozmiar pliku wynosi od 1 KB do 15 MB. Pliki są już skompresowane, próbowałem je skompresować bez powodzenia. Zrobiłem tar.gz
z tego plik dir
. Oto wzór:
rsync -av dir /nfs_mount/TEST/
= najwolniejszy transfer;rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= najszybszy rsync z włączonymi ramkami jumbo; bez dużych ramek jest nieco wolniejszy, ale wciąż znacznie szybszy niż ten bezpośrednio do NFS;rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= mniej więcej tyle samo, co jego odpowiednik inny niż tar.gz;
Testy z cp
i scp
:
cp -r dir /nfs_mount/TEST/
= nieco szybciej niż,rsync -av dir /nfs_mount/TEST/
ale nadal znacznie wolniej niżrsync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= ogólnie najszybszy, nieznacznie pokonujersync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= mniej więcej tyle samo, co jego odpowiednik inny niż tar.gz;
Wniosek oparty na tych wynikach: w tym teście nie ma znaczącej różnicy, jeśli używasz dużego pliku tar.gz lub wielu małych. Włączanie i wyłączanie ramek Jumbo również nie robi prawie żadnej różnicy. cp
i scp
są szybsze niż ich odpowiedniki rsync -av
. Zapis bezpośrednio do wyeksportowanego udziału NFS jest znacznie wolniejszy (co najmniej 2 razy) niż zapis do tego samego katalogu przez SSH, niezależnie od zastosowanej metody.
Różnice między cp
i rsync
w tym przypadku nie są istotne. Postanowiłem spróbować cp
i scp
po prostu zobaczyć, czy pokazują ten sam wzór i robią - 2X różnicy.
Kiedy używam rsync
lub cp
w obu przypadkach, nie rozumiem, co uniemożliwia NFS osiągnięcie prędkości przesyłania tych samych poleceń przez SSH.
Dlaczego pisanie do udziału NFS jest 2 razy wolniejsze niż pisanie w tym samym miejscu przez SSH?
Edit3 (NFS server / etc / eksport opcje): rw,no_root_squash,no_subtree_check,sync
. Klienta / proc / mounts pokazuje: 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
.
Dziękuję wam wszystkim!