Poucos dias atrás, notei algo bastante estranho (pelo menos para mim). Corri o rsync copiando os mesmos dados e os excluindo posteriormente para a montagem do NFS, chamada /nfs_mount/TEST
. Este /nfs_mount/TEST
é hospedado / exportado de nfs_server-eth1
. O MTU em ambas as interfaces de rede é 9000, o comutador entre também suporta quadros jumbo. Se eu rsync -av dir /nfs_mount/TEST/
obtiver velocidade de transferência de rede X MBps. Se eu rsync -av dir nfs_server-eth1:/nfs_mount/TEST/
conseguir 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
.
Conclusão: ambas as transferências passam pela mesma sub-rede da rede, mesmos fios, mesmas interfaces, lêem os mesmos dados, gravam no mesmo diretório etc. A única diferença é através do NFSv3 e a outra no rsync.
O cliente é o Ubuntu 10.04, o servidor Ubuntu 9.10.
Como é que o rsync é muito mais rápido? Como fazer o NFS corresponder a essa velocidade?
obrigado
Editar: observe que eu uso o rsync para gravar no compartilhamento NFS ou no SSH no servidor NFS e gravar localmente lá. Nas duas vezes rsync -av
, iniciando com o diretório de destino claro. Amanhã vou tentar com cópia simples.
Edit2 (informações adicionais): o tamanho do arquivo varia de 1 KB a 15 MB. Os arquivos já estão compactados, tentei comprimir ainda mais, sem sucesso. Eu criei um tar.gz
arquivo disso 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 jumbo-frames habilitado; 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 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 quersync -av dir nfs_server-eth1:/nfs_mount/TEST/
.scp -r dir /nfs_mount/TEST/
= mais rápido no geral, supera levementersync -av dir nfs_server-eth1:/nfs_mount/TEST/
;scp -r dir.tar.gz /nfs_mount/TEST/
= aproximadamente o mesmo que seu equivalente não-tar.gz;
Conclusão, com base nestes resultados: Para este teste, não há diferença significativa se estiver usando arquivo grande tar.gz ou muitos pequenos. Os quadros Jumbo ligados ou desligados também quase não fazem diferença. cp
e scp
são mais rápidos que seus respectivos rsync -av
equivalentes. Gravar diretamente no compartilhamento NFS exportado é significativamente mais lento (pelo menos 2 vezes) do que gravar no mesmo diretório pelo 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 mostram - 2X diferença.
Enquanto uso rsync
ou cp
nos dois casos, não consigo entender o que impede o NFS de atingir a velocidade de transferência dos mesmos comandos pelo SSH.
Por que a gravação no compartilhamento NFS é 2X mais lenta que a gravação no mesmo local através do SSH?
Edit3 (NFS servidor / etc / exportações opções): rw,no_root_squash,no_subtree_check,sync
. Do cliente / proc / mounts 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!