Depurando taxa de transferência lenta do servidor

9

Estou tentando explicar isso da maneira mais simples, mas documentada possível. Isso não é exclusivo deste servidor ou do meu ISP atual . Eu vi o mesmo problema exato ao longo dos anos, estando com diferentes ISPs e tendo meus servidores com provedores diferentes (GoDaddy nos EUA, iWeb e GloboTech no Canadá). A única coisa que tem sido comum é o sistema operacional Windows Server (2003 e 2008 r2). Mas vamos procurar agora apenas no meu servidor atual e no meu ISP atual.

O problema :

Recebo taxas de transferência muito lentas entre minha estação de trabalho local e meu servidor dedicado remoto. Meu servidor está em uma porta de 100 Mbps e minha estação de trabalho local está em uma conexão simétrica de 50 Mbps em fibra óptica.

Sintomas :

O servidor e a estação de trabalho obtêm excelentes resultados (muito próximos das velocidades de conexão) ao realizar testes no speedtest.net em diferentes servidores e locais nos EUA e no México. Se eu baixar arquivos grandes do, digamos, Dropbox, para o meu servidor ou minha estação de trabalho, recebo taxas de transferência de 10 MBps e 5 MBps respectivamente em uma única conexão, o que é correto de acordo com a velocidade de cada conexão de 100 Mbps e 50 Mbps respeitosamente.

No entanto, se eu transferir um arquivo do meu servidor (via HTTP ou FTP) para minha estação de trabalho, não chego nem perto da velocidade de 50 Mbps que devo obter (taxa de transferência de 5 MBps), mas recebo algo equivalente a 3 Mbps (Taxa de transferência de 300 KBps).

Estou tentando entender por que recebo uma taxa de transferência tão lenta. Não tenho certeza de como depurá-lo. Sempre que levanto um tíquete sobre o problema com os provedores de hospedagem, eles me solicitam saídas tracert e, por fim, apenas culpam algum servidor no meio. Mas isso não parece correto, se levarmos em consideração o que eu disse a princípio: eu vi essa velocidade / problema exato ao ter meus servidores com GoDaddy, iWeb e GloboTech, e ao mesmo tempo estar com diferentes ISPs em diferentes tipos de serviço de Internet . Realmente parece uma configuração fixa em algum lugar na área do servidor.

Testes que fiz :

TESTE RÁPIDO

Estes são testes de velocidade do speedtest.net que foram executados no meu servidor dedicado em diferentes servidores remotos, incluindo um servidor no datacenter do meu ISP na Cidade do México:

Canadá : 94,64 Mbps para download e 94,87 para upload http://www.speedtest.net/my-result/3470801975

San Jose, CA : 93,58 Mbps para download e 95,48 Mbps para upload http://www.speedtest.net/my-result/3470805341

Cidade do México (servidor no datacanter do meu próprio ISP) : 92,99 Mbps para download e 95,39 Mbps para upload http://www.speedtest.net/my-result/3470810269

Se eu executar esses testes nos mesmos servidores da minha estação de trabalho local, também obtenho velocidades próximas à minha conexão de 50 Mbps.

TRACERT

Esta é uma saída tracert recente executada da minha estação de trabalho no meu servidor dedicado:

 1    <1 ms    <1 ms    <1 ms  192.168.7.254
 2     2 ms     1 ms     1 ms  10.69.32.1
 3     *        3 ms     2 ms  10.5.50.174
 4     3 ms     2 ms     2 ms  10.5.50.173
 5     *        5 ms     3 ms  fixed-203-69-2.iusacell.net [189.203.69.2]
 6    32 ms    32 ms    32 ms  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
 7    33 ms    33 ms    33 ms  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
 8    33 ms    33 ms    33 ms  ae13.dal33.ip4.tinet.net [77.67.71.221]
 9    76 ms    76 ms   157 ms  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
10    72 ms    72 ms    72 ms  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
11    72 ms    72 ms    72 ms  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
12    72 ms    72 ms    73 ms  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
13    72 ms    72 ms    72 ms  ns1.marveldns.com [173.209.57.82]

IPERF

Este é um teste iperf executado usando meu servidor dedicado como servidor e minha estação de trabalho como cliente:

------------------------------------------------------------
Client connecting to ns1.marveldns.com, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.7.2 port 60339 connected with 173.209.57.82 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.3 sec  5.62 MBytes  4.59 Mbits/sec

CAMINHO

Esta é a saída de uma recomendação de caminho executada da minha estação de trabalho para o meu servidor dedicado:

Tracing route to ns1.marveldns.com [173.209.57.82]
over a maximum of 30 hops:
  0  ws1 [192.168.7.2]
  1  192.168.7.254
  2  10.69.32.1
  3     *     10.5.50.174
  4  10.5.50.173
  5  fixed-203-69-2.iusacell.net [189.203.69.2]
  6  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
  7  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
  8  ae13.dal33.ip4.tinet.net [77.67.71.221]
  9  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
 10  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
 11  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
 12  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
 13  ns1.marveldns.com [173.209.57.82]

Computing statistics for 325 seconds...
            Source to Here   This Node/Link
Hop    RTT  Lost/Sent = Pct  Lost/Sent = Pct  Address
  0                                           ws1 [192.168.7.2]
                                0/ 100 =  0%   |
  1    0ms     0/ 100 =  0%     0/ 100 =  0%  192.168.7.254
                                0/ 100 =  0%   |
  2    1ms     0/ 100 =  0%     0/ 100 =  0%  10.69.32.1
                                0/ 100 =  0%   |
  3    3ms     0/ 100 =  0%     0/ 100 =  0%  10.5.50.174
                                0/ 100 =  0%   |
  4    2ms     0/ 100 =  0%     0/ 100 =  0%  10.5.50.173
                                0/ 100 =  0%   |
  5    4ms    20/ 100 = 20%    20/ 100 = 20%  fixed-203-69-2.iusacell.net [189.203.69.2]
                                0/ 100 =  0%   |
  6   34ms     0/ 100 =  0%     0/ 100 =  0%  8-1-33.ear1.Dallas1.Level3.net [4.71.220.89]
                                0/ 100 =  0%   |
  7   34ms     0/ 100 =  0%     0/ 100 =  0%  ae-3-80.edge5.Dallas3.Level3.net [4.69.145.145]
                                0/ 100 =  0%   |
  8   33ms     0/ 100 =  0%     0/ 100 =  0%  ae13.dal33.ip4.tinet.net [77.67.71.221]
                                0/ 100 =  0%   |
  9   79ms     0/ 100 =  0%     0/ 100 =  0%  xe-1-0-0.mtl10.ip4.tinet.net [89.149.185.41]
                                2/ 100 =  2%   |
 10   73ms    14/ 100 = 14%    12/ 100 = 12%  te2-2.cr2.mtl3.gtcomm.net [67.215.0.160]
                                0/ 100 =  0%   |
 11   72ms     2/ 100 =  2%     0/ 100 =  0%  ae2.csr2.mtl3.gtcomm.net [67.215.0.134]
                                2/ 100 =  2%   |
 12   72ms    18/ 100 = 18%    14/ 100 = 14%  te3-4.dist1.mtl8.gtcomm.net [67.215.0.83]
                                0/ 100 =  0%   |
 13   72ms     4/ 100 =  4%     0/ 100 =  0%  ns1.marveldns.com [173.209.57.82]

Trace complete.

Coisas que você pode tentar por si mesmo

Se você quiser tentar, estas são algumas das coisas que configurei no servidor para fins de teste:

Arquivo grande no servidor HTTP

Coloquei um arquivo de 5 GB no meu servidor que pode ser baixado via HTTP. Você pode encontrá-lo aqui: http://www.marveldns.com/transfer_test/

Aplicativo Speedtest MINI

Eu configurei um teste "speedtest mini" no meu servidor. Você pode visitá-lo e ver a velocidade que diz que está obtendo para download e upload no meu servidor e em você. Você pode encontrá-lo aqui: http://www.marveldns.com/speedtest/

Finalmente :

Como eu disse antes, estou tentando obter ajuda para entender a coisa toda. Não sou especialista em TCP / IP ou em redes de ponta. Sinceramente, nem tenho claro como usar os resultados do tracert, iperf ou pingpath para resolver o problema, mas os incluo porque sempre sou solicitado quando falo sobre esse problema.

Se a minha pergunta não tem algo a ser melhor, não a diminua e me avise o que há de errado com ela ou o que mais eu posso adicionar para obter ajuda. Obrigado.

Francisco Zarabozo
fonte
só porque estou curioso, qual a velocidade que você tem quando wget seu arquivo no localhost no seu servidor dedicado?
Brice
Oi Brice. Eu recebo algo em torno de 50 MB / s (bytes, não bits), que é praticamente a mesma velocidade que eu recebo se eu copiar manualmente o arquivo para a mesma pasta no mesmo disco diretamente no Windows Explorer (por isso é limitado pela velocidade de enquanto lê e grava para si próprio).
Francisco Zarabozo
1
Segundo a tracert, sua estação de trabalho está em uma rede bastante grande. Você já tentou perguntar ao administrador da rede local se havia algum tipo de Qo que atrasaria as conexões?
Se você iniciar várias transferências simultaneamente, a velocidade combinada chega perto dos 50Mbit / s esperados? ie É lento em geral ou lento por conexão?
Grant
@Grant: Com várias conexões, ele anuncia até 50 Mbps. O limite ocorre por conexão.
Francisco Zarabozo 14/05

Respostas:

9

O gargalo que vejo ao acessar esse URL deve-se claramente ao tamanho da janela.

Quando tento fazer o download do seu servidor, recebo 555KB / s. Eu tenho um tempo de ida e volta de 108ms. Fazendo as contas, obtenho o seguinte tamanho de janela: 555KB / s * 108ms = 59.94KB.

Desde que eu faça isso a partir de um host em um datacenter, recebo um rendimento e uma ida e volta muito consistentes. Além disso, se eu iniciar dois downloads em paralelo, cada um receberá 555KB / s. Esses são exatamente os sintomas que você verá quando o gargalo for o tamanho da janela.

Sem a escala da janela, a janela não pode ser maior que 64 KB. Mas vejo o dimensionamento da janela ser negociado, portanto, maior rendimento deve ser possível. Isso deixa duas hipóteses para investigar:

  • Algo está atrapalhando a opção de dimensionamento da janela no caminho do cliente para o servidor, fazendo com que o servidor pense que a janela está dimensionada por um fator de 1.
  • O servidor pode estar configurado para nunca usar mais de 60 KB de janela de envio em cada conexão.

O primeiro é fácil de verificar se você pode executar uma captura de pacotes no servidor. Basta olhar para a opção de escala nos pacotes SYN recebidos para descobrir se um fator de escala maior que um é recebido pelo servidor. Eu posso recomendar o uso do Wireshark para analisar o tráfego.

A verificação da segunda hipótese requer algum conhecimento do sistema operacional que você está usando. Por acaso, você escolheu um sistema operacional desconhecido para mim, para que eu não possa ajudar. Então, só posso ajudar com a experiência em redes.

Kasperd
fonte
Não tenho 100% de certeza, mas o tamanho da janela não é afetado pelo tamanho do buffer de envio e recebimento do soquete (opções de soquete SO_RVSBUF e SO_SNDBUF)? Vi incidentes semelhantes em que o buffer era muito pequeno (por exemplo, 1 KB), e a taxa de transferência era muito restrita em comparação com 4KB ou 8 KB).
Cameron Kerr #
@CameronKerr Seu comentário me levou a dar uma outra olhada na comunicação. Desta vez, testei no meu laptop (que possui Wi-Fi e baixa taxa de transferência). O que observei foi que recebo 138 KB / s com uma ida e volta de 105ms. Isso significa um tamanho efetivo de janela de 14,5 KB. A janela de recebimento anunciada pelo meu laptop aumentou para 679 << 7 (cerca de 85 KB) antes da taxa de transferência estabilizada. Isso deveria descartar a possibilidade de que o fator de escala fosse zerado em trânsito e excluir a possibilidade de que o rendimento fosse restringido pelo buffer de recebimento do meu lado.
Kasperd
Um artigo relevante para o Windows Server 2008 r2 pode ser encontrado aqui: andydavies.me/blog/2011/11/21/…
Francisco Zarabozo