OpenWrt: Reducir latencia con SQM
2018-07-20
Índice
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.
Espero que te haya gustado, pasa un buen día. 🐧