Bufferbloat

Publicado en 'GNU/Linux' por gnox, 22 Oct 2015.





  1. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    793
    Likes:
    252




    Problema : te ha pasado que cuando haces una descarga/subida en tu PC o alguien hace algo similar en tu LAN la latencia se incrementa. Lo mas probale que sufras de Bufferbloat.

    Código:
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=637 ttl=55 time=76.2 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=638 ttl=55 time=75.8 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=639 ttl=55 time=74.1 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=640 ttl=55 time=75.3 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=641 ttl=55 time=73.7 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=642 ttl=55 time=76.0 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=643 ttl=55 time=112 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=644 ttl=55 time=156 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=646 ttl=55 time=390.5 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=647 ttl=55 time=390.1 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=648 ttl=55 time=430 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=649 ttl=55 time=344.0 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=650 ttl=55 time=206.6 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=651 ttl=55 time=105 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=652 ttl=55 time=104 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=653 ttl=55 time=81.1 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=654 ttl=55 time=77.4 ms
    64 bytes from mia07s27-in-f4.1e100.net (216.58.219.164): icmp_seq=655 ttl=55 time=74.2 ms
    
    Bufferbloat es la latencia que se genera cuando hay muchos paquetes(datos) que enviar y/o recibir y el equipo(PC/Modem) no es capaz de procesarlos a tiempo generando saltos abruptos de latencia en ping (jittering) y hasta perdida de paquetes. Tu LAN se maneja internamente a velocidades mayores a lo que tu salida/entrada de internet maneja generando un embudo (uno de los tantos), afectando a cualquier otra tarea que estes haciendo en internet (VOIP, Web Pages, Juegos , etc).

    Es un problema que se viene arrastrando desde hace tiempo por los algoritmos de encolamiento de los equipos(sobretodo modems/router) y la falta de actualizaciones a los firmware de los mismos, y como se sabe esos firmwares están basados prácticamente casi todos en una version de Kernel de Linux. Las soluciones que se han dado casi siempre han sido reglas de firewall o QoS(con otros algoritmos mayoria de tipo FIFO) en los equipos que aminoran el problema, si es que son bien implementados, pero básicamente siguen usando los mismos viejos algoritmos de encolamiento a nivel de interface de red.

    Solución : fq_codel
    Desde hace varios años (4-5?) ronda este nuevo algoritmo fq_codel (uno de los tantos qdisc = queue discipline) que se esta haciendo default en varias distribuciones de Linux que mejoran considerablemente el encolamiento de paquetes, haciendo que la interactividad del usuario no se vea afectada por el uso del trafico de la red (o abuso), es parte del Kernel a partir de la versión 3.5.

    Este algoritmo permite lo siguiente, visualmente hablando, pasar de esto :
    (varias conexiones, distinto trafico, alto ping = gráfico inferior)
    [​IMG]

    A esto :
    (mismas conexiones, mismo trafico, notese el tiempo del ping = gráfico inferior)
    [​IMG]

    Video fuente (no encontre los slides):youtube.com/watch?v=Wksh2DPHCDI

    Como detectar Bufferbloat
    1. clasico ping estable a un sitio X, iniciar una descarga (speedtest), si hay saltos tienes bufferbloat.
    2. http://netalyzr.icsi.berkeley.edu/, network buffer en los resultados.
    3. http://www.dslreports.com/speedtest (opción cable/ver medidor bufferbloat A mejor que D).

    Lo ideal es activarlo a nivel de modem/router si es que este tiene una versión actualizada de AQM(Active Queue management) y el kernel del firmware tenga fq_codel (caso modems que soporten firmware wrt, cerowrt/openwrt http://wiki.openwrt.org/toh/start).

    En Linux comun y silvestre podemos activarlo :

    - En Arch esta activo por defecto
    Código:
    $ip addr show wlp0s20u5u4u2
    4: wlp0s20u5u4u2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    ...   
    
    $tc -s qdisc show dev wlp0s20u5u4u2
    qdisc mq 0: root
     Sent 3609 bytes 31 pkt (dropped 0, overlimits 0 requeues 0)
     backlog 0b 0p requeues 0
    qdisc fq_codel 0: parent :1 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms ecn
     Sent 1547 bytes 8 pkt (dropped 0, overlimits 0 requeues 0)
     backlog 0b 0p requeues 0
      maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
      new_flows_len 0 old_flows_len 0
    qdisc fq_codel 0: parent :2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms ecn
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
     backlog 0b 0p requeues 0
      maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
      new_flows_len 0 old_flows_len 0
    qdisc fq_codel 0: parent :3 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms ecn
     Sent 2062 bytes 23 pkt (dropped 0, overlimits 0 requeues 0)
     backlog 0b 0p requeues 0
      maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
      new_flows_len 0 old_flows_len 0
    qdisc fq_codel 0: parent :4 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms ecn
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
     backlog 0b 0p requeues 0
      maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
      new_flows_len 0 old_flows_len 0
    
    Por defecto trabaja bien, pero si se necesita mejor control se puede hacer como con este script que permite usar fq_codel + hbt (para separación de trafico):
    https://wiki.gentoo.org/wiki/Traffic_shaping

    -Debian la ultima versión no lo tiene activo por defecto.
    Código:
    $ip addr show eth0
    2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    ...
    
    -RouterOS(Mikrotik) al parecer no viene para su version 6.x ya que maneja Kernel 3.3.5,según :http://mum.mikrotik.com/presentations/RU13/megis.pdf

    Comparación vs otros algoritmos
    [​IMG]

    Como activar fq_codel si tu Kernel lo permite :
    Código:
    $tc qdisc add dev eth0 root fq_codel
    
    Notas:
    - Acelera el ping?: No, solo lo estabiliza en escenarios de alto trafico.
    - En Windows se puede aplicar lo mismo?: no he encontrado ninguna referencia a Windows, solo le queda depender del modem/router que tenga esta característica, que es lo ideal para cualquier LAN.
    - Puedo reemplazar el firmware del modem del ISP con WRT? : habria que revisar con el ISP, una solución podria ser Modem ISP(bridge) <-> Modem Viejo(WRT) <-> LAN.
    - Si tu ping de por si ya es un desastre con nada de trafico en tu LAN, es problema del ISP.
     
    A CesarChris710, marcoponce, arangaran y 1 otra persona les gustó este mensaje.


  2. leonmorlando

    leonmorlando Miembro de bronce

    Registro:
    21 Ene 2014
    Mensajes:
    1,576
    Likes:
    428
    Los usarios de Windows si se benficiarian con algún firmware WRT ya que al router/modem poco le interesa el sistema operativo del que provienen los paquetes.
    Ahora, me queda la duda: Al cambiar el firmware no se pierde ni la dirección MAC ni la serie del equipo, ¿qué problema podría causar con el ISP? Me imagino que los parametros que brinde el mismo serán descargados como "sólo lectura." ¿no?
     
  3. gnox

    gnox Miembro maestro

    Registro:
    3 Ene 2013
    Mensajes:
    793
    Likes:
    252
    La mac address esta a nivel de nic = hardware.

    Solo una vez reemplace un firmware de modem de ISP con openwrt, y no tuve problemas, pero eso fue hace un egg de años y era de DSL. Ahora pueden haber politicas de bloqueo por no encontrar una version x, modems que se brickean por dif de firmware, modems que te piden codigo de cliente y validan contra la central, etc , hasta creo que hay una noticia que el FCC puede considerar (o esta por aprobar) ilegal reemplazar firmwares. Por eso una opcion seria dejarlo solo como gateway y tener otro equipo que maneje la red de mejor manera.
     
    A leonmorlando le gustó este mensaje.
  4. xxmocoxx

    xxmocoxx Miembro frecuente

    Registro:
    8 Mar 2014
    Mensajes:
    184
    Likes:
    64
    Hola tengo un cablemodem Cisco de claro 15 megas, el problema es que cuando juego online y al hacer speedtest el ping se eleva demasiado, tengo
    Bufferbloat? Y si lo tuviera, como lo soluciono?