Tengo algunos problemas con la velocidad del rendimiento de la red en un servidor Linux que ejecuta Ubuntu 9.10. Las velocidades de transferencia en todo tipo de tráfico son de alrededor de 1,5 MB/s en una conexión Ethernet con cable de 1000mbit/s. Este servidor ha alcanzado 55 MB/s sobre samba en el pasado reciente. No he cambiado el hardware ni la configuración de la red. Ejecuto actualizaciones de forma regular y lo último y lo mejor de los repositorios de Ubuntu se está ejecutando en esta máquina.
PC de escritorio con Windows - conmutador 1000 - conmutador 1000 - servidor Linux
Todos los interruptores son netgear, y todos muestran una luz verde para sus conexiones, lo que significa que la conexión es de 1000mbit/s. Las luces son amarillas cuando la conexión es de solo 100mbit/s. Otra información de diagnóstico:
[email protected]:~# 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)
[email protected]:~# 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
[email protected]:~# mii-tool
eth0: negotiated 1000baseT-FD flow-control, link ok
El servidor cree que tiene una conexión de 1000mbit/s. He probado la velocidad de transferencia copiando archivos usando Samba. También utilicé netcat (nc target 10000 <aBigFile) en el servidor para transferir a Windows (nc -l -p 10000) y vi niveles similares de bajo rendimiento.
Probé la velocidad de los discos duros usando hdparm y obtuve:
[email protected]:~# 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
La lectura del mismo archivo para su transferencia usando DD produjo lo siguiente:
[email protected]:/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
Estoy perplejo. ¿Qué podría estar causando el bajo rendimiento de la red, que es 2 órdenes de magnitud más bajo de lo que la red es capaz de hacer?
En mi experiencia profesional, he luchado por obtener un buen rendimiento de red sólido con Samba en GNU/Linux. Mencionaste que has logrado velocidades de 55 MBps con él, lo cual creo, así que supongo que definitivamente hay algo más en juego.
Sin embargo, ¿ha probado NFS, FTP y SCP? ¿Los problemas de ancho de banda son consistentes en los diferentes protocolos? Si es así, es probable que se reduzca a la conexión física. Si obtiene resultados inconsistentes, es probable que sea un problema de software.
Además de probar los otros protocolos, ¿está utilizando cifrado en la transferencia? Por ejemplo, usando rsync -z
es bueno para habilitar la compresión, pero tiene un costo de CPU, que afecta severamente la velocidad general de la transferencia. Si usa SSH
con rsync
, entonces tiene cifrado además de la compresión, y su CPU estará bajo un poco de estrés, lo que provocará graves penalizaciones de velocidad.
Algunas cosas que debe considerar verificar:
netperf es excelente para solucionar problemas de rendimiento de la red. Pero netcat no está mal en caso de apuro.
netstat -i
y busque errores rx/tx.netstat -s
y busque problemas de tcp: compare los valores antes y después de la copia del archivo y busque picos grandes en los reinicios o retransmisiones.Puede comprobar la congestión de su red; ¿Quizás algunos otros dispositivos están consumiendo todo su ancho de banda?
Más allá de eso, tal vez algo esté mal con su interfaz de red y/o su controlador. Bastante raro.
Si es posible, para eliminar la mayoría de las dudas de que se trate de un problema de sistema operativo/controlador/tarjeta, conecte las computadoras juntas usando un cable cruzado. Esto eliminará el conmutador y otros posibles problemas de red de su ecuación.