tencent cloud

Cloud Virtual Machine

Testar com DPDK

Download
Modo Foco
Tamanho da Fonte
Última atualização: 2026-08-07 10:13:03
Traduzido por IA

Cenário de operação

Este documento descreve como realizar testes de desempenho de rede de alta taxa de transferência em servidores em nuvem via método DPDK.

Etapas de operação

Passo 1: Preparo do ambiente e instalação

Este capítulo irá guiá-lo através da configuração do ambiente de teste DPDK, incluindo download do código-fonte, descompactação, instalação de bibliotecas de dependência e compilação.

Preparação do Ambiente

Os servidores em nuvem precisam de capacidade de acesso à Internet pública. Você pode optar por atribuir um IP público ao criar o servidor em nuvem ou configurar um IP público elástico após a criação do servidor em nuvem.
Para servidores em nuvem configurados com múltiplas placas de rede, recomenda-se usar eth0 para testes e as demais placas de rede para login remoto.
Operações relacionadas precisam ser executadas com permissões de root do sistema. Solicite as permissões relevantes antecipadamente.
As seguintes instruções de operação aplicam-se aos sistemas operacionais TencentOS 3.0 e versões superiores.
Prepare dois servidores de teste, respectivamente como receptor e emissor.
Como criar uma instância, consulte Criar uma instância via página de compra.
Como fazer login na instância, consulte Conectar-se a uma instância Linux via OrcaTerm (recomendado).

Descarregue e descompacte o pacote de código-fonte do DPDK

Utilize o comando wget para baixar o pacote compactado do código-fonte DPDK 23.11 do repositório oficial e descompacte-o.
Nota:
As operações subsequentes devem ser realizadas no diretório após a descompactação do DPDK.
wget https://fast.dpdk.org/rel/dpdk-23.11.tar.gz
tar -xf dpdk-23.11.tar.gz
cd dpdk-23.11

Instalação de bibliotecas de dependência e compilação

Instale as bibliotecas de dependência necessárias e as ferramentas de compilação.
Instale a biblioteca de dependência numactl-devel (requer permissões de root).
yum install numactl-devel -y
Instale as ferramentas de compilação do Python.
pip3 install meson ninja pyelftools
Utilize meson para construir o projeto (definir o número máximo de núcleos lógicos como 1024).
meson build -Dmax_lcores=1024
Utilize ninja para compilar o projeto.
ninja -C build
Atenção:
Se o servidor de teste que você usa for do tipo de instância posterior ao SA4 Padrão e a CPU for da especificação mais alta, consulte tratamento de cenários especiais e adicione as etapas de configuração relevantes.

Passo 2: Vinculação do módulo de driver do kernel

O DPDK precisa vincular um módulo de driver do kernel dedicado para assumir o controle dos dispositivos de placa de rede.

Baixe o módulo UIO

Clone o código do módulo do kernel do repositório oficial do DPDK:
git clone http://dpdk.org/git/dpdk-kmods
ou utilize o protocolo git (alternativo).
git clone git://dpdk.org/dpdk-kmods

Compile o módulo UIO

Entre no diretório igb_uio e realize a compilação.
cd ./dpdk-kmods/linux/igb_uio
make

Carregue o módulo UIO

Carregar os módulos do kernel uio e igb_uio (requer permissões de root).
modprobe uio
insmod ./dpdk-kmods/linux/igb_uio/igb_uio.ko

Consulte e registre o endereço PCI da placa de rede

Antes de vincular a placa de rede, é necessário obter e registrar o endereço PCI da placa de rede alvo. Execute o seguinte comando para verificar e registrar as informações de todos os dispositivos de placa de rede:
ethtool -i eth0 | grep bus-info


Vincular a placa de rede ao driver UIO

Utilize a ferramenta fornecida pelo DPDK para vincular a placa de rede ao driver igb_uio.
1. Desligue a placa de rede.
Atenção:
Antes de desligar a placa de rede, verifique se você está fazendo login remoto no servidor em nuvem através do IP de outra placa de rede elástica. Se usar o eth0 para login remoto, isso resultará na interrupção da conexão.
ifconfig eth0 down
2. Vincule a placa de rede ao driver igb_uio (substitua pelo endereço PCI real).
./usertools/dpdk-devbind.py --bind=igb_uio 0000:02:01.0 #0000:02:01.0 precisa ser substituído pelo endereço PCI real da sua placa de rede

Passo III: Configuração de memória de página grande

O DPDK utiliza memória de página grande (Huge Pages) para melhorar a eficiência de acesso à memória. A configuração da memória de página grande é um pré-requisito necessário para executar o DPDK.
Execute o seguinte comando para alocar memória de página grande (aqui usamos páginas de 2MB como exemplo, alocando 8192 páginas, totalizando aproximadamente 16GB):
echo 8192 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

Passo 4: Executar o teste de desempenho

O teste de desempenho do DPDK adota o modo de máquina dupla RX-TX: um servidor atua como terminal receptor (RX) e outro servidor como terminal transmissor (TX).
Nota:
O terminal receptor (RX) e o terminal transmissor (TX). Os dois servidores precisam executar os comandos correspondentes respectivamente.
O terminal receptor (RX) executa os seguintes comandos:
C=4; Q=32; ./build/app/dpdk-testpmd -l 0-47 --proc-type primary --file-prefix bench -a 0000:1b:00.0 -- --burst=128 --nb-cores=$C --txd=4096 --rxd=4096 --txq=$Q --rxq=$Q --forward-mode=rxonly --stats-period=1
O terminal transmissor (TX) executa os seguintes comandos:
C=4; Q=32; S=10.31.0.80; D=10.31.0.240; ./build/app/dpdk-testpmd -l 0-47 --proc-type primary --file-prefix bench -a 0000:1b:00.0 -- --burst=128 --nb-cores=$C --tx-ip $S,$D --txonly-multi-flow --txpkts=64 --txd=4096 --rxd=4096 --txq=$Q --rxq=$Q --forward-mode=txonly --stats-period=1

Descrição detalhada dos parâmetros

Parâmetros
Descrição
-a 0000:1b:00.0
Especifique o endereço PCI da placa de rede a ser utilizado, que deve ser substituído conforme o ambiente real.
--tx-ip S,D
Especifique o endereço IP de destino para envio de pacotes no terminal TX, substituindo pelo endereço da placa de rede do servidor em nuvem.
--txonly-multi-flow
Ative o modo de envio de múltiplos fluxos (se não configurado, apenas um único fluxo será enviado).
--txpkts=64
O comprimento do pacote (em bytes, incluindo o cabeçalho MAC), recomenda-se 64 para cenários de teste de PPS.
-l 0-47
Especifique o intervalo de numeração dos núcleos de CPU utilizados, ajuste conforme necessário. Para cenários de NUMA cruzado, ver a distribuição de filas entre NUMAs para obter informações.
--txq / --rxq = $Q
Especifique o número de filas de envio/recepção, que pode ser verificado por ethtool -l eth0 | grep Combined.
--nb-cores=$C
O número de núcleos de CPU efetivamente envolvidos no teste, recomenda-se 2 ≤ C ≤ Q.
--stats-period=1
Saída de informações estatísticas uma vez por segundo.
Um exemplo dos resultados do teste é mostrado abaixo, com o terminal receptor (RX) à esquerda e o terminal transmissor (TX) à direita:


Passo 5: Recuperação do Ambiente de Teste

Após a conclusão do teste, recomenda-se restaurar o ambiente ao estado inicial, liberar recursos e evitar impactos em outros serviços.

Restaurar o driver da placa de rede

Use a ferramenta dpdk-devbind.py para restaurar a placa de rede ao driver padrão:
./usertools/dpdk-devbind.py -b virtio-pci 0000:00:08.0 # Nota: 0000:00:08.0 precisa ser substituído pelo endereço PCI real
Se o comando acima não funcionar corretamente, você pode executar manualmente o seguinte comando para desvincular o vfio-pci.
echo 0000:1b:00.0 > /sys/bus/pci/drivers/vfio-pci/unbind #0000:1b:00.0 deve ser substituído conforme necessário
echo virtio-pci > /sys/bus/pci/devices/0000\\:1b\\:00.0/driver_override #definir driver_override como virtio-pci
echo 0000:1b:00.0 > /sys/bus/pci/drivers/virtio-pci/bind # religar ao virtio-pci

Restaurar memória de página grande

Zere a quantidade de memória de página grande.
echo 0 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Reative a placa de rede.
ifconfig eth1 up

Cenários Especiais de Tratamento

Se o servidor de teste que você usa for do tipo de instância posterior ao SA4 Padrão e a CPU for da especificação mais alta, será necessário adicionar as seguintes etapas de configuração.

Ver a distribuição de filas entre NUMAs

Nota:
Para servidores com CPUs multi-socket, é necessário garantir que os núcleos de CPU usados pelo DPDK estejam no mesmo nó NUMA que a placa de rede, caso contrário, o desempenho será significativamente reduzido.
1. Baixar e verificar o script
wget https://lag-dpdk-1326316016.cos.ap-guangzhou.myqcloud.com/dpdk_core_advisor.sh
2. Executar o script para ver a distribuição NUMA entre filas
sh dpdk_core_advisor.sh eth0
Se os resultados retornados mostrarem distribuição de filas entre nós NUMA, instale o lag_dpdk.patch.

Instale o lag_dpdk.patch

1. Baixe o script de patch lag_dpdk.patch.
wget https://lag-dpdk-1326316016.cos.ap-guangzhou.myqcloud.com/lag_dpdk.patch
2. Aplique o patch.
git apply lag_dpdk.patch
Comandos equivalentes (basta escolher um)
patch -p1 < lag_dpdk.patch
3. Recompile.
meson build -Dmax_lcores=1024
ninja -C build



Ajuda e Suporte

Esta página foi útil?

comentários