TreeGuard
TreeGuard es una función actual de LibreQoS v2.0 para gestión inteligente de nodos.
Estado importante:
TreeGuard está habilitado por defecto en LibreQoS v2.0.
TreeGuard puede gestionar tanto la virtualización de nodos elegibles como la política SQM por circuito.
Los operadores pueden ajustar o deshabilitar TreeGuard en
/etc/lqos.confo en la página TreeGuard de la WebUI.
Qué Hace TreeGuard
TreeGuard tiene dos dominios de control:
Gestión de virtualización de enlaces/nodos (para nodos seleccionados).
Conmutación de SQM por circuito entre
cakeyfq_codel.
Para circuitos, TreeGuard puede tomar decisiones por dirección (descarga y subida de forma independiente).
Comportamiento por Defecto en LibreQoS v2.0
En LibreQoS v2.0, TreeGuard está habilitado por defecto.
Por defecto, TreeGuard puede virtualizar nodos enrolados y puede cambiar direcciones de circuitos enrolados entre cake diffserv4 y fq_codel según los guardrails configurados.
Si prefiere un comportamiento fijo/manual, deshabilite TreeGuard o reduzca sus listas de enrolamiento.
Modelo de Conmutación SQM por Circuito
TreeGuard evalúa utilización, frescura de RTT, guardrails de CPU y guardrails opcionales de QoO.
Comportamiento de alto nivel:
Bajo condiciones sostenidas de baja carga, TreeGuard puede cambiar una dirección de
cakeafq_codel.Si sube la utilización, los guardrails de QoO no son seguros o se cumplen condiciones de reversión, TreeGuard vuelve hacia la política SQM base del circuito.
Las decisiones pueden ser independientes por dirección cuando
independent_directions = true.
Esto crea un perfil dinámico en el que direcciones cargadas favorecen cake diffserv4, mientras direcciones de baja carga pueden usar fq_codel cuando las condiciones son seguras.
La política SQM base proviene de la intención del operador, no de defaults internos de TreeGuard. En la práctica, TreeGuard parte de la política efectiva configurada para cada circuito y solo persiste su propio overlay temporal cuando necesita diferir de esa base.
Regla importante de política base:
Si la política SQM base de una dirección es
cake, TreeGuard puede cambiar temporalmente esa dirección afq_codely luego volver a la base.Si la política SQM base de una dirección es
fq_codel, TreeGuard no conmuta esa dirección de circuito haciacake.La virtualización de enlaces sigue disponible independientemente de la política SQM base del circuito.
Configuración (/etc/lqos.conf)
La configuración de TreeGuard vive bajo [treeguard] y sus sub-secciones:
[treeguard]: habilitar/deshabilitar, dry-run, cadencia de ticks.[treeguard.cpu]: modo basado en CPU vs tráfico/RTT y umbrales.[treeguard.links]: enrolamiento de virtualización de nodos y guardrails.[treeguard.circuits]: enrolamiento de circuitos y guardrails de conmutación SQM.[treeguard.qoo]: umbral opcional de protección QoO.
Comportamiento por defecto actual:
[treeguard]
enabled = true
dry_run = false
tick_seconds = 1
[treeguard.cpu]
mode = "cpu_aware"
cpu_high_pct = 75
cpu_low_pct = 55
[treeguard.links]
enabled = true
all_nodes = true
top_level_auto_virtualize = true
[treeguard.circuits]
enabled = true
all_circuits = true
switching_enabled = true
independent_directions = true
[treeguard.qoo]
enabled = true
La virtualización de nodos en TreeGuard está pensada para ser basada en CPU por defecto. El
tráfico, RTT y QoO siguen siendo señales importantes de seguridad y restauración, pero la nueva
virtualización automática debe ocurrir cuando la presión de CPU indica que el ahorro de HTB vale
la pena. Las instalaciones actualizadas desde defaults antiguos se migran silenciosamente de
traffic_rtt_only a cpu_aware, con un aviso visible en logs/UI.
Patrón de Despliegue Seguro
Revise la configuración de TreeGuard temprano en el despliegue en lugar de asumir comportamiento de colas fijo/manual.
Si desea un rollout más acotado, deshabilite
all_nodesy/oall_circuitsy utilice allowlists primero.Valide el comportamiento en varias ventanas pico y valle.
Si quiere validar solo en modo observación, establezca
dry_run = truetemporalmente.Si necesita comportamiento fijo/manual, establezca
enabled = false.
Overrides y Notas Operativas
Cuando está habilitado y no está en dry-run, TreeGuard puede persistir decisiones SQM de circuitos en:
lqos_overrides.treeguard.json
TreeGuard está diseñado para no pelear con overrides del operador. Si existen overrides del operador para entidades enroladas, TreeGuard omite esas entidades y reporta advertencias.
Las decisiones de virtualización de nodos de TreeGuard son operaciones de Bakery solo en tiempo de
ejecución. El scheduler no las materializa de vuelta en el network.json base, y tampoco se
persisten como entradas TreeGuard set_node_virtual dentro de la entrada efectiva de shaping. En
v1 son efímeras: un reinicio del daemon devuelve el árbol físico a la topología base definida por
el operador hasta que TreeGuard vuelva a decidir.
Para verificación y depuración local en tiempo de ejecución, liblqos_python ahora expone tanto
el estado actual de la operación del nodo TreeGuard como un snapshot del estado de ramas en tiempo
de ejecución de Bakery. Ese snapshot de ramas es la vista autoritativa del plano de control sobre
qué rama retenida está activa para un nodo, y es más confiable que inferir cambios de parentaje
solo desde la salida de tc en casos no top-level.
El flujo local de confianza también usa ahora un fixture sintético de Bakery TreeGuard más grande
para pruebas de escala: 8 nodos top-level, 3 niveles de profundidad y 1.000 circuitos conectados
solo en el nivel más bajo. Cuando la verificación con tráfico está habilitada, el runtime verifier
ahora usa por defecto 10 circuitos rastreados por cada caso exitoso en lugar del smoke test menor
anterior.
Las decisiones SQM por circuito de TreeGuard también son overrides de tiempo de ejecución. El scheduler no materializa los cambios SQM propiedad de TreeGuard de vuelta en el ShapedDevices.csv base, por lo que limpiar TreeGuard no reescribe permanentemente la política SQM definida por el operador.
TreeGuard solo gestiona circuitos estáticos de ShapedDevices.csv. Los circuitos dinámicos, incluidos los overlays de promoción de IPs desconocidas, permanecen bajo el ciclo de vida de circuitos dinámicos y overlays de Bakery, y no se enrolan en la conmutación SQM de TreeGuard.
TreeGuard también se niega a gestionar nodos que ya estén marcados con "virtual": true en el network.json base. Si existen overrides legados de TreeGuard para esos nodos, TreeGuard limpia ese estado legado y vuelve a respetar la definición base de la topología.
Para la gestión SQM por circuito, TreeGuard trata los valores duplicados de device_id como colisiones de identidad inseguras. Si el mismo device_id aparece en más de un circuito dentro de ShapedDevices.csv, TreeGuard omite esos circuitos afectados y limpia cualquier override SQM de TreeGuard asociado a esos device_id duplicados.
Si la telemetría RTT no está disponible temporalmente después de un reinicio, TreeGuard no trata la ausencia de RTT por sí sola como evidencia para revertir direcciones en fq_codel. Siguen aplicando otros guardrails como utilización, QoO y presión de CPU.
TreeGuard también aplica un presupuesto global conservador de cambios SQM por tick. En poblaciones muy grandes de circuitos enrolados, los cambios SQM excedentes se difieren a ticks posteriores en lugar de saturar Bakery en una sola pasada.
Para escalar mejor, TreeGuard ya no reconstruye la membresía de circuitos desde ShapedDevices.csv en cada tick de circuitos. Ahora mantiene un inventario por circuito en caché derivado de ShapedDevices.csv, lee la telemetría viva por circuito desde el snapshot compartido de rollup por circuito actualizado una vez por segundo, y reparte las evaluaciones SQM grandes con all_circuits = true a lo largo de múltiples ticks en lugar de reescanear todos los circuitos enrolados cada segundo.
En la práctica esto significa:
La virtualización de enlaces sigue la cadencia normal de ticks de TreeGuard.
La evaluación SQM de circuitos para enrolamientos pequeños sigue completándose rápidamente.
Los enrolamientos muy grandes con
all_circuitsse recorren de forma incremental a lo largo de varios ticks, con un objetivo de barrido completo de alrededor de 15 segundos en vez de intentar un escaneo completo por segundo.La virtualización de nodos de TreeGuard ahora usa rutas vivas de planificación/aplicación en Bakery en lugar de forzar una recarga completa de LibreQoS o de Bakery.
La virtualización runtime soportada de nodos top-level ahora usa un plan de rebalanceo/migración en Bakery que puede promover sitios hijos y circuitos directos entre raíces de cola, preservando la jerarquía lógica para reportes.
La actividad reciente de TreeGuard está disponible en dos lugares:
Las vistas de estado/actividad de TreeGuard en la WebUI.
El journal de
lqosd, donde TreeGuard ahora registra cada evento de actividad para que recargas, limpieza de overrides, cambios de SQM y fallos se puedan diagnosticar sin inspeccionar websockets.