Resumo:
Não consigo entender uma discrepância peculiar na transferência de rede.
- Por que existe essa discrepância na sincronização de uma máquina para outra e vice-versa?
Além disso:
- Dada a velocidade máxima de transferência da rede é de cerca de 110 M / seg, e a velocidade do disco local para uma operação semelhante é de cerca de 200 M / seg (por isso, não há gargalo), por que há uma velocidade muito menor entre os dois máquinas, do que os teóricos 100M / seg?
Detalhes:
Primeiro de tudo, o servidor é
# uname -a
FreeBSD das 10.1-RELEASE-p8 FreeBSD 10.1-RELEASE-p8 #25 d0fb866(releng/10.1): Thu Nov 13 07:57:26 EST 2014 root@bellicose:/usr/obj/root/pcbsd-build-10-STABLE/git/freebsd/ sys/GENERIC amd64
O cliente é:
# uname -a
Darwin compute.internal 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64
Ambas as máquinas têm 16GB de RAM.
Ao fazer um rsync local no servidor, um tipo de sabe o que esperar como velocidade de disco, pelo menos nessa circunstância.
Usando um arquivo binário, test.bin, 732M, o rsync local no servidor FreeBSD mostra cerca de 200 M / s:
# rsync --stats -h test.bin copy.bin
[....]
sent 732.54M bytes received 35 bytes 209.30M bytes/sec
total size is 732.36M speedup is 1.00
Isso é cerca de 200 M / s.
No cliente do mac mini eu tenho quase 70M / seg:
# rsync --progress --stats -h test.bin copy.bin
test.bin
732.36M 100% 70.06MB/s 0:00:09 (xfr#1, to-chk=0/1)
[....]
sent 732.54M bytes received 35 bytes 69.77M bytes/sec
total size is 732.36M speedup is 1.00
Agora, faça um teste de velocidade de rede com iperf
:
No servidor (o servidor do FreeBSD):
# iperf -f M -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 0.06 MByte (default)
------------------------------------------------------------
[ 4] local 192.168.1.5 port 5001 connected with 192.168.1.226 port 50757
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-30.0 sec 3356 MBytes 112 MBytes/sec
No cliente (OS X mac mini):
# iperf -f M -M 9000 -c 192.168.1.5 -t 30 -w 80K
WARNING: attempt to set TCP maxmimum segment size to 9000 failed.
Setting the MSS may not be implemented on this OS.
------------------------------------------------------------
Client connecting to 192.168.1.5, TCP port 5001
TCP window size: 0.08 MByte (WARNING: requested 0.08 MByte)
------------------------------------------------------------
[ 4] local 192.168.1.226 port 50757 connected with 192.168.1.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-30.0 sec 3356 MBytes 112 MBytes/sec
Então, eu poderia supor que a conexão de rede (um cabo cat 7 direto entre as duas nics) é de cerca de 110 M / seg.
Agora, esta é a situação intrigante:
Se eu rsync do servidor FreeBSD para o mac mini, eu obtenho uma velocidade de transferência de cerca de 50 M / seg:
# rsync --progress --stats -h test.bin -e "ssh -l gsl" '192.168.1.226:/tmp/'
Password:
test.bin
732.36M 100% 57.10MB/s 0:00:12 (xfr#1, to-chk=0/1)
[....]
sent 732.45M bytes received 46 bytes 50.51M bytes/sec
total size is 732.36M speedup is 1.00
Mas o rsync na direção oposta dá uma taxa de transferência muito menor, 20M / s:
# rsync --progress --stats -h test.bin -e "ssh -l gsl" '192.168.1.6:/tmp/'
test.bin
732.36M 100% 19.55MB/s 0:00:35 (xfr#1, to-chk=0/1)
[....]
sent 732.54M bytes received 35 bytes 20.07M bytes/sec
total size is 732.36M speedup is 1.00
Minhas duas perguntas:
- Por que existe essa discrepância na sincronização de uma máquina para outra e vice-versa?
Além disso:
- Dada a velocidade máxima de transferência da rede é de cerca de 110 M / seg, e a velocidade do disco local para uma operação semelhante é de cerca de 200 M / seg (por isso, não há gargalo), por que há uma velocidade muito menor entre os dois máquinas, do que os teóricos 100M / seg?
Alguém poderia ajudar a entender isso, talvez oferecendo alguns conselhos sobre como melhorar a velocidade de transferência?
Atualização: Com base na resposta do @dhag, tentei copiar um arquivo com netcat
, ou seja, sem compactação:
No lado "servidor" (push):
time cat test.bin | nc -l 2020
nc -l 2020 0.25s user 6.29s system 77% cpu 8.462 total
No lado de recebimento (FreeBSD):
time nc 192.168.1.226 2020 > test.bin
nc 192.168.1.226 2020 > test.bin 0.09s user 4.00s system 62% cpu 6.560 total
Se não me engano, isso deve significar 732M / 6,29s = 117M / seg, o que excede as estatísticas de iperf
. Talvez um problema de cache?
Atualização 2: Usando rsync sem criptografia (somente possível se estiver usando um daemon e o protocolo rsync: //):
# rsync --progress --stats -h test.bin rsync://[email protected]/share ⏎
test.bin
732.36M 100% 112.23MB/s 0:00:06 (xfer#1, to-check=0/1)
[....]
sent 732.45M bytes received 38 bytes 112.69M bytes/sec
total size is 732.36M speedup is 1.00
Isso também confirma as idéias de @dhag.