No início, a rede podia usar uma configuração com portas 1/10G — esse tipo de conexão do lado do assinante muitas vezes ainda é usado até hoje. Com o tempo, a carga e os volumes de tráfego aumentaram, e interfaces de 25/40G passaram a surgir em novos trechos da rede. Ao mesmo tempo, o tráfego em direção ao backbone é agregado e transmitido por meio de várias portas de 100G. Como resultado, equipamentos de gerações diferentes, com capacidades de interface variadas, podem operar simultaneamente na infraestrutura do operador.
A plataforma Stingray leva em conta essa heterogeneidade e cobre todos os principais cenários de instalação (in-line, on-stick, mirror), nos quais interfaces com capacidades diferentes podem operar simultaneamente. Para isso, a plataforma conta com um conjunto de “engines” (mecanismos) — configurações de interfaces dpdk (portas de dados), cada uma descrevendo sua própria combinação de modos de operação. A configuração dpdk_engine=7 é responsável pelo suporte simultâneo a interfaces de tipos diferentes dentro de uma mesma plataforma.
Por que os engines padrão deixam de ser suficientes
Todos os engines anteriores (dpdk_engine=0..6) usam um único esquema de distribuição de dispatchers para todo o cluster:
- dpdk_engine=0 — um dispatcher para todo o cluster;
- dpdk_engine=1 — um dispatcher por direção (in/out);
- dpdk_engine=2 — dispatchers RSS por direção;
- dpdk_engine=3 — um dispatcher para cada bridge;
- dpdk_engine=4 — um dispatcher para cada porta;
- dpdk_engine=6 — dispatchers RSS por bridge, para placas de alto desempenho 100G+.
Mais detalhes sobre cada modo estão disponíveis na documentação da Stingray.
Esse modelo funciona enquanto as portas têm a mesma capacidade. Mas, na rede de um operador, é mais comum encontrar a seguinte situação: muitas portas de 10G do lado do assinante e uma ou duas portas de 100G do lado do uplink. Isso é típico, por exemplo, de uma conexão BNG, em que a capacidade da LAN e da WAN é bastante diferente. Também existem configurações mais complexas, em que portas de 100G, 40G e 10G são usadas simultaneamente, com diferentes esquemas de distribuição de dispatchers.
Nessas situações, um esquema comum nem sempre é o ideal. Algumas portas podem ter mais recursos do que precisam, enquanto outras podem não ter recursos suficientes para processar a carga com eficiência.
Como distribuir os dispatchers de forma independente com dpdk_engine=7
O dpdk_engine=7, ou o engine com configuração explícita de dispatchers, permite definir manualmente quais portas cada dispatcher atende e quais recursos são alocados para ele. Diferentemente dos modos anteriores, em que se escolhia um único esquema fixo de distribuição para todo o sistema, esse novo engine permite configurar o processamento de cada grupo de portas de forma independente.
Para cada dispatcher, é possível definir separadamente:
- a lista de portas atendidas;
- o mempool — o pool de memória para os pacotes, com um tamanho definido;
- se necessário — RSS com o número de filas desejado.
Diferentemente dos modos anteriores, aqui não é preciso escolher um único esquema de distribuição para todo o cluster. As portas podem ser divididas em grupos, e cada grupo pode ter sua própria configuração de processamento.
Além disso, o dpdk_engine=7 é universal: por meio dele é possível implementar qualquer esquema de distribuição disponível no dpdk_engine=0..6.
Por exemplo, “um dispatcher por direção” (equivalente ao dpdk_engine=1) é escrito assim:
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
Também é possível configurar um esquema misto, em que parte das portas funciona por meio de um dispatcher comum e outra parte por meio de 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
Aqui, o grupo de 10G é atendido por um único dispatcher com o mempool main10G, enquanto as portas de 100G são atendidas por um dispatcher com RSS (16 filas) e um mempool main100G separado e maior. Os parâmetros de processamento podem ser ajustados separadamente para grupos de portas com desempenhos diferentes.
Figura 1 — Arquitetura de distribuição do dpdk_engine=7
Quanto às limitações: a configuração será considerada inválida se uma porta não estiver incluída em nenhum dpdk_dispatch ou estiver incluída em vários ao mesmo tempo. Uma porta deve pertencer a apenas um dpdk_dispatch, e todas as portas dentro de um mesmo dispatcher devem pertencer ao mesmo cluster.
Como são as configurações mistas de grandes operadoras
Uma operadora precisou desse tipo de esquema depois de modernizar seus uplinks. No nível superior da rede, surgiram interfaces de alta velocidade, enquanto no nível inferior permaneceram as conexões de 10G. Modernizar totalmente essas interfaces não era viável: substituir o equipamento e as portas exigiria recursos significativos.
Ao mesmo tempo, o tráfego de diferentes fontes convergia para um único servidor. Distribuir seu processamento entre servidores separados significaria usar equipamentos adicionais e utilizar os recursos computacionais de forma pouco eficiente.
Figura 2 — Esquema de rede da operadora
Antes, a Stingray permitia montar bridges apenas com interfaces de mesma capacidade. Para a configuração mista, era necessário poder configurar de forma independente o processamento dos diferentes grupos de portas.
O dpdk_engine=7 permite definir, para cada grupo, sua própria quantidade e tipo de dispatchers. Isso possibilita levar em conta a diferença de capacidade entre as interfaces e evitar distribuir os mesmos recursos entre portas com cargas diferentes.
Como resultado, não foi necessário reestruturar o sistema em torno de uma única velocidade de interface, nem transferir o processamento de determinados grupos para servidores adicionais. No fim, foi possível adaptar o processamento à configuração de rede já existente e usar com mais eficiência os recursos de hardware disponíveis.
O que o dpdk_engine=7 oferece
O dpdk_engine=7 remove uma limitação dos engines anteriores — a impossibilidade de aplicar estratégias de distribuição diferentes a partes distintas de um mesmo cluster. Isso é especialmente importante para instalações de grande porte com um conjunto heterogêneo de placas, em que o ajuste preciso do número de dispatchers e da memória para um grupo específico de portas afeta diretamente o desempenho e a economia de núcleos.
Se surgirem dúvidas sobre o número de dispatchers, o tamanho do mempool ou outros parâmetros ao migrar para o dpdk_engine=7, entre em contato com o suporte técnico da VAS Expert. Nossos especialistas vão ajudar a definir a configuração adequada para o seu esquema de conexão e a carga das suas interfaces.