Discusión:Modificando RWIN para mejorar la velocidad

De BandaAncha.st
Saltar a: navegación, buscar

Ya que tenemos la existencia del BASpeed... ¿no sería mejor echar mano de él en este artículo? -HeffeQue 01:00 13 jun 2007 (CEST)

Es posible, pero quería dejar un artículo técnico, siendo una explicación de lo que es el rwin, usando utilidades lo más simple posible, cosa que se consigue con el drtcp. De todos modos esto es una wiki, no habria problema en editar :)


Alguien ha modificado los valores optimos de pppoe y pppoa por 1454 y 1470 respectivamente. Aquí dejo la razón por la que los anteriores (1492 y 1478) son los correctos:



PPPoA: Tenemos que conseguir 31 celdas ATM exactas para que sea óptimo. 32 no hay manera de llenarlas, así que tienen que ser 31.

Con VC-MUX, el que usan la mayoría de proveedores en PPPoA, el overhead es 8 bytes (trail AAL5), mas 2 bytes de PPP. Por lo tanto, el valor máximo para que no haya padding (relleno) es MTU=1478, MSS=1438:

1438+40(ip+tcp)+8(aal5)+2(ppp)= 1488/48= 31 celdas exactas.

31 celdas * 53 bytes cada una = 1643 bytes. O sea, 1438 / 1643 = rendimiento del 87.5%. Con MTU = 1470, 1430/1643=87%.


PPPoE:

ppp: 2 bytes, pppoe: 6 bytes, mac sin fcs: 14 bytes, rfc (LLC): 10 bytes, aal5: 8 bytes

MTU no puede ser mayor a 1492 ya que el maximo payload de ethernet es 1500, y a los 1492 hay que sumar ppp y pppoe que se mete en el payload de la trama ethernet con lo que ya llegamos a 1500.

Para que no haya padding no podemos usar 32 celdas porque éstas tienen capacidad para 1536 bytes y el tamaño total con MTU=1492 es 1492+2+6+14+10+8=1532 bytes, asi que habría algo de padding. En 31 celdas ATM podemos llevar 1488 bytes. 1488-8-10-14-6-2= 1448 de MTU.

Rendimiento con MTU 1492: 1452 / 1696 (32 celdas 53 bytes cada una) = 85.6% de rto. Rendimiento con MTU 1448: 1408 / 1643 = 85.7% de rto.

Es marginalmente mayor, así que escogí 1492 porque para LAN será algo mayor el rendimiento entre equipos en red.

y kernel linux ?

quisiera añadir esto: ... que lo he sacado de Speedguide para linux, un script sería:

  1. p.e. para RWIN=256960

echo 256960 > /proc/sys/net/core/rmem_default

echo 256960 > /proc/sys/net/core/rmem_max

echo 256960 > /proc/sys/net/core/wmem_default

echo 256960 > /proc/sys/net/core/wmem_max

  1. esta parte es obligatoria

echo 0 > /proc/sys/net/ipv4/tcp_timestamps

echo 1 > /proc/sys/net/ipv4/tcp_sack

echo 1 > /proc/sys/net/ipv4/tcp_window_scaling


  1. otra forma, para que se aplique en cada reinicio editamos /etc/sysctl.conf y añadimos: (p,e, rwin=256960)


net.core.rmem_default = 256960

net.core.rmem_max = 256960

net.core.wmem_default = 256960

net.core.wmem_max = 256960


net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_sack =1

net.ipv4.tcp_window_scaling = 1


el mtu se configura añadiendo a /etc/rc.local o donde se quiera la línea ifconfig "mi_interfaz" mtu "mi_mtu"