CoDel ( Controlled Delay ; pronunciado " coddle ") es un algoritmo de gestión activa de colas (AQM) en enrutamiento de red , desarrollado por Van Jacobson y Kathleen Nichols y publicado como RFC8289. [ 1 ] Está diseñado para superar la saturación de búferes en el hardware de red , como los enrutadores , estableciendo límites al retardo que experimentan los paquetes de red al pasar por los búferes en este equipo. CoDel busca mejorar el rendimiento general del algoritmo de detección temprana aleatoria (RED) abordando algunos de sus conceptos erróneos fundamentales, según Jacobson, y siendo más fácil de gestionar.
En 2012, Dave Täht y Eric Dumazet desarrollaron una implementación de CoDel para el kernel de Linux , con doble licencia: la Licencia Pública General de GNU y la licencia BSD de 3 cláusulas . La mejora de Dumazet sobre CoDel se denomina FQ-CoDel , acrónimo de "Fair/Flow Queue CoDel" (CoDel de Cola Justa/Flujo). Fue adoptada por primera vez como solución estándar de AQM y programación de paquetes en 2014, en la versión OpenWrt 14.07 denominada "Barrier Breaker". A partir de ahí, CoDel y FQ-CoDel se han integrado en diversos proyectos derivados, como Tomato , dd-wrt , OPNsense y la función "Smart Queues" de Ubiquiti .
Teoría
CoDel se basa en observaciones del comportamiento de los paquetes en redes de conmutación de paquetes bajo la influencia de búferes de datos . Algunas de estas observaciones se refieren a la naturaleza fundamental de las colas y las causas de la saturación de búferes , mientras que otras se relacionan con las debilidades de los algoritmos alternativos de gestión de colas. CoDel se desarrolló como un intento de abordar el problema de la saturación de búferes. [ 2 ]
Bufferbloat
El flujo de paquetes se ralentiza al viajar a través de un enlace de red entre una red rápida y una lenta, especialmente al inicio de una sesión TCP , cuando se produce una ráfaga repentina de paquetes y la red más lenta puede no ser capaz de aceptarla con la suficiente rapidez. Los búferes existen para mitigar este problema, proporcionando a la red rápida un lugar donde almacenar paquetes para que la red más lenta los lea a su propio ritmo. [ 3 ] En otras palabras, los búferes actúan como amortiguadores para convertir las llegadas repentinas en salidas suaves y constantes. Sin embargo, un búfer tiene una capacidad limitada. El búfer ideal tiene el tamaño adecuado para gestionar una ráfaga repentina de comunicación y ajustar la velocidad de dicha ráfaga a la velocidad de la red más lenta. Idealmente, la situación de absorción de impactos se caracteriza por un retardo temporal para los paquetes en el búfer durante la ráfaga de transmisión, tras el cual el retardo desaparece rápidamente y la red alcanza un equilibrio entre la oferta y el procesamiento de paquetes. [ 3 ]
El algoritmo de control de congestión TCP se basa en la pérdida de paquetes para determinar el ancho de banda disponible entre dos dispositivos que se comunican. Acelera la transferencia de datos hasta que comienzan a perderse paquetes y luego reduce la velocidad de transmisión. Idealmente, continúa acelerando y desacelerando hasta encontrar el equilibrio en la velocidad del enlace. Para que esto funcione, la pérdida de paquetes debe ocurrir de manera oportuna para que el algoritmo pueda seleccionar de forma reactiva una velocidad de transferencia adecuada. Con paquetes almacenados en un búfer demasiado grande, los paquetes llegarán a su destino, pero con una latencia mayor , aunque no se perderán paquetes, por lo que TCP no se ralentiza. En estas condiciones, TCP incluso puede decidir que la ruta de la conexión ha cambiado y repetir la búsqueda de un nuevo equilibrio. [ 4 ] [ 5 ]
Un búfer grande y constantemente lleno, que provoca mayores retrasos en la transmisión y una menor interactividad, especialmente al tratarse de dos o más transmisiones simultáneas por el mismo canal, se denomina saturación del búfer. El ancho de banda disponible del canal también puede quedar sin utilizar, ya que algunos destinos rápidos podrían no ser alcanzados debido a que los búferes se saturan con datos que esperan ser entregados a destinos más lentos.
Colas buenas y malas
CoDel distingue entre dos tipos de cola: [ 3 ] [ 6 ] Una buena cola es aquella que no presenta saturación de búfer. Las ráfagas de comunicación no causan más que un aumento temporal en el retardo de la cola. La utilización del enlace de red se maximiza. Una mala cola presenta saturación de búfer. Las ráfagas de comunicación hacen que el búfer se llene y permanezca lleno, lo que resulta en una baja utilización y un retardo de búfer constantemente alto. Para ser eficaz contra la saturación de búfer, una solución en forma de un algoritmo de gestión activa de colas (AQM) debe ser capaz de reconocer una ocurrencia de saturación de búfer y reaccionar implementando contramedidas eficaces.
Van Jacobson afirmó en 2006 que los algoritmos existentes han estado utilizando métodos incorrectos para reconocer el bufferbloat. [ 5 ] Algoritmos como RED miden la longitud promedio de la cola y consideran un caso de bufferbloat si el promedio crece demasiado. Jacobson demostró en 2006 que esta medición no es una buena métrica, ya que la longitud promedio de la cola aumenta bruscamente en el caso de una ráfaga de comunicaciones. La cola puede entonces disiparse rápidamente (cola buena) o convertirse en una cola estática (cola mala). Otros factores en el tráfico de red también pueden causar falsos positivos o negativos, lo que provoca que se implementen contramedidas innecesariamente. Jacobson sugirió que la longitud promedio de la cola en realidad no contiene ninguna información sobre la demanda de paquetes o la carga de la red. [ 3 ] [ 5 ] Sugirió que una mejor métrica podría ser la longitud mínima de la cola durante una ventana de tiempo deslizante. [ 3 ]
Algoritmo
Basándose en la idea de Jacobson de 2006, CoDel se desarrolló para gestionar colas controlando el retardo mínimo experimentado por los paquetes en la ventana del búfer en ejecución. El objetivo es mantener este retardo mínimo por debajo de 5 milisegundos. Si el retardo mínimo aumenta a un valor demasiado alto, los paquetes se descartan de la cola hasta que el retardo cae por debajo del nivel máximo. [ 3 ] Nichols y Jacobson citan varias ventajas de utilizar únicamente esta métrica: [ 3 ]
- CoDel no tiene parámetros. Una de las debilidades del algoritmo RED (según Jacobson) es que resulta demasiado difícil de configurar, especialmente en un entorno con velocidades de enlace dinámicas.
- CoDel trata de forma diferente las colas buenas y las colas malas. Una cola buena tiene, por naturaleza, baja latencia, por lo que el algoritmo de gestión puede ignorarla, mientras que una cola mala está sujeta a la intervención del sistema de gestión, que consiste en descartar paquetes.
- CoDel funciona a partir de un parámetro que se determina completamente de forma local; es independiente de los retrasos de ida y vuelta, las velocidades de enlace, las cargas de tráfico y otros factores que no pueden ser controlados o predichos por el búfer local.
- El retardo mínimo local solo se puede determinar cuando un paquete sale del búfer, por lo que no se necesita ningún retardo adicional para ejecutar la cola y recopilar estadísticas para administrarla.
- CoDel se adapta a las tasas de enlace que cambian dinámicamente sin ningún impacto negativo en la utilización.
- La implementación de CoDel es relativamente sencilla y, por lo tanto, puede abarcar todo el espectro, desde routers domésticos de gama baja hasta soluciones de enrutamiento de gama alta.
CoDel no gestiona el búfer si el retardo mínimo para la ventana del búfer es inferior al valor máximo permitido. Tampoco gestiona el búfer si está relativamente vacío (si contiene menos bytes equivalentes a una MTU ). [ 3 ] Si estas condiciones no se cumplen, CoDel descarta los paquetes de forma probabilística. [ 3 ]
El algoritmo se calcula de forma independiente en cada salto de red . El algoritmo opera durante un intervalo , inicialmente de 100 milisegundos. Se monitoriza el retardo de cola por paquete a través del salto. A medida que se extrae cada paquete de la cola para su reenvío , se calcula el retardo de cola (el tiempo que el paquete permaneció en espera). Se almacena el retardo de cola más bajo del intervalo. Cuando se extrae el último paquete del intervalo, si el retardo de cola más bajo del intervalo es mayor que 5 milisegundos, este paquete se descarta y se acorta el intervalo utilizado para el siguiente grupo de paquetes. Si el retardo de cola más bajo del intervalo es menor que 5 milisegundos, el paquete se reenvía y el intervalo se restablece a 100 milisegundos.
Cuando se acorta el intervalo, se hace de acuerdo con la raíz cuadrada inversa del número de intervalos sucesivos en los que se perdieron paquetes debido a un retraso excesivo en la cola. La secuencia de intervalos es,,,,...
Resultados de la simulación
CoDel ha sido probado en simulaciones por Nichols y Jacobson, con diferentes MTU y velocidades de enlace y otras variaciones de condiciones. En general, los resultados indican: [ 3 ] [ 7 ]
- En comparación con RED, CoDel mantiene el retardo de los paquetes más cerca del valor objetivo en todo el rango de anchos de banda (de 3 a 100 Mbit/s). La utilización del enlace medida se mantiene consistentemente cerca del 100 % del ancho de banda del enlace.
- Con una MTU más baja, los retrasos de los paquetes son menores que con una MTU más alta. Una MTU más alta resulta en una buena utilización del enlace, mientras que una MTU más baja resulta en una buena utilización del enlace con un ancho de banda bajo, degradándose a una utilización aceptable con un ancho de banda alto.
Greg White y Joey Padden de CableLabs también realizaron simulaciones . [ 8 ]
Implementación
Una implementación completa de CoDel se realizó en mayo de 2012 y se puso a disposición como software de código abierto . [ 3 ] Se implementó dentro del kernel de Linux (a partir de la línea principal 3.5). [ 9 ] Dave Täht realizó una retroportación de CoDel al kernel de Linux 3.3 para el proyecto CeroWrt , que se ocupa, entre otras cosas, de bufferbloat, [ 10 ] donde se probó exhaustivamente. CoDel comenzó a aparecer como una opción en algunas plataformas de gestión de ancho de banda propietarias/llave en mano en 2013. [ 11 ] FreeBSD tenía CoDel integrado en las ramas de código 11.x [ 12 ] y 10.x [ 13 ] en 2016. [ 14 ] Una implementación se distribuye con OpenBSD desde la versión 6.2. [ 15 ]
Algoritmos derivados
Fair/Flow Queue CoDel (FQ-CoDel; fq_codel en el código Linux) añade colas de flujo a CoDel para que diferencie entre múltiples conexiones simultáneas y funcione de manera equitativa. Da prioridad al primer paquete de cada flujo, de modo que los flujos pequeños puedan comenzar y terminar rápidamente para un mejor uso de los recursos de la red. El coautor de CoDel, Van Jacobson, recomienda el uso de fq_codel en lugar de codel cuando esté disponible. [ 16 ] FQ-CoDel se publica como RFC8290. Fue escrito por T. Hoeiland-Joergensen, P. McKenney, D. Täht, J. Gettys y E. Dumazet, todos miembros del "proyecto bufferbloat". [ 17 ]
Common Applications Kept Enhanced (CAKE; sch_cake en el código Linux) es un algoritmo combinado de modelado de tráfico y AQM presentado por el proyecto bufferbloat en 2018. Se basa en la experiencia de usar fq_codel con el modelador de tráfico HTB (Hierarchy Token Bucket) . Mejora la implementación de Linux htb+fq_codel al reducir las colisiones de hash entre flujos, disminuir la utilización de la CPU en el modelado de tráfico y en otros aspectos. [ 18 ]
En 2022, Dave Täht revisó el estado de las implementaciones de fq_codel y sch_cake en la práctica. Descubrió que, si bien muchos sistemas habían adoptado alguna de ellas como AQM predeterminado, varias implementaciones presentaban desviaciones dudosas del estándar. Por ejemplo, la implementación de fq_codel de Apple (predeterminada en iOS) cuenta con un gran número de usuarios, pero carece del componente "codel". Täht también señala la falta general de descarga de hardware, un problema que se agudizó debido al aumento del tráfico de red provocado por la pandemia de COVID-19 . [ 19 ]
Véase también
Referencias
- ↑ Nichols, K. ; Jacobson, V. ; McGregor, A.; Iyengar, J. (enero de 2018). Controlled Delay Active Queue Management . IETF . doi : 10.17487/RFC8289 . RFC 8289 .
- ↑ Joe Brockmeier (8 de mayo de 2012). "Buenas noticias para resolver el problema de la saturación del búfer: CoDel ofrece una solución sin complicaciones" . ReadWriteWeb . Archivado del original el 12 de julio de 2012. Consultado el 16 de agosto de 2012 .
- 1 2 3 4 5 6 7 8 9 10 11 Nichols, Kathleen ; Jacobson, Van (6 de mayo de 2012). "Controlando el retraso de la cola" . ACM Queue . 55 (7). ACM Publishing: 42–50 . doi : 10.1145/2209249.2209264 . S2CID 381738. Recuperado el 12 de agosto de 2012 .
- ↑ Jacobson, Van; Karels, MJ (1988). "Evitación y control de la congestión" (PDF) . ACM SIGCOMM Computer Communication Review . 18 (4): 314– 329. doi : 10.1145/52325.52356 . Archivado del original (PDF) el 22 de junio de 2004.
- 1 2 3 Jacobson, Van (2006). "Una diatriba sobre las colas. Una charla presentada en MIT Lincoln Labs, Lexington, MA" (PDF) . Recuperado el 12 de agosto de 2012 .
- ↑ Iljitsch van Beijnum (10 de mayo de 2012). "La gestión del buffer CoDel podría resolver los atascos de buffer de Internet" . Ars Técnica . Consultado el 16 de agosto de 2012 .
- ↑ Nichols, Kathleen (julio de 2012). "Controlled Delay (CoDel) Active Queue Management" . Pollere Inc. Archivado del original el 22 de agosto de 2012. Recuperado el 12 de agosto de 2012 .
- ↑ Greg White; Joey Padden (noviembre de 2012). "Estudio preliminar de Codel AQM en una red Docsis" (PDF) . cablelabs.com . Consultado el 14 de junio de 2015 .
- ↑ Gettys, Jim (22 de mayo de 2012). "¡Un hito alcanzado: CoDel está en Linux!" . Divagaciones de jg . Consultado el 12 de agosto de 2012 .
- ↑ "Cerowrt - Descripción general" . Bufferbloat . Consultado el 24 de enero de 2014 .
- ↑ "Registro de cambios de Procera Packetlogic" . proceranetworks.com . Consultado el 24 de julio de 2013 .
{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ↑ truckman (26-05-2016). "Importar Dummynet AQM versión 0.2.1 (CoDel, FQ-CoDel, PIE y FQ-PIE)" .
- ↑ truckman (10-06-2016). "MFC Import Dummynet AQM versión 0.2.1 (CoDel, FQ-CoDel, PIE y FQ-PIE)" .
- ↑ Al Saadi, Rasool; Armitage, Grenville. "Implementación de AQM en FreeBSD" .
- ↑ "OpenBSD 6.2" . Consultado el 13 de octubre de 2017 .
- ↑ "Comparativa de rendimiento de Codel y FQ Codel - Bufferbloat.net" . www.bufferbloat.net .
- ↑ T. Høiland-Jørgensen; P. McKenney; J. Gettys; E. Dumazet (enero de 2018). El planificador de paquetes Flow Queue CoDel y el algoritmo de gestión activa de colas . Grupo de trabajo de ingeniería de Internet . doi : 10.17487/RFC8290 . ISSN 2070-1721 . RFC 8290 . Experimental.
- ↑ "Pastel - Bufferbloat.net" . www.bufferbloat.net .
- ↑ Dave Täht (23 de abril de 2022). "El estado de fq_codel y sch_cake en todo el mundo" . CeroWRT .
Enlaces externos
- pseudocódigo de CoDel
- Progreso fundamental en la solución del problema de la sobrecarga de búfer
- Paquetes (tecnología de la información)
- Rendimiento de la red
- Algoritmos de planificación de red