Live Chat Software by Kayako |
Roteamento em modo Netmap com netmap-rt no ProApps
Postado por on 26/Apr 17:24
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Roteamento em modo Netmap no ProAppsO ProApps a partir do ProApps Routing 2.3.23 (routing-2.3.23) inclui o suporte a roteamento em modo netmap, através do serviço netmap-rt. Esse recurso permite o uso do framework netmap para encaminhamento em camada 3 (L3) de pacotes, e no ProApps está preparado para uso primário em ambiente de roteamento de borda, com BGP e também roteamento OSPF. Antes de usar o netmap-rt você precisa entender alguns conceitos. O primeiro deles é que nós recomendamos fortemente que esse recurso seja utilizado por usuários ProApps rodando o ProApps Routing em equipamentos ServerU, especialmente L-800 ou superior, para melhor proveito e melhor performance. Se você usa o ProApps Routing em outro hardware, é ideal utilizar em redes Chelsio T5 ou Intel igb(4) que tem o melhor suporte ao framework netmap. Em modo netmap é importante entender, que os pacotes são acessados, processados e tratados diretamente pela aplicação. Isso quer dizer que o kernel tem uma função bem limitada nesse modo de uso. É quase correto dizer que o kernel é completamente pulado e ignorado em modo netmap, exceto que fica com o kernel o gerenciamento de acesso ao plano de controle (control plane) oferecido pelo framework Netmap, a alocação de memória e controle de acesso ao device netmap propriamente dito - o /dev/netmap. Mas uma vez que a aplicação abra uma porta de rede em modo Netmap, a aplicação toma controle totalmente daquela porta e pula o kernel para qualquer processamento de pacotes a partir daquele instante. Isso significa na prática que estatísticas de kernel que você está acostumado a consultar com netstat(1) como taxas de pacotes por segundo, taxas de erro, retransmissão não serão mais contabilizadas pelo kernel. Ou seja estarão frequentemente zeradas ou indicando valores baixos, referentes a comunicação da aplicação com o host bridge ou com interface de loopback. Apenas estatístias informadas pelo hardware serão apresentadas pelo netstat(1) por exemplo. Da mesma forma aplicações de monitoramente como nload(8), rate(8) ou até mesmo tcpdump(1) não vão funcionar como você está acostumado. Mas isso não significa que não vão funcionar. Continue lendo. Temos então dois conceitos que precisam ser compreendidos:
O netmap-rtNo ProApps o roteamento em modo Netmap é implementado pelo netmap-rt(1), um daemon multithread encarregado de implementar o dataplane (plano de dados, onde o roteamento de fato acontece), o controlplane (plano de controle, gerenciamento do serviço, das threads de sincronia de dados, e do controle das threads do plano de dados), em específico o netmap-rt implementa:
Quando você rodar top -H você verá detalhes das threads, por exemplo: 11958 root 23 0 1411M 87896K kqread 2 0:02 85.42% netmap-rt{netmap-rt} Sobre o netmap-rtO netmap-rt é o roteador IP que implementa o subsistema de roteamento do FreeBSD em modo netmap, um framework de I/O de pacotes extremanete rápido. Ele é baseado no netmap-fwd, uma prova de conceito original para um roteador IPv4 implementado sobre netmap, inicialmente projetado por Patrick Tracanelli e implementado em prova de conceito (pre-alpha) por Luiz Souza em um projeto da ServerU Inc. Devido a uma série de motivos, resolvemos renomear para netmap-rt, um nome único e que não conflita com outros softwares, refletindo também a evolução do PoC original. O netmap-rt também é um roteador DPDK, o que significa que além do modo netmap, pode trabalhar em modo DPDK e se beneficiando da tecnologia da Intel para acesso direto ao dataplane em redes desse fabricante. Esse software é desenvolvido e mantido pela ServerU Inc e pela FreeBSD Brasil e disponível por padrão no ProApps Enterprise Appliance. Ele pode rodar em qualquer sistema FreeBSD compatível ou no ProApps Base mesmo sem a ProApps GUI. O netmap-rt foi projetado para substituir o kernel routing path de forma transparente, enquanto plenamente compatível com o kernel e as aplicações que o usuário está acostumado a usar para manipular tabela de roteamento, de forma que usuários e daemons de roteamento possam manusear a tabela de roteamento de kernel e interfaces fora do modo netmap, enquanto essas mudanças sempre se refletem no modo netmap. Isso quer dizer que o kernel-path serve também como fallback para roteamento sem depender de configurações ou ajustes exclusivos do roteador em modo netmap. As interfaces de roteamento em modo netmap podem ser seletivamente configuradas, permitindo configuração híbrida onde algumas portas atual em kernel-path enquanto outras em modo netmap, fazendo funções distintas. Com uma integração e sincronia inteligente entre a FIB do kernel e o roteador netmap, a possibilidade de fazer bridge com o host-stack, daemons de roteamento como BIRD, OpenBGP, OpenOSPF ou Quagga podem ser utilizados de forma transparente e sem nenhum requisitoe special de configuração nesses serviços. O objetivo principal do netmap-rt é obter benefício de performance das technologias netmap (e DPDK) e alcançar taxas de roteamento de pacotes sem precedentes no FreeBSD em hardware sem aceleração específica para essa função, obtendo melhores resultados em placas de redes profissionais. Focamos o suporte e desenvolvimento primário em redes Intel e Chelsio, mas ganhos de performance são esperados em diversos outros chipset de redes que suportem Netmap. O objetivo desse software é chegar o mais próximo possível de taxas de roteamento em line-rate em redes 10G e 40G com tabela BGP FULL em servidores com ótimo custo de propriedade como a série ServerU Netmap. Por quê renomear?O primeiro motivo para o netmap-rt(1) ter um novo nome, diferente do nome utilizado na prova de conceito (PoC) não é técnico. O nome netmap-fwd foi utilizado diversas vezes como o nome original da aplicação bridge (netmap bridge) escrita por Luigi Rizzo, autor original do netmap framework, e, embora essas duas aplicações compartilharam o mesmo nome, histioricamente são completamente não relacionadas e fazem coisas diferentes. Dessa forma números de performance e estatísticas publicadas com esse nome geram uma grande e indesejada confusão para referências acadêmicas, científicas e outros trabalhos relacionados. Em segundo lugar, netmap-fwd era apenas uma prova de conceito. Agora temos a cosa toda, completamente repensada e o netmap-rt(1) não é apenas um encaminhador de pacotes. Com suporte a ACL, com recursos de Policy Based Routing, com coletor de métricas para observabilidade de rede e outros recursos, decidimos por um nome mais apropriado. Recursos do netmap-rtO netmap-rt incluso no ProApps Routing oferece os seguintes recursos:
Disponibilidade do netmap-rtVocê pode usar o netmap-rt diretamente no ProApps Enterprise Appliance disponível a partir do ProApps Routing 2.3.23, para saber a versão instalada do seu componente routing, digite: % pkg info routing E para saber se o netmap-rt está instalado, digite: % pkg info netmap-rt Usando o netmap-rtPara instalar o netmap-rt em um ProApps que ainda não tenha o recurso, use o pkg: pkg install libucl libevent2 Adicione a seguinte entrada no /etc/rc.conf: netmap_rt_enable="YES" #netmap_rt_flags="-v" #optional additional flags Revise o /usr/local/etc/netmap-rt.conf e ajuste-o conforme suas necessidades. Em particular você pode manter os recursos de aceleração LRO (não desliga-los) em algumas placas de rede em particular. Você também pode testar os métodos de pesquisa na tabela de roteamento DXR ou RADIX e escolher o que se comportar melhor no seu ambiente. A configuração mais importante no netmap-rt.conf é a lista de interfaces de rede que deve ser usada. As interfaces que não estiverem listadas na configuração não serão usadas pelo netmap-rt, ou seja o roteamento ficará em kernel-path, enquanto as listadas serão gerenciadas pelo netmap-rt(1): interfaces="ix0 ix1 igb1 igb2 igb3 vlan10 vlan12" Inicie o serviço como de costume no FreeBSD: # service netmap-rt start Os logs são desviados via syslog para o /var/log/messages. A partir de agora você deve manipular as tabelas de roteamento pelo comando route(8) na CLI (linha de comando) exatamente como sempre fez. Se você manipular a tabela do netmap-rt diretamente, as mudanças não serão refletidas em kernel, por isso recomendamos que manipulações sempre aconteçam com o comando route(8) normalmente, enquanto você pode inspecionar as tabelas de roteamento do netmap-rt com o utilitário netmap-rtctl. O netmap-rtctlComo usar e explorar o roteamento netmap via netmap-rtctl: usage: netmap-rtctl -f [netmap-rt.conf] -s [socket] <command> <command arg> Comandos e exemplo de uso do netmap-rtctl: netmap-rtctl arp Mostra tabela ARP cacheada pelo netmap-rt netmap-rtctl ifconfig Mostra configurações observados em modo de execução na interface informada netmap-rtctl route get <destionation> Comandos de manipulação de roteas, similar ao route(8) netmap-rtctl route Imprime a tabela de roteamento, mas CUIDADO: é uma thread que bloqueia a árvore RADIX ou DXR em modo walktree, faz o engine de roteamento pausar, NÃO USE em produção, use apenas para debug ou troubleshooting, em produção use o netmap-rt-ctl route dump para salvar a tabela de roteamento em um arquivo netmap-rtctl route dump Faz dump da tabela de roteamento convergida no netmap-rt em um arquivo, que por padrão é o /var/db/netmap-rt-dump (ajustável no netmap-rt.conf) netmap-rtctl fib couple|decouple|recouple Permite gerencia a convergência da tabela FIB do kernel na do netmap-rt netmap-rtctl status Imprime contadores e informações de status netmap-rtctl cli Mostra contadores da CLI interativa e dos clientes netmap-rtctl conectados netmap-rtctl shutdown Desliga o netmap-rt de forma clean e correta. netmap-rtctl acl list Imprime a lista de controle de acesso carregada netmap-rtctl acl reload Recarrega o arquivo de regras de controle de acesso netmap-rtctl acl enable|disable Por padrão o sistema de controle de acesso (ACL) e filtros são ligados sempre que o arquivo acl_conf existe e tem regras válidas, mas você pode desligar e religar a qualquer momento em tempo de execução e passar os pacotes diretamente pro engine de roteamento netmap-rtctl help Ajuda básica do utilitário de linha de comando Porta de GerênciaComo o netmap-rt coloca a porta em modo netmap, recomendamos que uma porta de rede seja dedicada para gerência, permitindo acesso ssh e acesso a ProApps GUI através dessa porta e que essa porta fique fora do modo netmap (ou seja não listado nas interfaces= no netmap-rt.conf) e deve ser alcancável diretamente da sua rede (não depender de rotas estáticas por exemplo, tão pouco dinâmicas), especialmente porque mediante início ou shutdown da aplicação netmap, haverá interrupção temporária de conectividade quando alternar entre o modo kernel-path e o modo netmap. Algumas sessões BGP podem cair nessa alterância de modo de operação dependendo da configuração de keep alive e tempo de vida configurado com os peers BGP. Limitações Conhecidas
(*) Essa atividade não está no TODO para o netmap-rt, todas as outras estão. Reporte feedback:http://suporte.freebsdbrasil.com.br Versão:Software version v0.3c Uso Preliminar no ProApps e Estado AtualA ativação do netmap-rt no ProApps no momento não pode ser feita pelo ProApps GUI (interface gráfica) ainda. Isso porque o Status atual do netmap-rt é considerado BETA. Nós temos utilizado seletivamente em alguns clientes desde Dezembro/2015 e é nosso modo primário de roteamento na FreeBSD Brasil. A disponibilidade preliminar no ProApps tem obetivo de aumentar a base de usuários e recomendamos que seja adotado nesse momento por clientes com mais facilidade em linha de comando. O ProApps Routing pode continuar sendo utilizado normalmente já que a integração do netmap-rt com BGP e outros recursos é transparente, apenas a configuração (netmap-rt.conf) e troubleshooting requer acesso CLI. Se você quiser usar o netmap-rt em seu ambiente abra um chamado para ser acompanhado por nossa equipe de suporte. PerformanceO netmap-rt oferece ganho de até 10x na performance de roteamento se comparado com o modo de roteamento em kernel. Em um ambiente de testes com uma ServerU Netmap L-800 com 4x10GbE e 6x1GbE em testes bilaterais utilizando pkt-gen em modo RX e pkt-gen em modo TX, os números observados são:
Configuração do netmap-rtO netmap-rt usa o /usr/local/etc/netmap-rt.conf como arquivo primário de configuração, segue referência: # O arquivo de configuração /usr/local/etc/netmap-rt-acl.conf tem o seguinte formato: src-ip;src-port;dst-ip;dst-port;proto;iplen;action Uma entrada por linha, por exemplo: any;any;any;123;udp;any;drop Delimitadores aceitos são apenas ; enquanto # é um comentário, pode ser usado no final de uma linha de configuração ou em uma nova linha. A expressão any ou a ausência (em branco) de valor faz aquele critério não ser testado. As ações possíveis são deny|drop, allow|pass e nexthop <gw>, podem ser acompanhados da expressão log para gerar logs (syslog) conforme exemplos acima. Troubleshooting e MonitoraçãoJá que o netstat(1) e outros utilitários de monitoração dependem de recursos do kernel que não oferecerão mais muitas informações, você deve sempre usar o netmap-rtctl show stats para consultar a saúde geral do subsistema de roteamento netmap. Se quiser monitorar taxas de pps, de bps ou inspecionar tráfego use alguma aplicação compatível com pcap. Desde 2013 o ProApps oferece uma versão própria do Netmap, isso significa que alguns recursos avançados, outros exclusivos e alguns que ainda não entraram no -STABLE ou mesmo no -CURRENT há estão disponíveis no ProApps. Entre esses recursos o uso antecipado do modo monitor do netmap foi adotado. Para utilitários como tcpdump(1), nload(8), rate(1), você pode tirar proveito do modo monitor nas interfaces, usando da seguinte forma: tcpdump -nv -i netmap:ncxl0/rtz A sintaxe geral do modo monitor no netmap é netmap:<if>/<monitor_mode> enquanto os modos suportados são r para RX, t para TX e z para o modo zerocopy. Note que pode haver impacto de performance ao usar o modo monitor nas interfaces, então sempre seja seletivo no modo r ou t e sempre tente usar em modo zerocopy. Dentro do netmap o modo zerocopy copia os pacotes para a interface monitor em um momento onde nem todas aplicações podem usufruir, mas para aplicações em modo pcap sempre será suficiente. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|