Por que esta conexão de rede é tão lenta?

11

Estou tendo alguns problemas com a velocidade de desempenho da rede em um servidor Linux que executa o Ubuntu 9.10. As velocidades de transferência em todos os tipos de tráfego estão em torno de 1,5 MB / s em uma conexão ethernet com fio de 1000mbit / s. Este servidor atingiu 55MB / s sobre o samba no passado recente. Eu não mudei o hardware ou configuração de rede. Eu corro atualizações regularmente, e os maiores e mais recentes repositórios do Ubuntu estão rodando nesta máquina.

Configuração de hardware

Desktop PC - switch 1000 - switch 1000 - servidor Linux

Todos os switches são netgear, e todos eles mostram uma luz verde para suas conexões, o que significa que a conexão é de 1000mbit / s. As luzes são amarelas quando a conexão é de apenas 100mbit / s. Outra informação diagnóstica:

root@server:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:6e:3e:ae:36
          inet addr:192.168.1.30  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:6eff:fe3e:ae36/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28678 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73531 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2109780 (2.1 MB)  TX bytes:111039729 (111.0 MB)
          Interrupt:22

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:113 errors:0 dropped:0 overruns:0 frame:0
          TX packets:113 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:23469 (23.4 KB)  TX bytes:23469 (23.4 KB)


root@server:~# ethtool eth0
Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pg
        Wake-on: g
        Current message level: 0x00000037 (55)
        Link detected: yes

root@server:~# mii-tool
eth0: negotiated 1000baseT-FD flow-control, link ok

O servidor acha que tem uma conexão de 1000mbit / s. Eu testei a velocidade da transferência copiando arquivos usando o Samba. Eu também usei o netcat (nc target 10000 < aBigFile) no servidor para transferir para o Windows (nc -l -p 10000) e vi níveis semelhantes de desempenho ruim.

Eu testei a velocidade dos discos rígidos usando o hdparm e obtive:

root@server:~# hdparm -tT /dev/md0
/dev/md0:
 Timing cached reads:   1436 MB in  2.00 seconds = 718.01 MB/sec
 Timing buffered disk reads:  444 MB in  3.02 seconds = 147.24 MB/sec

A leitura do mesmo arquivo para transferência usando DD produziu o seguinte:

paul@server:/home/share/Series/New$ dd if=aBigFile of=/dev/null
3200369+1 records in
3200369+1 records out
1638589012 bytes (1.6 GB) copied, 12.7091 s, 129 MB/s

Estou perplexo. O que poderia estar causando o fraco desempenho da rede, que é 2 ordens de magnitude menor do que a capacidade da rede?

    
por Paul Keeble 18.08.2010 / 00:03

5 respostas

6

Algumas coisas que você deve considerar verificar:

  1. Duplex - se um lado acha que o link é full duplex e o outro lado acha que o link é half duplex, espere maldade.
  2. Comutador defeituoso? Ignore-os.
  3. quadros gigantes. A MTU de 9000 bytes diminui a sobrecarga, o que deve aumentar o rendimento (perdendo um pouco de latência). Parece que o seu problema é tão ruim que isso não ajudará.
  4. Funcionalidades TCP: ECN, SACK, controle de congestionamento alg
  5. Tamanhos de janela de Envio / Recebimento TCP ( detalhes para o linux )

O netperf é ótimo para solucionar problemas de desempenho de rede. Mas netcat não é ruim em uma pitada.

    
por 18.08.2010 / 04:32
6

Na minha experiência profissional, tenho lutado para obter um bom desempenho de rede sólida com o Samba no GNU / Linux. Você mencionou que alcançou velocidades de 55 MBps com ele, o que eu acredito, então acredito que algo esteja definitivamente em jogo.

No entanto, você já tentou NFS, FTP e SCP? Os problemas de largura de banda são consistentes nos diferentes protocolos? Se assim for, é provável que se reduza à conexão física. Se você obtiver resultados inconsistentes, provavelmente é um problema de software.

Além de testar os outros protocolos, você está usando criptografia na transferência? Por exemplo, usar rsync -z é bom para ativar a compactação, mas é um custo de CPU, o que afeta severamente a velocidade geral da transferência. Se estiver usando SSH com rsync , você terá criptografia em cima da compactação e sua CPU sofrerá um pouco de estresse, causando penalidades severas na velocidade.

    
por 19.08.2010 / 10:24
2
  1. Experimente netstat -i e procure por erros de rx / tx.
  2. Teste netstat -s e procure por problemas de tcp - compare os valores antes e depois da cópia do arquivo e procure por grandes picos nas redefinições ou retransmissões.
por 18.08.2010 / 09:10
0

Você pode verificar o congestionamento de sua rede; talvez alguns outros dispositivos estejam consumindo toda a sua largura de banda?

Além disso, talvez algo esteja errado com sua interface de rede e / ou com seu driver. Muito estranho.

    
por 18.08.2010 / 00:33
0

Se for possível, para remover a maioria das dúvidas de que é realmente um problema de OS / driver / cartão, conecte os computadores usando um cabo cross over. Isso removerá o switch e outros possíveis problemas de rede da sua equação.

    
por 18.08.2010 / 21:42