Ao usar nc
, scp
para wget
transferir arquivos entre 2 máquinas em um link dedicado de 2 Mbps, obtenho velocidades entre 0,5 e 1 Mbps. Porém, quando utilizo iperf -c 10.0.1.4 -t 20 -P 12
(por exemplo) consigo maximizar a velocidade do link (ficando estáveis 2Mbps).
Existe uma maneira de fazer transferências de fluxo único (como as feitas por scp
) para utilizar todo/a maior parte do link? Algum tipo de configuração de tcp ou iptables ...?
Responder1
Primeiro, vamos admitir que você está comparando maçãs e laranjas.
nc
e normalmente transfere com um único soquete TCP scp
. wget
No entanto, quando você usa iperf -P 12
, você está usandodozesoquetes TCP paralelos. Esta é uma distinção não trivial. Quanto mais conexões paralelas você tiver, maior será o consumo de largura de banda. Na verdade,speedtest.net
usa vários fluxos TCP paralelos para medir com segurança a capacidade de largura de banda, mesmo se o seu link tiver perda significativa de pacotes que poderia ocupar um único soquete TCP; Eu os vi saturar links com perda de 1,5% (o que dizimaria a taxa de transferência em um soquete TCP normal).
Os principais motivos para transferências TCP de soquete único abaixo do ideal são perda de pacotes e atraso/jitter. Você precisa identificar e corrigir se há alguma perda contínua de pacotes através do seu link... Eu costumo usarmtr
ouwinmtr
por esta...
mpenning@mpenning-T61:~$ mtr -n <destination_ip>
HOST: mpenning-T61 Loss% Snt Last Avg Best Wrst StDev
1. 10.239.84.1 0.0% 407 8.8 9.1 7.7 11.0 1.0
2. 66.68.3.223 0.0% 407 11.5 9.2 7.1 11.5 1.3
3. 66.68.0.8 0.0% 407 19.9 16.7 11.2 21.4 3.5
4. 72.179.205.58 0.0% 407 18.5 23.7 18.5 28.9 4.0
5. 66.109.6.108 5.2% 407 16.6 17.3 15.5 20.7 1.5 <----
6. 66.109.6.181 4.8% 407 18.2 19.1 16.8 23.6 2.3
7. 4.59.32.21 6.3% 407 20.5 26.1 19.5 68.2 14.9
8. 4.69.145.195 6.4% 406 21.4 27.6 19.8 79.1 18.1
9. <destination_ip> 6.8% 406 22.3 23.3 19.4 32.1 3.7
Se você vir um salto onde você perde pacotes consistentemente ao longo do tempo,eos saltos por trás dele estão perdendo pacotes, então você precisa consertar o que está causando a perda de pacotes. Normalmente meço durante pelo menos cinco ou dez minutos... muitas vezes durante horas, se não vejo o problema imediatamente.
A outra situação é o atraso... você precisará quantificar ainda mais o problema com detalhes sobre o atraso de ponta a ponta, bem como informações do sistema operacional src/dest antes que alguém possa responder a isso.
Então você tem algumas opções...:
- Descubra o que está causando queda no desempenho
- Divida suas transferências em vários arquivos e transfira-os em paralelo (para superar quaisquer fatores que estejam diminuindo seu rendimento agora)