Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Data Plane Development Kit (DPDK) no Azure oferece uma estrutura de processamento de pacotes de espaço do usuário mais rápida para aplicativos que exigem muito desempenho. Essa estrutura ignora a pilha de rede da máquina virtual do kernel.
No processamento de pacote típico que usa a pilha de rede do kernel, o processo é controlado por interrupção. Quando o adaptador de rede recebe pacotes de entrada, há uma interrupção do kernel para processar o pacote e uma alternância de contexto do espaço do kernel para o espaço do usuário. O DPDK elimina a alternância de contexto e o método acionado por interrupção em favor de uma implementação de espaço do usuário que usa drivers de modo de pesquisa para processamento rápido de pacotes.
O DPDK consiste em um conjunto de bibliotecas de espaço de usuário que fornece acesso a recursos de nível inferior. Esses recursos podem incluir hardware, núcleos lógicos, gerenciamento de memória e drivers de modo de pesquisa para placas de interface de rede.
O DPDK pode ser executado em máquinas virtuais do Azure, com suporte a várias distribuições do sistema operacional. O DPDK fornece uma diferenciação de desempenho chave na condução de implementações de virtualização de funções de rede. Essas implementações podem assumir a forma de NVA (dispositivos virtuais de rede), como roteadores virtuais, firewalls, VPNs, balanceadores de carga, núcleos de pacotes evoluídos e aplicativos de DDoS (negação de serviço).
Uma lista de instruções de instalação para DPDK em VMs MANA está disponível aqui: Adaptador de Rede do Microsoft Azure (MANA) e DPDK no Linux
Benefício
Mais pacotes por segundo (PPS) : ignorar o kernel e controlar os pacotes no espaço do usuário reduz a contagem de ciclos através da eliminação de alternância de contexto. Ele também melhora a taxa de pacotes que são processados por segundo nas máquinas virtuais do Azure Linux.
Versões mínimas dos sistemas operacionais suportados
As seguintes distribuições do Azure Marketplace são suportadas:
| Sistema operacional Linux | Versão do kernel |
|---|---|
| Ubuntu 18.04 | 4.15.0-1014-azure+ |
| SLES 15 SP1 | 4.12.14-8.19-azure+ |
| RHEL 7.5 | 3.10.0-862.11.6.el7.x86_64+ |
| Debian 10 | 4.19.0-1-cloud+ |
As versões citadas são os requisitos mínimos. Versões mais recentes também são suportadas.
Uma lista de requisitos para DPDK em VMs MANA está disponível aqui: Adaptador de Rede do Microsoft Azure (MANA) e DPDK no Linux
Suporte a kernel personalizado
Para qualquer versão do kernel Linux que não esteja listada, confira Patches para a criação de um kernel do Linux ajustado para o Azure. Para mais informações, você também pode entrar em contato com aznetdpdk@microsoft.com.
Suporte de regiões
Todas as regiões do Azure dão suporte a DPDK.
Pré-requisitos
A rede acelerada deve ser habilitada em uma máquina virtual Linux. A máquina virtual deve ter pelo menos dois adaptadores de rede, com uma interface de gerenciamento. Habilitar a Rede acelerada na interface de gerenciamento não é recomendado. Saiba como criar uma máquina virtual Linux com rede acelerada habilitada.
Além disso, o DPDK usa verbos RDMA para criar filas de dados no Adaptador de Rede. Na VM, verifique se os drivers do kernel RDMA corretos foram carregados. Eles podem ser mlx4_ib, mlx5_ib ou mana_ib, dependendo dos tamanhos da VM.
Instalar o DPDK manualmente (recomendado)
As instruções de instalação do DPDK para VMs MANA estão disponíveis aqui: Adaptador de Rede do Microsoft Azure (MANA) e DPDK no Linux
Instalar dependências de compilação
RHEL7.5
yum -y groupinstall "Infiniband Support"
sudo dracut --add-drivers "mlx4_en mlx4_ib mlx5_ib" -f
yum install -y gcc kernel-devel-`uname -r` numactl-devel.x86_64 librdmacm-devel libmnl-devel meson
Compilar e instalar o DPDK manualmente
Baixar a mais recente DPDK. A versão 22.11 LTS ou mais recente é recomendada para o Azure.
Crie a configuração padrão com
meson builddir.Compilar com
ninja -C builddir.Instalar com
DESTDIR=<output folder> ninja -C builddir install.
Configurar o ambiente de runtime
Depois de reiniciar, execute os comandos a seguir, uma vez:
Hugepages
- Configure a hugepage executando o seguinte comando, uma vez para cada nó NUMA:
echo 1024 | sudo tee /sys/devices/system/node/node*/hugepages/hugepages-2048kB/nr_hugepagesCrie um diretório para montagem com
mkdir /mnt/huge.Monte as hugepages com
mount -t hugetlbfs nodev /mnt/huge.Verifique se hugepages estão reservados com
grep Huge /proc/meminfo.O exemplo acima é para 2 milhões de páginas enormes. Páginas enormes de 1G também podem ser usadas.
Observação
Existe uma maneira de modificar o arquivo grub para que as páginas grandes sejam reservadas na inicialização seguindo as instruções para o DPDK. As instruções estão na parte inferior da página. Ao usar uma máquina virtual do Azure Linux, modifique os arquivos em /etc/config/grub.d para reservar páginas amplas nas reinicializações.
Endereços MAC e IP: use
ifconfig –apara visualizar o endereço MAC e IP das interfaces de rede. A interface de rede VF e a interface de rede NETVSC têm o mesmo endereço MAC, mas apenas a interface de rede NETVSC tem um endereço IP. Interfaces de VF estão em execução como interfaces subordinadas de interfaces NETVSC.Endereços PCI
Use
ethtool -i <vf interface name>para descobrir qual endereço PCI usar paraethtool -i <vf interface name>.Se eth0 tem rede acelerada habilitada, garanta que testpmd não assuma acidentalmente o controle do dispositivo VF de pci para eth0. Se o aplicativo DPDK acidentalmente assumir a interface de rede de gerenciamento e fizer com que você perca a conexão SSH, use o console serial para interromper o aplicativo DPDK. Você também pode usar o console serial para interromper ou iniciar a máquina virtual.
Carga ibuverbs em cada reinicialização com
modprobe -a ib_uverbs. Para apenas 15 SLES, também carrega mlx4_ib commodprobe -a mlx4_ib.
PMD mestre
Os aplicativos DPDK devem ser executados sobre o PMD mestre que está exposto no Azure. Se o aplicativo for executado diretamente sobre o PMD de VF, ele não receberá todos os pacotes destinados à VM, pois alguns pacotes aparecem na interface sintética. O DPDK suporta dois tipos de PMDs mestres: NetVSC PMD e PMD à prova de falhas. Um PMD mestre garante que o aplicativo receba todos os pacotes que são destinados a ele. Ele também garante que o aplicativo continue sendo executado no modo DPDK no PMD mestre, mesmo que o VF seja revogado quando o host estiver sendo atendido.
PMD NetVSC
NetVSC é o PMD recomendado para ser executado como um PMD mestre no Azure. Ele garante que o aplicativo receba todos os pacotes que são destinados a ele. Ele também garante que o aplicativo continue em execução no modo DPDK, mesmo que o FV seja revogado quando o host estiver em manutenção. Para obter mais informações sobre como usar e configurar o NetVSC PMD, consulte (https://doc.dpdk.org/guides/nics/netvsc.html).
PMD à prova de falhas
Observação: a execução com PMD à prova de falhas não é recomendada no Azure. Se sua versão do DPDK for 22.11 LTS ou mais recente, é recomendável usar o NetVSC PMD.
Alternativamente, você pode executar um aplicativo DPDK sobre o PMD à prova de falhas. Para obter mais informações sobre o PMD à prova de falhas, consulte Biblioteca de drivers do modo de pesquisa à prova de falhas.
Executar testpmd
Para executar testpmd no modo de raiz, use sudo antes do comando sudo.
Básico: verificação de integridade, inicialização do adaptador à prova de falhas
Execute os seguintes comandos para iniciar um aplicativo testpmd de porta única:
testpmd -w <pci address from previous step> \ -- -i \ --port-topology=chainedExecute os seguintes comandos para iniciar um aplicativo testpmd de porta dupla:
testpmd -w <pci address nic1> \ -w <pci address nic2> \ -- -i
Depois de iniciado, execute show port info all para verificar as informações de porta. Você deverá ver uma ou duas portas DPDK que são net_netvsc.
- Use
start <port> /stop <port>para iniciar o tráfego.
Os comandos anteriores iniciam testpmd no modo interativo, o que é recomendado, para testar alguns comandos testpmd.
Básico: remetente único/receptor único
Os seguintes comandos periodicamente imprimem as estatísticas de pacotes por segundo:
No lado do TX, execute o seguinte comando:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=txonly \ --eth-peer=<port id>,<receiver peer MAC address> \ --stats-period <display interval in seconds>No lado do RX, execute o seguinte comando:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=rxonly \ --eth-peer=<port id>,<sender peer MAC address> \ --stats-period <display interval in seconds>
Ao executar os comandos anteriores em uma máquina virtual, altere IP_SRC_ADDR e IP_DST_ADDR em app/test-pmd/txonly.c para corresponder ao endereço IP real das máquinas virtuais antes de compilar. Caso contrário, os pacotes são descartados antes de chegar ao receptor.
Avançado: Remetente único/encaminhador único
Os seguintes comandos periodicamente imprimem as estatísticas de pacotes por segundo:
No lado do TX, execute o seguinte comando:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address of the device you plan to use> \ -- --port-topology=chained \ --nb-cores <number of cores to use for test pmd> \ --forward-mode=txonly \ --eth-peer=<port id>,<receiver peer MAC address> \ --stats-period <display interval in seconds>No lado do FWD, execute o seguinte comando:
testpmd \ -l <core-list> \ -n <num of mem channels> \ -w <pci address NIC1> \ -w <pci address NIC2> \ -- --nb-cores <number of cores to use for test pmd> \ --forward-mode=io \ --eth-peer=<recv port id>,<sender peer MAC address> \ --stats-period <display interval in seconds>
Ao executar os comandos anteriores em uma máquina virtual, altere IP_SRC_ADDR e IP_DST_ADDR em app/test-pmd/txonly.c para corresponder ao endereço IP real das máquinas virtuais antes de compilar. Caso contrário, os pacotes são descartados antes de alcançar o encaminhador. Não é possível que um terceiro computador receba o tráfego encaminhado porque o encaminhador testpmd não modifica os endereços da camada 3, a menos que você faça algumas alterações no código.
Instalar o DPDK via pacote do sistema (não recomendado)
sudo yum install -y dpdk