Al principio, la red podía usar una configuración con puertos 1/10G; este tipo de conexión del lado del suscriptor a menudo se mantiene hasta hoy. Con el tiempo, la carga y los volúmenes de tráfico fueron aumentando, y en los nuevos segmentos de la red comenzaron a aparecer interfaces de 25/40G. Al mismo tiempo, el tráfico hacia el backbone se agrega y se transmite a través de varios puertos de 100G. Como resultado, en la infraestructura del operador puede haber equipos de distintas generaciones funcionando al mismo tiempo, con interfaces de diferente capacidad.
La plataforma Stingray tiene en cuenta esta heterogeneidad y cubre todos los escenarios de instalación principales (in-line, on-stick, mirror), en los que interfaces de distinta capacidad pueden operar simultáneamente. Para ello, la plataforma cuenta con un conjunto de «motores»: configuraciones de interfaces dpdk (puertos de datos), cada una de las cuales describe su propia combinación de modos de funcionamiento. La configuración dpdk_engine=7 es la encargada de brindar soporte simultáneo a interfaces de distintos tipos dentro de una misma plataforma.
Por qué los motores estándar dejan de ser suficientes
Todos los motores anteriores (dpdk_engine=0..6) usan un único esquema de distribución de dispatchers para todo el clúster:
- dpdk_engine=0 — un dispatcher para todo el clúster;
- dpdk_engine=1 — un dispatcher por dirección (in/out);
- dpdk_engine=2 — dispatchers RSS por dirección;
- dpdk_engine=3 — un dispatcher por cada bridge;
- dpdk_engine=4 — un dispatcher por cada puerto;
- dpdk_engine=6 — dispatchers RSS por bridge, para tarjetas de alto rendimiento de 100G+.
Encontrará más detalles sobre cada modo en la documentación de Stingray.
Este modelo funciona mientras los puertos tengan la misma capacidad. Pero en la red de un operador es más frecuente encontrarse con la siguiente situación: muchos puertos de 10G del lado de los suscriptores y uno o dos puertos de 100G del lado del uplink. Esto es típico, por ejemplo, de una conexión BNG, donde la capacidad de la LAN y la WAN difiere considerablemente. También existen configuraciones más complejas, en las que se usan simultáneamente puertos de 100G, 40G y 10G con distintos esquemas de distribución de dispatchers.
En estas situaciones, un esquema común ya no siempre resulta óptimo. Para algunos puertos puede haber más recursos de los que se necesitan, mientras que para otros los recursos pueden ser insuficientes para procesar la carga de manera eficiente.
Cómo distribuir los dispatchers de forma independiente con dpdk_engine=7
dpdk_engine=7, o el motor con configuración explícita de dispatchers, permite definir manualmente qué puertos atiende cada dispatcher y qué recursos se le asignan. A diferencia de los modos anteriores, en los que se elegía un único esquema fijo de distribución para todo el sistema, este nuevo motor permite configurar el procesamiento de cada grupo de puertos de forma independiente.
Para cada dispatcher se puede definir por separado:
- la lista de puertos que atiende;
- el mempool — el pool de memoria para los paquetes, con un tamaño determinado;
- si es necesario — RSS con la cantidad de colas requerida.
A diferencia de los modos anteriores, aquí no es necesario elegir un único esquema de distribución para todo el clúster. Los puertos se pueden dividir en grupos y para cada uno se puede definir su propia configuración de procesamiento.
Al mismo tiempo, dpdk_engine=7 es universal: a través de él se puede implementar cualquier esquema de distribución disponible en dpdk_engine=0..6.
Por ejemplo, «un dispatcher por dirección» (equivalente a dpdk_engine=1) se escribe así:
in_dev=port1:port2 out_dev=port3:port4 dpdk_dispatch=port1,port2;mempool=main dpdk_dispatch=port3,port4;mempool=main dpdk_mempool=name=main;size=1600000
También se puede configurar un esquema mixto, en el que parte de los puertos funciona mediante un dispatcher normal y otra parte mediante RSS:
in_dev=port1:port2
out_dev=port3:port4
dpdk_dispatch=port1:port2;mempool=main10G
dpdk_dispatch=port3:port4;rss=16;mempool=main100G
dpdk_mempool=name=main10G;size=1600000
dpdk_mempool=name=main100G;size=8000000
Aquí, el grupo de 10G es atendido por un único dispatcher con el mempool main10G, mientras que los puertos de 100G son atendidos por un dispatcher con RSS (16 colas) y un mempool main100G aparte, de mayor tamaño. Los parámetros de procesamiento se pueden ajustar por separado para grupos de puertos con distinto rendimiento.
Figura 1 — Arquitectura de distribución de dpdk_engine=7
En cuanto a las limitaciones: la configuración se considerará incorrecta si un puerto no queda incluido en ningún dpdk_dispatch o queda incluido en varios a la vez. Un puerto debe pertenecer a un único dpdk_dispatch, y todos los puertos dentro de un mismo dispatcher deben pertenecer al mismo clúster.
Cómo son las configuraciones mixtas de los grandes operadores
Un operador necesitó este esquema tras modernizar sus enlaces ascendentes (uplinks). En el nivel superior de la red aparecieron interfaces de alta velocidad, mientras que en el nivel inferior se mantuvieron las conexiones de 10G. Modernizar por completo estas interfaces no resultaba conveniente: reemplazar el equipamiento y los puertos habría requerido recursos considerables.
Al mismo tiempo, el tráfico de distintas fuentes convergía en un mismo servidor. Distribuir su procesamiento entre servidores independientes habría implicado utilizar equipamiento adicional y un uso poco eficiente de los recursos de cómputo.
Figura 2 — Esquema de la red del operador
Antes, Stingray permitía armar bridges únicamente con interfaces de la misma capacidad. Para la configuración mixta se necesitaba la posibilidad de configurar de forma independiente el procesamiento de los distintos grupos de puertos.
dpdk_engine=7 permite definir para cada grupo su propia cantidad y tipo de dispatchers. Esto permite tener en cuenta la diferencia de capacidad entre interfaces y no distribuir los mismos recursos entre puertos con cargas distintas.
Como resultado, no fue necesario rediseñar el sistema en torno a una única velocidad de interfaz ni trasladar el procesamiento de determinados grupos a servidores adicionales. En definitiva, se logró adaptar el procesamiento a la configuración de red ya existente y aprovechar de manera más eficiente los recursos de hardware disponibles.
Qué ofrece dpdk_engine=7
dpdk_engine=7 elimina una limitación de los motores anteriores: la imposibilidad de aplicar distintas estrategias de distribución a diferentes partes de un mismo clúster. Esto es especialmente importante en instalaciones de gran escala con un conjunto heterogéneo de tarjetas, donde ajustar con precisión la cantidad de dispatchers y la memoria para un grupo de puertos específico influye directamente en el rendimiento y en el ahorro de núcleos.
Si al migrar a dpdk_engine=7 surgen dudas sobre la cantidad de dispatchers, el tamaño del mempool u otros parámetros, comuníquese con el soporte técnico de VAS Expert. Nuestros especialistas lo ayudarán a definir la configuración adecuada según su esquema de conexión y la carga de sus interfaces.