OpenWrt: Reducir latencia con SQM

Por qué usar SQM (Smart Queue Management)

A raíz de una serie de artículos que publicaron en Naseros donde explicaban la importancia de la latencia en un router, sobre todo a la hora de jugar me propuse hacer lo mismo pero en OpenWrt.

Si aun no has visto su videos o leído sus artículos te recomiendo que lo hagas porque explica perfectamente y de una forma muy sencilla lo que vamos a realizar a continuación.

En Github tenemos una serie de scripts para el mantenimiento y test de un router con OpenWrt https://github.com/richb-hanover/OpenWrtScripts , uno de ellos es betterspeedtestsh que nos va a permitir comprobar la latencia. Para pode utilizar estos scripts vamos necesitar el paquete netperf

opkg update
opkg install netperf

En una primera ejecución del test, sin configurar SQM, me dio los siguientes valores:

root@OpenWrt:~# ./betterspeedtest.sh
2018-04-17 23:09:45 Testing against netperf.bufferbloat.net (ipv4) with 5 simultaneous sessions while pinging gstatic.com (60 seconds in each direction)
.............................................................
 Download:  49.71 Mbps
  Latency: (in msec, 59 pings, 0.00% packet loss)
      Min: 4.167
    10pct: 13.748
   Median: 61.393
      Avg: 80.977
    90pct: 167.430
      Max: 182.111
.......................................................................
   Upload:  4.71 Mbps
  Latency: (in msec, 66 pings, 0.00% packet loss)
      Min: 3.708
    10pct: 445.336
   Median: 5407.468
      Avg: 4739.046
    90pct: 7458.445
      Max: 7545.656
root@OpenWrt:~#

Como puedes ver los datos de bajada son aceptables, en cambio en los de subida, la latencia esta disparada.

Instalación

Para empezar debemos de tener instalados los paquetes necesarios para SQM. los paquetes sqm-scripts y luci-app-sqm

opkg install sqm-scripts luci-app-sqm

Mi proveedor de internet encapsula todo el trafico de datos sobre una VLAN, concretamente lo hace a través de una vlan con id 832, por lo que en mi router creé un vlan con esa id, y sobre esa vlan es sobre la que voy a trabajar.

Si quieres que la instancia de SQM que vamos a crear afecte a todo tu tráfico de datos tendrás que seleccionar la interfaz de red del puerto WAN, normalmente suele ser eht0 , para ver que interfaz tiene asignada el puerto WAN del router, lo puedes mirar el menú Red -> Interfaces

Una vez identificada la interfaz de red, es hora e configurar SQM

Desde LuCI en el menu SQM QoS

Pulsamos en el botón Añadir

Habilitamos la casilla nueva instancia de SQM y seleccionamos el nombre de la interfaz

Debemos de seleccionar una velocidad máxima de bajada y otra máxima de subida para el trafico de datos, calcula un 90-95% del total, ten cuidado porque los valores se expresan en en kilobit y no en megabit.

Con esto en principio valdría, unicamente quedaría pulsar en Guardar y Aplicar

Volveríamos a ejecutar el script betterspeedtest.sh y comprobar si ha mejorado la latencia.

Afinando SQM

En mi caso la latencia no mejoró lo suficiente, por lo que realicé varias pruebas en la configuración de SQM, concretamente en la pestaña Link Layer Adaptation cambiando los valores a ATM y como valor overhead 44, la cosa mejoró bastante

root@OpenWrt:~# ./betterspeedtest.sh
2018-04-17 23:14:32 Testing against netperf.bufferbloat.net (ipv4) with 5 simultaneous sessions while pinging gstatic.com (60 seconds in each direction)
.............................................................
 Download:  49.14 Mbps
  Latency: (in msec, 61 pings, 0.00% packet loss)
      Min: 3.536
    10pct: 3.935
   Median: 44.123
      Avg: 65.071
    90pct: 152.995
      Max: 178.414
..............................................................
   Upload:  4.29 Mbps
  Latency: (in msec, 57 pings, 0.00% packet loss)
      Min: 5.641
    10pct: 6.193
   Median: 14.039
      Avg: 13.747
    90pct: 19.482
      Max: 27.476
root@OpenWrt:~#

Por cierto, tengo contratada una conexión a internet mediante fibra con 50 Mbits de bajada y 5 Megabit de subida.

comentario powered by Disqus