HTB + fq_codel + CAKE: Comportamiento Detallado de Colas en LibreQoS
Esta página es el complemento de análisis profundo de colas para Arquitectura Backend de LibreQoS.
Explica:
Por qué LibreQoS combina
HTBcon qdiscs hoja (fq_codeloCAKE)Cómo funciona
fq_codelen la prácticaCómo funciona
CAKEen la prácticaCuándo elegir
fq_codelvsCAKEPatrones de observabilidad y troubleshooting para operadores
1) Por Qué Existen Estos Tres Componentes Juntos
En LibreQoS en producción:
HTBentrega política jerárquica de tasa (rate,ceil, préstamo, jerarquía)fq_codeloCAKEentrega servicio de cola por flujo y AQM dentro de cada envolvente moldeada
Esta separación es intencional:
Problema de política: «¿Cuánto puede enviar esta clase?» ->
HTBProblema de cola: «¿Qué paquete sale después mientras se controla latencia?» ->
fq_codel/CAKE
2) Ubicación en Tiempo de Ejecución en LibreQoS
Conceptualmente, los paquetes pasan por:
raíz
mqjerarquía
HTBqdisc hoja por clase moldeada (
CAKEpor defecto,fq_codelopcional)
Operativamente, suele ser:
mq raíz -> padres HTB por CPU -> clases HTB por circuito -> qdisc hoja (cake diffserv4 o fq_codel)
Cada clase HTB tiene un punto de acople para qdisc hijo. Si no hay qdisc hoja explícito, se usa el comportamiento de cola por defecto del kernel para esa clase.
Modelo práctico de comportamiento en LibreQoS:
La política por defecto de fábrica usa
HTB+cake diffserv4para circuitos moldeados.TreeGuard puede cambiar dinámicamente direcciones de circuito entre
cake diffserv4yfq_codelsegún guardrails de baja carga/RTT.En LibreQoS v2.0, TreeGuard está habilitado por defecto y los operadores deberían revisar su enrolamiento y guardrails si desean comportamiento SQM fijo/manual.
Consulte TreeGuard para detalles de configuración y despliegue.
3) Resumen de HTB para Usuarios de AQM
3.1 Mecánicas centrales de HTB
Los tokens se consumen por bytes de paquete y se recargan con el tiempo.
ratedefine servicio garantizado.ceildefine el máximo prestable cuando existe capacidad en el padre.Los hijos solo piden prestado de capacidad sobrante en ancestros.
La contención entre hermanos depende de
prio, del scheduler y de la proporción de clases.
3.2 Controles clave de HTB
rate,ceilprioburst,cburstquantum,r2qclase
default(concepto Linux HTB; ver nota de comportamiento de LibreQoS)
3.3 Por qué importa para fq_codel y CAKE
fq_codel y CAKE no reemplazan jerarquía ni política de tasa de HTB. Gestionan servicio de cola dentro de la envolvente que HTB permite.
3.4 Comportamiento de tráfico no definido en LibreQoS
El comportamiento de LibreQoS es explícito:
el tráfico no mapeado a un circuito moldeado pasa de largo (pass-through)
LibreQoS no dirige tráfico no definido a clases HTB
defaultel comportamiento de clase
defaultde HTB sigue existiendo en Linuxtc, pero no es la vía usada por LibreQoS para tráfico no definido
Operativamente, esto implica que el troubleshooting de tráfico no definido comienza con validación de clasificación/mapeo, no con ajuste de clase default.
3.5 Esqueleto compacto HTB (patrón de referencia)
Patrón ilustrativo Linux HTB + qdisc hoja:
tc qdisc add dev <ifname> root handle 1: htb default 30
tc class add dev <ifname> parent 1: classid 1:1 htb rate 1gbit ceil 1gbit
tc class add dev <ifname> parent 1:1 classid 1:10 htb rate 700mbit ceil 1gbit prio 1
tc class add dev <ifname> parent 1:1 classid 1:20 htb rate 300mbit ceil 1gbit prio 2
tc class add dev <ifname> parent 1:1 classid 1:30 htb rate 10mbit ceil 1gbit prio 7
tc qdisc add dev <ifname> parent 1:10 cake diffserv4
tc qdisc add dev <ifname> parent 1:20 fq_codel
tc qdisc add dev <ifname> parent 1:30 cake diffserv4
tc filter add dev <ifname> protocol ip parent 1:0 prio 1 u32 match ip src <A>/32 flowid 1:10
tc filter add dev <ifname> protocol ip parent 1:0 prio 2 u32 match ip src <B>/32 flowid 1:20
En LibreQoS, los comandos de colas/clases se generan automáticamente y el tráfico no definido pasa de largo en lugar de enviarse a una clase HTB default.
4) Profundización en fq_codel
4.1 Qué es fq_codel
fq_codel combina:
colas estocásticas por flujo (hash)
planificación de equidad estilo DRR entre colas
AQM CoDel por cola
Referencias principales:
tc-fq_codel(8)RFC 8290 (Flow Queue CoDel)
4.2 Comportamiento del scheduler y ventaja para flujos esporádicos
FQ-CoDel mantiene listas activas de flujos «new» y «old». Las colas recién activadas se priorizan frente a colas persistentemente en backlog, lo que beneficia tráfico interactivo/esporádico.
También utiliza crédito por bytes (quantum), por lo que la equidad es por bytes y no por cantidad de paquetes.
4.3 Modelo de hash de flujos
Por defecto, los paquetes se clasifican con hash de 5-tupla hacia un número configurable de buckets (flows). Colisiones de hash son posibles y forman parte del compromiso de las colas estocásticas.
4.4 Parámetros de fq_codel que realmente se ajustan
Parámetros útiles de tc-fq_codel(8):
limit PACKETS: tope duro de paquetes en cola (por defecto10240)memory_limit BYTES: tope de memoria (por defecto32MB); se aplica el menor entrelimity memoriaflows NUMBER: buckets hash (por defecto1024, se define al crear)target TIME: retardo mínimo persistente aceptable (por defecto5ms)interval TIME: ventana de control CoDel; normalmente del orden del RTT peor en el cuello de botella (por defecto100ms)quantum BYTES: quantum DRR (por defecto1514)ecn/noecn: ECN encendido/apagado (ecnpor defecto en fq_codel)ce_threshold TIME: umbral de marcado ECN bajo para casos tipo DCTCPce_threshold_selector VALUE/MASK: aplica CE threshold solo al tráfico seleccionadodrop_batch: máximo lote de drops cuando se exceden límites (por defecto64)
4.5 Observabilidad fq_codel (tc -s qdisc show)
Campos comunes a revisar:
dropped,overlimits,requeuesdrop_overlimitnew_flow_countecn_marknew_flows_len,old_flows_lenbacklog
Patrón de interpretación:
Verifique que exista presión de cola (
backlog,requeues,overlimits)Verifique si AQM está actuando (
ecn_mark,dropped)Correlacione
new_flows_len/old_flows_lencon mezcla de tráfico (esporádico vs masivo)
5) Profundización en CAKE
5.1 Arquitectura de CAKE
CAKE integra varias capas en un único qdisc:
shaper en modo deficit
cola de prioridad (tins)
aislamiento de flujo (
DRR++)AQM (
COBALT, combina CoDel + BLUE)gestión de paquetes y compensación de overhead
Referencias principales:
tc-cake(8)páginas CAKE y CakeTechnical de Bufferbloat
paper Piece of CAKE (
cake.pdf)
5.2 Operación con shaping vs sin shaping
Cuando se define bandwidth, el shaper de CAKE y su ajuste derivado gobiernan umbrales de tins y comportamiento temporal.
Sin shaping (unlimited), CAKE aún aporta servicio de cola y lógica AQM, pero el servicio de tins ya no opera contra un objetivo fijo de cuello de botella moldeado.
5.3 Modos de aislamiento de flujo
CAKE soporta múltiples modos de equidad:
flowblind(sin aislamiento por flujo)flows(equidad por flujo de 5-tupla)srchost,dsthost,hostsdual-srchost,dual-dsthosttriple-isolate(valor por defecto entc-cake(8))
Nota operativa:
triple-isolatees un valor seguro cuando se requiere control tanto por flujo como por host.
5.4 Conciencia de NAT
nat/nonat controla si CAKE hace lookup de NAT antes de aplicar aislamiento de flujo.
Por qué importa:
Sin
nat, la equidad ve solo direcciones post-NAT.Con
nat, la equidad puede representar mejor hosts internos detrás de NAT (si NAT está en la misma ruta/caja).
5.5 Modos DiffServ y tins
Presets principales de prioridad:
besteffort(un solo tin, sin cola de prioridad)diffserv3diffserv4diffserv8precedence(legado, desaconsejado en despliegues modernos)
tc-cake(8) documenta actualmente diffserv3 como default general, mientras que LibreQoS típicamente usa cake diffserv4 como política por defecto de fábrica para operadores.
5.6 Mapeo DSCP diffserv4 en LibreQoS
LibreQoS usa comúnmente CAKE con diffserv4. Mapeo práctico de clases:
Sensible a latencia:
CS7,CS6,EF,VA,CS5,CS4Streaming multimedia:
AF4x,AF3x,CS3,AF2x,TOS4,CS2,TOS1Best Effort:
CS0,AF1x,TOS2y codepoints no reconocidosTráfico de fondo:
CS1
Codepoints comunes en uso operativo:
CS1(Least Effort)CS0(Best Effort)TOS1(Max Reliability / LLT «Lo»)TOS2(Max Throughput)TOS4(Min Delay)TOS5(LLT «La»)AF1xAF2xAF3xAF4xCS2CS3CS4CS5CS6CS7VAEF
Marco de clases de tráfico estilo RFC 4594 (alto nivel):
Control de red:
CS6,CS7Telefonía:
EF,VASeñalización:
CS5Videoconferencia multimedia:
AF4xInteractivo en tiempo real:
CS4Streaming multimedia:
AF3xVideo broadcast:
CS3Datos de baja latencia:
AF2x,TOS4Operaciones/administración/gestión:
CS2,TOS1Servicio estándar:
CS0y codepoints no reconocidosDatos de alto throughput:
AF1x,TOS2Datos de baja prioridad:
CS1
Nota para fq_codel:
fq_codelno tiene modelo de tins de CAKE ni scheduler de clases DSCP estilo CAKE.El marcado DSCP puede usarse por políticas externas de clasificación, pero no vía comportamiento de tins
diffserv4de CAKE.En LibreQoS, la prioridad DSCP descrita arriba aplica cuando se selecciona CAKE con
diffserv4.
5.7 Compensación de overhead y framing
CAKE puede contabilizar overhead/framing de capa de enlace usando:
overhead Nmpu Natm,ptm,noatmatajos (
ethernet,docsis, etc.)rawyconservative
Regla operativa:
Si overhead/framing está mal, el shaping también estará mal. Valide con pruebas de tráfico realistas.
5.8 Manejo de GSO (split-gso)
Por defecto, CAKE divide superpaquetes GSO para reducir impacto de latencia en flujos competidores, especialmente a tasas bajas.
En velocidades muy altas (ej. >10 Gbps), no-split-gso puede mejorar throughput pico, con posible costo en suavidad de latencia.
5.9 Filtrado ACK
CAKE soporta:
ack-filterack-filter-aggressiveno-ack-filter(por defecto)
El mejor caso de uso es enlace asimétrico donde ACKs en subida limitan el goodput de bajada. Aplíquelo con cautela y valide con tráfico real de aplicaciones, no solo pruebas sintéticas.
5.10 Modo ingress y autorate
ingress cambia contabilidad y ajuste para realidades de shaping en bajada (incluye contar paquetes descartados como datos ya transitados).
autorate-ingress puede estimar capacidad desde el tráfico entrante y es útil principalmente en enlaces muy variables (por ejemplo algunos enlaces celulares). No puede estimar cuellos de botella que estén aguas abajo del punto donde se adjunta CAKE.
5.11 Observabilidad CAKE (tc -s qdisc show)
Campos útiles frecuentes:
nivel superior:
dropped,overlimits,backlog,memory used,capacity estimatepor tin:
thresh,target,intervaltelemetría de delay:
pk_delay,av_delay,sp_delayhashing:
way_inds,way_miss,way_colsseñalización:
drops,marksfiltrado ACK:
ack_dropactividad de cola:
sp_flows,bk_flows,un_flows,max_len,quantum
Patrón de interpretación:
confirme que tins y umbrales coinciden con la política esperada
inspeccione EWMAs de delay por tin
correlacione
drops/markscon latencia y throughput observadosmonitoree indicadores de colisión hash (
way_cols) bajo concurrencia alta
6) Marco de Política en LibreQoS: CAKE vs fq_codel
Para operadores LibreQoS, parta del comportamiento de plataforma:
La operación por defecto es
cake diffserv4en hojas de clase HTB.TreeGuard (función próxima) puede mover direcciones seleccionadas de circuito a
fq_codeldurante baja carga sostenida y volver acakecuando sube utilización o presión de guardrails.Los overrides manuales por circuito con
sqmsiguen dando control explícito al operador.
Use esta matriz para contexto de tradeoffs:
Dimensión |
|
|
|---|---|---|
Complejidad de configuración |
Menor |
Mayor (más funciones integradas) |
Huella de recursos a escala |
Usualmente menor |
Usualmente mayor |
Funciones de shaping integradas |
No (requiere shaper padre como HTB) |
Sí (shaper deficit-mode integrado) |
Comportamiento DiffServ/tins |
Básico/indirecto |
Modelo de tins nativo robusto |
Modos de aislamiento de host |
No estilo CAKE |
Modos ricos de aislamiento host/flujo |
Compensación de overhead |
Limitada |
Controles ricos de framing/overhead |
Optimización ACK en enlaces asimétricos |
No |
Sí (modos de ACK filtering) |
Mejor encaje |
Muchas colas con recursos ajustados |
Tráfico mixto con prioridad en riqueza de política y suavidad |
7) Notas Operativas de LibreQoS
Desde pruebas de mantenedor y feedback de despliegue:
fq_codelno tiene rate limiting intrínseco; depende de HTB para política de tasa.fq_codelyCAKEmantienen tablas de estado por flujo, por lo que RAM/hash importan a gran escala.CAKEy HTB son viables incluso en enlaces de tasa muy baja y asimétricos.Un patrón de limitador tipo «sandwich» con HTB+fq_codel puede ser práctico en algunos entornos.
Algunas vistas de tráfico de dashboard reflejan contexto pre-drop; interprete contadores junto con semántica de drop/mark.
La frase «solo la saturación dura se beneficia de AQM» es demasiado estrecha; AQM y fair queueing pueden mejorar latencia bajo presión de cola (bursts/contención), incluso antes de que la interfaz esté al 100%.
Patrones históricos de cubeta compartida/default refuerzan que la dinámica de colas, y no solo «enlace completamente pegado», impulsa el valor de AQM; en LibreQoS actual, tráfico no definido es pass-through, así que aplique este principio a hojas HTB gestionadas.
8) Flujo Práctico de Observabilidad
Comience con:
tc -s qdisc show dev <ifname>
tc -s class show dev <ifname>
Luego:
confirme que existan clases HTB donde espera
confirme tipo de qdisc hoja (
cakevsfq_codel) por claseinspeccione contadores de clase y qdisc en conjunto
verifique que la dirección (
ingress/egress) corresponda al problemacorrelacione con latencia/throughput visibles al usuario, no solo con contadores
9) Malentendidos Comunes
«
fq_codeloCAKEreemplaza HTB»Falso para la jerarquía de LibreQoS; HTB sigue siendo la envolvente de política.
«El tráfico no definido va a una cola HTB default en LibreQoS»
Falso; LibreQoS deja pasar el tráfico no definido.
«Solo eventos de saturación dura se benefician de AQM»
«Ajustar qdisc hoja arregla jerarquía/mapeo roto»
Falso; primero hay que corregir errores de mapeo/jerarquía.
«
fq_codelpuede limitar velocidad por sí solo»Falso; use HTB (u otro shaper) para política explícita de tasa.
10) Contexto HTB HOWTO (Histórico, Aún Útil)
Material clásico del HTB HOWTO sigue siendo útil como modelo mental, traducido al LibreQoS moderno:
clasificar tráfico
programar servicio de colas
moldear en el cuello de botella (o justo aguas arriba)
definir intención explícita de clase con
rate/ceil
Notas de traducción moderna:
confirme comportamiento con contadores
tc -s, no con suposiciones de defaultsmantenga orden de clasificadores de forma intencional (reglas específicas antes de amplias)
incluya manejo catch-all explícito en despliegues manuales
tcen LibreQoS específicamente, tráfico no definido es pass-through salvo mapeo explícito a jerarquía moldeada