Ir al contenido

SQM y CAKE: elimina el lag durante descargas y subidas

  • Decide si el «lag al descargar o subir» es bufferbloat y no un problema de Wi-Fi, del ONT o de congestión del ISP.
  • Instala y configura sqm-scripts y CAKE en OpenWrt 25.12.
  • Registra la latencia en reposo y bajo carga, la pérdida de paquetes y el rendimiento, en lugar de afirmar que «se siente más rápido».
  • Sabe cuándo SQM no es la herramienta adecuada y cómo desactivarlo rápidamente.
  • OpenWrt 25.12.6 con apk; sqm-scripts 1.7.2; luci-app-sqm opcional.
  • El enrutador es la puerta de enlace NAT principal y el tráfico WAN pasa por él. En un enrutador en modo AP o bypass, SQM puede no ver el tráfico principal.
  • CAKE consume CPU; en líneas de gigabit comprueba el uso de un solo núcleo antes de añadir shaping.
  • Esta página es E2 parcial: se probaron la instalación y el attach/stop de CAKE. Las afirmaciones de rendimiento o latencia requieren una WAN real y son E3.

Señales típicas:

  • El ping en reposo es bueno, pero la latencia se dispara en cuanto empieza una descarga o subida; los juegos dan saltos y las llamadas se entrecortan.
  • Limitar la descarga y la subida hace que la latencia baje de nuevo.
  • Ocurre igual en clientes por cable y por Wi-Fi, lo que apunta a la cola de la WAN.

No es bufferbloat:

  • Solo una habitación o un cliente Wi-Fi va mal: revisa la señal, las interferencias y el roaming.
  • Hay latencia o pérdida altas incluso en reposo: revisa el ONT, el ISP y la línea.
  • La CPU del enrutador ya está saturada; SQM puede empeorarlo.
Parámetro Significado Error común
interface interfaz a la que se aplica shaping, normalmente wan usar eth0/br-lan, de modo que el tráfico lo esquiva
download/upload velocidad con shaping (kbit/s) usar la velocidad anunciada del plan, con lo que la cola sigue llena
qdisc cake o fq_codel activar SQM pero dejar el qdisc por defecto
script piece_of_cake.qos / simplest.qos script equivocado, las opciones no se aplican
linklayer/overhead sobrecarga de la capa de enlace copiar valores de Ethernet en PPPoE/VLAN
CPU coste de cómputo de CAKE CAKE a gigabit en una CPU que no da abasto

Empieza entre el 85 % y el 95 % del rendimiento medido y luego ajusta según la latencia bajo carga. No escribas «plan de 100M = 100000».

Shell del routerRegistra la WAN, la CPU y el qdisc actual
Ventana de terminal
ip -br link
ip -br addr
uci show network | grep -E "wan|device"
uci show sqm 2>/dev/null || echo "sqm not installed"
top -bn1 | head -15

Anota la interfaz lógica WAN, el dispositivo físico, la velocidad contratada o medida y el modelo de CPU. Mantén el acceso a LuCI/SSH.

EsperadoSabes qué interfaz vas a cambiar y si SQM ya está activo.

Shell del routerToma una referencia en reposo
Ventana de terminal
ping -c 20 1.1.1.1
ping -c 20 192.168.50.1

Usa irtt/flent si están disponibles; si no, registra min/avg/max/mdev y la pérdida.

EsperadoLa latencia y la pérdida en reposo quedan registradas para comparar.

Shell del routerInstala SQM
Ventana de terminal
apk update
apk add sqm-scripts luci-app-sqm

luci-app-sqm por sí solo no instala los scripts; verifica con apk info -e sqm-scripts.

Esperadosqm-scripts y la aplicación de LuCI están instalados.

LuCIConfigura SQM en LuCI

Abre Red → SQM QoS:

  1. Actívalo.
  2. Selecciona wan (no br-lan).
  3. Establece la descarga y la subida entre el 85 % y el 95 % del rendimiento medido.
  4. Elige cake y piece_of_cake.qos.
  5. Selecciona la capa de enlace real (no copies valores de Ethernet en PPPoE/VLAN).
  6. Guarda y aplica.

Empieza de forma conservadora; sube la velocidad solo después de que la latencia mejore.

EsperadoLa WAN tiene cake/piece_of_cake y se puede activar o desactivar.

Shell del routerEquivalente por CLI (inspecciona primero el nombre de la sección)
Ventana de terminal
uci show sqm

Puede que la sección no sea @queue[0]; usa el nombre real. Ejemplo:

Ventana de terminal
uci set sqm.@queue[0].enabled='1'
uci set sqm.@queue[0].interface='wan'
uci set sqm.@queue[0].download='90000'
uci set sqm.@queue[0].upload='18000'
uci set sqm.@queue[0].qdisc='cake'
uci set sqm.@queue[0].script='piece_of_cake.qos'
uci set sqm.@queue[0].linklayer='ethernet'
uci set sqm.@queue[0].overhead='0'
uci commit sqm
/etc/init.d/sqm restart

Estas cifras son ejemplos, no los parámetros de tu línea; verifica linklayer/overhead.

Esperadouci show sqm muestra la cola que has cambiado.

Shell del routerConfirma que el qdisc está asociado
Ventana de terminal
tc -s qdisc show dev wan
tc -s qdisc show | grep -E "cake|fq_codel|ifb"
logread -e sqm | tail -30

Si solo ves noqueue/pfifo_fast, SQM no está activo; revisa la interfaz y los registros de /etc/init.d/sqm.

Esperadocake/fq_codel aparece en wan y el registro está limpio.

OrdenadorMide la latencia durante la descarga y la subida

Mantén un ping en marcha mientras otro terminal satura la línea:

Ventana de terminal
# terminal A
ping -i 0.2 1.1.1.1
# terminal B: use a trusted speed/download tool to saturate the line

Registra:

  • min/avg/max/mdev en reposo y bajo carga;
  • la pérdida de paquetes;
  • si el rendimiento cayó de forma significativa;
  • si un núcleo de la CPU del enrutador está saturado.

Sin estos datos, no escribas «SQM redujo la latencia».

EsperadoTienes datos de antes y después, no una sensación.

Ventana de terminal
logread -e sqm | tail -50
tc -s qdisc show dev wan
uci show sqm

Causas comunes: interfaz equivocada, falta sqm-scripts, combinación de qdisc/script no compatible, errores de tc. Desactiva SQM y restaura el estado anterior antes de depurar.

El rendimiento se desploma / la CPU se satura

Sección titulada «El rendimiento se desploma / la CPU se satura»
  • Velocidad configurada demasiado baja: súbela por pasos a partir del valor medido.
  • CAKE es demasiado costoso para una CPU débil: usa fq_codel o una velocidad menor.
  • Sobrecarga de enlace incorrecta: corrígela para PPPoE/VLAN.
  • Desactiva SQM y confirma que el rendimiento se recupera.
  • El tráfico esquiva el enrutador (AP/bypass/switch).
  • El cuello de botella es el Wi-Fi o la congestión del ISP.
  • Solo se aplica shaping a la descarga; la subida sigue congestionada.
  • Mediste la latencia en reposo, no bajo carga.
Ventana de terminal
uci set sqm.@queue[0].enabled='0'
uci commit sqm
/etc/init.d/sqm restart

O restaura la copia de seguridad anterior de /etc/config/sqm.

  • Entorno: OpenWrt 25.12.6 x86 VM 200; WAN eth1 DHCP 192.168.50.158/24; sqm-scripts 1.7.2-r1, luci-app-sqm.
  • Configuración: eth1, descarga 100000 Kbps, subida 20000 Kbps, piece_of_cake.qos, cake.
  • Inicio: SQM: ... started on eth1 successfully; tc -s qdisc show dev eth1 mostró qdisc cake ... bandwidth 20Mbit.
  • Parada: SQM: Stopping SQM on eth1; el qdisc volvió a fq_codel.
  • No uses estas cifras de la VM para afirmar una latencia menor o una mejor experiencia; no hay línea real, ni latencia bajo carga, ni comparación de rendimiento.
  • No probado: bufferbloat real en banda ancha antes y después, uso de un solo núcleo de CPU, sobrecarga de PPPoE/VLAN, cuello de botella del Wi-Fi.
  • Receta: tests/recipes/sqm-25.12.md.
  • Esto es E2 parcial: se probaron la instalación, el attach/stop de CAKE y la recuperación; el rendimiento en una línea real sigue siendo alcance E3.
  • Una VM solo demuestra los comandos y el attach del qdisc; no puede representar una banda ancha doméstica. No uses cifras de la VM para afirmar que «funciona».
  • En un entorno real, registra la línea, la CPU y el qdisc, y la latencia y el rendimiento en reposo y bajo carga antes de decidir si mantienes SQM.

Fuentes

Router.Homes

Notas independientes sobre OpenWrt. Cada página indica el firmware, el dispositivo, el gestor de paquetes y la vía de retorno.

Iconos: Solar by 480 Design, CC BY 4.0