Tunning TCP en redes GNU/Linux

Que pasa si tenemos un gran cantidad de solicitudes o algun servicio responde muy lento en la red.

Por defecto, la pila de red de GNU/Linux no está configurado para transferencia de archivos grandes y de alta velocidad a través de enlaces WAN. Esto se hace para ahorrar recursos de memoria. Pero se puede aumentar el tamaño de búffer de red para redes de alta velocidad que conectan a los sistemas de servidor.

############ Revizando valores del servidor

1)El valor predeterminado máximo en GNU/Linux en búffer TCP son demasiado pequeñas. Memoria de TCP se calcula automáticamente en función de la memoria del sistema, usted puede encontrar los valores reales.
root@ascariote:~# cat /proc/sys/net/ipv4/tcp_mem
44832    59776    89664
root@ascariote:~#

2)El valor por default y maximo de memoria para recepcion de paquetes.
root@ascariote:~# cat /proc/sys/net/core/rmem_default
112640
root@ascariote:~# cat /proc/sys/net/core/rmem_max
112640
root@ascariote:~#

3)El valor por default y maximo de memoria para envio de paquetes.
root@ascariote:~# cat /proc/sys/net/core/wmem_default
112640
root@ascariote:~# cat /proc/sys/net/core/wmem_max
112640
root@ascariote:~#

4)El tamaño de buffer de memoria.
root@ascariote:~# cat /proc/sys/net/core/optmem_max
10240
root@ascariote:~#

NOTA: El valor predeterminado de rmem_max y wmem_max es de unos 110 KB en la mayoría de las distribuciones de GNU/Linux, que puede ser suficiente para general una baja latencia entorno de red o para aplicaciones tales como DNS/servidor Web. Sin embargo, si la latencia es grande, el tamaño por defecto puede ser demasiado pequeño.

############ Calculando en valor optimo Buffer TCP


5)TCP depende de 2 factores de rendimiento:
    ------- Ancho de banda del enlace
    ------- RTT "Round-Trip delay Time" Se aplica en el mundo de las telecomunicaciones y redes informáticas al tiempo que tarda un paquete enviado desde un emisor en volver a este mismo emisor habiendo pasado por el receptor de destino.

Teniendo en cuenta estos 2 valores se puede calcualar el BDP "Bandwidth Delay Product, el ancho de banda de retardo del producto", esta forma sencilla de calcular el optimo de los tamaños del buffer TCP

Ejemplo:     
Si se comunica su aplicación a través de una red de área local de 100 Mbps con un RTT de 50 ms, el BDP es:
100 Mbps * 0.050 seg / 8 = 0.625MB = 625kb

NOTA: Dividir por 8 a convertir de bits a bytes comunicado.

6) Obteniendo el mejor rendimiento de la conexion.
En GNU/Linux en la versiones del kernel 2.6 el buffer es de 110 KB, lo que limita el ancho de banda para la conexión a 2.2MBps,
Ejemplo:
110KB / 0,050 = 2.2MBps

Este seria el rendimiento optimo.
Si utilizaramos el valor del buffer que necesita nuestra conexion, entonces el ancho de banda seria:
625kb / 0,050 = 12.5MBps

############ Modificando los valores del Buffer TCP

7)Tendremos que cambiar estos valores a nivel de kernel, tendremos que cambiar de 110 KB a 625 KB.
root@ascariote:~# echo "net.core.wmem_max=640000" >> /etc/sysctl.conf
root@ascariote:~# echo "net.core.rmem_max=640000" >> /etc/sysctl.conf
root@ascariote:~# echo "net.ipv4.tcp_rmem= 10240 87380 640000" >> /etc/sysctl.conf
root@ascariote:~# echo "net.ipv4.tcp_wmem= 10240 87380 640000" >> /etc/sysctl.conf

8)Activamos los siguientes modulos dentro del kernel
root@ascariote:~# echo "net.ipv4.tcp_window_scaling = 1" >> /etc/sysctl.conf
root@ascariote:~# echo "net.ipv4.tcp_timestamps = 1" >> /etc/sysctl.conf
root@ascariote:~# echo "net.ipv4.tcp_sack = 1" >> /etc/sysctl.conf

9)Recargamos la configuracion.
root@ascariote:~# sysctl -p

Con estos cambio ya tendremos activado un rendimiento mas optimo para nuestro servicios de red.

Comentarios
No hay ningún comentario aún. Sea usted el primero.