Há alguns dias, notei algo bastante estranho (pelo menos para mim). Executei o rsync copiando os mesmos dados e excluindo-os depois para a montagem do NFS, chamada /nfs_mount/TEST
. Esse /nfs_mount/TEST
é hospedado / exportado de nfs_server-eth1
. O MTU em ambas as interfaces de rede é 9000, o switch entre suporta jumbo frames também. Se eu fizer rsync -av dir /nfs_mount/TEST/
, obtenho velocidade de transferência de rede X MBps. Se eu fizer rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
, obtenho velocidade de transferência de rede pelo menos 2X MBps. Minhas opções de montagem do NFS são 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
.
Linha inferior: ambas as transferências passam pela mesma sub-rede, mesmos fios, mesmas interfaces, lêem os mesmos dados, escrevem no mesmo diretório, etc. A única diferença é via NFSv3, a outra via rsync.
O cliente é o Ubuntu 10.04, o servidor Ubuntu 9.10.
Como o rsync é muito mais rápido? Como fazer com que o NFS corresponda a essa velocidade?
Obrigado
Editar: por favor, note que eu uso o rsync para gravar no compartilhamento NFS ou para o SSH no servidor NFS e gravar localmente lá. Ambas as vezes eu faço rsync -av
, começando com o diretório de destino claro. Amanhã vou tentar com uma cópia simples.
Editar2 (informações adicionais): o tamanho do arquivo varia de 1 KB a 15 MB. Os arquivos já estão comprimidos, tentei compactá-los ainda mais sem sucesso. Fiz o arquivo tar.gz
desse dir
. Aqui está o padrão:
-
rsync -av dir /nfs_mount/TEST/
= transferência mais lenta;
-
rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
= rsync mais rápido com quadros jumbo habilitados; sem jumbo frames é um pouco mais lento, mas ainda significativamente mais rápido que o diretamente para o NFS;
-
rsync -av dir.tar.gz nfs_server-eth1:/nfs_mount/TEST/
= aproximadamente o mesmo que o seu equivalente não-tar.gz;
Testes com cp
e scp
:
-
cp -r dir /nfs_mount/TEST/
= ligeiramente mais rápido que rsync -av dir /nfs_mount/TEST/
, mas ainda significativamente mais lento que rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
.
-
scp -r dir /nfs_mount/TEST/
= mais rápido no geral, supera um pouco o rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
;
-
scp -r dir.tar.gz /nfs_mount/TEST/
= aproximadamente o mesmo que o seu equivalente não-tar.gz;
Conclusão, com base nos resultados:
Para este teste não há diferença significativa se estiver usando arquivo grande tar.gz ou muitos pequenos. Quadros jumbo ligados ou desligados também não fazem diferença. cp
e scp
são mais rápidos que seus respectivos rsync -av
equivalentes. Escrever diretamente no compartilhamento exportado do NFS é significativamente mais lento (pelo menos duas vezes) do que gravar no mesmo diretório por meio do SSH, independentemente do método usado.
As diferenças entre cp
e rsync
não são relevantes neste caso. Eu decidi tentar cp
e scp
apenas para ver se eles mostram o mesmo padrão e eles fazem - 2X diferença.
Como eu uso rsync
ou cp
em ambos os casos, não consigo entender o que impede que o NFS atinja a velocidade de transferência dos mesmos comandos pelo SSH.
Por que escrever no compartilhamento NFS é 2 vezes mais lento do que gravar no mesmo lugar no SSH?
Edit3 (opções do servidor NFS / etc / exports): rw,no_root_squash,no_subtree_check,sync
. O / proc / mounts do cliente mostra: 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
.
Obrigado a todos!