Trabalhar com o DPDK

Esta página descreve como usar o Kit de desenvolvimento do plano de dados (DPDK, na sigla em inglês) em instâncias do Compute Engine U4C.

Sobre o DPDK em instâncias U4C

O Kit de desenvolvimento do plano de dados (DPDK) é um framework para aplicativos com alto desempenho que exigem processamento de pacotes rápido, baixa latência e desempenho consistente. O DPDK ignora a pilha de rede do kernel do Linux e é executado diretamente no espaço do usuário.

As instâncias U4C oferecem suporte ao DPDK usando o driver de modo de pesquisa (PMD) da NIC virtual do Google (gVNIC). Depois de instalar o DPDK, os recursos do driver podem ser configurados usando as APIs ethdev e rte_flow padrão.

O uso do DPDK com a solução ULL inclui suporte para o direcionamento de fluxo. É possível ignorar o hash de escalonamento do lado de recebimento (RSS, na sigla em inglês) padrão direcionando fluxos de tráfego específicos diretamente para uma fila de recebimento (RX) designada. A solução ULL oferece suporte ao direcionamento de fluxo de tupla tripla (protocolo, endereço IP de destino e porta de destino) para tráfego de transmissão única e multicast ULL.

Além disso, o PMD gVNIC oferece suporte à marcação de data/hora de RX de hardware em mbufs e leituras de relógio por meio de rte_eth_read_clock.

Limitações

O uso do DPDK em instâncias U4C tem as seguintes limitações:

  • O suporte para instâncias bare metal não está disponível na versão principal do DPDK ou no repositório dpdk-next-net. É necessário aplicar os patches necessários seguindo as etapas em Instalar o DPDK na instância U4C.
  • Ao configurar a hora exata para uma instância U4C que usa o DPDK nas interfaces de rede ULL (nic1 e nic2), é necessário configurar o chrony para usar nic0 como origem para a sincronização de horário.

Antes de começar

Antes de trabalhar com o DPDK em instâncias do Compute Engine U4C, é necessário atender aos seguintes requisitos.

Criar uma instância U4C

Se ainda não tiver feito isso, crie uma instância bare metal U4C. Consulte Criar ULL instâncias do Compute Engine.

Conectar-se à instância usando SSH

Se ainda não tiver feito isso, conecte-se à instância usando SSH.

Instalar o DPDK na instância U4C

Para instalar o DPDK na sua instância U4C, siga estas etapas:

  1. Configure as dependências para a instalação do DPDK:

    1. Se você estiver usando o Rocky Linux, ative o repositório do CodeReady Builder (CRB). Se você estiver usando o Red Hat Enterprise Linux (RHEL), pule esta etapa.

      sudo dnf -y config-manager --enable crb
      
    2. Instale os pacotes necessários e as ferramentas de build:

      sudo dnf install -y git gcc gcc-c++ make ninja-build python3-pip \
          kernel-devel-$(uname -r) pkgconf-pkg-config numactl-devel
      sudo pip install pyelftools meson
      
  2. Faça o download da origem do DPDK. É necessário usar o dpdk-next-net repositório ou a versão 26.07 ou mais recente do DPDK.

    • dpdk-next-net

      git clone git://dpdk.org/next/dpdk-next-net dpdk-source
      
    • DPDK 26.07 ou mais recente

      git clone git://dpdk.org/dpdk -b v26.07 dpdk-source
      
  3. Aplique os patches necessários. A origem do suporte bare metal está hospedada em na ramificação dpdk-bm do repositório compute-virtual-ethernet-dpdk do Google. Os patches são compatíveis com ABI com o repositório dpdk-next-net.

    É possível aplicar os patches usando uma cópia literal ou um método de cherry-pick. Faça uma das seguintes ações, dependendo do fluxo de trabalho preferido:

    • Cópia literal

      git clone https://github.com/google/compute-virtual-ethernet-dpdk -b dpdk-bm dpdk-bm
      cp -r dpdk-bm/drivers/net/gve/* dpdk-source/drivers/net/gve/
      cd dpdk-source
    • Cherry-pick

      cd dpdk-source
      git remote add gve-bm https://github.com/google/compute-virtual-ethernet-dpdk
      git fetch gve-bm
      git cherry-pick gve-bm/main..gve-bm/dpdk-bm
  4. Crie e instale o DPDK:

    meson setup build
    sudo ninja -C build install; sudo ldconfig
    

Vincular o DPDK a um driver

É necessário vincular as interfaces de rede da instância a um driver de kernel compatível com DPDK , conforme descrito em Vincular o DPDK a um driver e testá-lo.

Para instâncias bare metal U4C, considere o seguinte:

  • As instâncias bare metal não exigem os drivers UIO ou VFIO sem IOMMU usados por instâncias de VM. É possível vincular diretamente ao driver vfio-pci padrão.
  • Só é possível vincular as interfaces de rede ULL (nic1 e nic2) ao driver DPDK. nic0 precisa permanecer vinculado ao driver de kernel padrão para manter a conectividade de rede e oferecer suporte à sincronização de horário.

Para mais informações, consulte Binding and Unbinding Network Ports to/from the módulos do kernel na documentação do DPDK.

A seguir

  • Para sincronizar o relógio da instância com o relógio da NIC física do servidor host, consulte Configurar a hora exata.