DPDK 작업

이 페이지에서는 U4C Compute Engine 인스턴스에서 데이터 영역 개발 키트 (DPDK)를 사용하는 방법을 설명합니다.

U4C 인스턴스의 DPDK 정보

데이터 영역 개발 키트 (DPDK)는 빠른 패킷 처리, 낮은 지연 시간, 일관적인 성능이 필요한 성능 집약적인 애플리케이션을 위한 프레임워크입니다. DPDK는 Linux 커널 네트워크 스택을 우회하고 사용자 공간에서 직접 실행됩니다.

U4C 인스턴스는 Google 가상 NIC (gVNIC) 폴 모드 드라이버 (PMD)를 사용하여 DPDK를 지원합니다. DPDK를 설치하면 표준 ethdev 및 rte_flow API를 사용하여 드라이버 기능을 구성할 수 있습니다.

ULL 솔루션에서 DPDK를 사용하면 흐름 스티어링이 지원됩니다. 특정 트래픽 흐름 을 지정된 수신 큐(RX)로 직접 스티어링하여 기본 수신 측 확장 (RSS) 해싱을 우회할 수 있습니다. ULL 솔루션은 ULL 유니캐스트 및 멀티캐스트 트래픽에 대해 3-튜플 흐름 스티어링 (프로토콜, 대상 IP 주소, 대상 포트)을 지원합니다.

또한 gVNIC PMD는 rte_eth_read_clock을 통해 mbuf에서 하드웨어 RX 타임스탬프를 지원하고 시계를 읽습니다.

제한사항

U4C 인스턴스에서 DPDK를 사용하면 다음과 같은 제한사항이 있습니다.

  • 베어메탈 인스턴스 지원은 메인라인 DPDK 출시 또는 dpdk-next-net 저장소에서 사용할 수 없습니다. U4C 인스턴스에 DPDK 설치의 단계에 따라 필요한 패치를 적용해야 합니다.
  • ULL 네트워크 인터페이스 (nic1 및 nic2)에서 DPDK를 사용하는 U4C 인스턴스의 정확한 시간을 구성할 때는 chrony가 nic0을 시간 동기화의 소스로 사용하도록 구성해야 합니다.

시작하기 전에

U4C Compute Engine 인스턴스에서 DPDK를 사용하기 전에 다음 요구사항을 충족해야 합니다.

U4C 인스턴스 만들기

아직 만들지 않은 경우 U4C 베어메탈 인스턴스를 만듭니다. ULL Compute Engine 인스턴스 만들기를 참고하세요.

SSH를 사용하여 인스턴스에 연결

아직 연결하지 않은 경우 SSH를 사용하여 인스턴스에 연결합니다.

U4C 인스턴스에 DPDK 설치

U4C 인스턴스에 DPDK를 설치하려면 다음 단계를 수행합니다.

  1. DPDK 설치의 종속 항목을 구성합니다.

    1. Rocky Linux를 사용하는 경우 CodeReady Builder (CRB) 저장소를 사용 설정합니다. Red Hat Enterprise Linux (RHEL)를 사용하는 경우 이 단계를 건너뜁니다.

      sudo dnf -y config-manager --enable crb
      
    2. 필요한 패키지 및 빌드 도구를 설치합니다.

      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. DPDK 소스를 다운로드합니다. dpdk-next-net 저장소 또는 DPDK 출시 버전 26.07 이상을 사용해야 합니다.

    • dpdk-next-net

      git clone git://dpdk.org/next/dpdk-next-net dpdk-source
      
    • DPDK 26.07 이상

      git clone git://dpdk.org/dpdk -b v26.07 dpdk-source
      
  3. 필요한 패치를 적용합니다. 베어메탈 지원의 소스는 Google compute-virtual-ethernet-dpdk 저장소의 dpdk-bm 브랜치에서 호스팅됩니다. 패치는 dpdk-next-net 저장소와 ABI 호환됩니다.

    직접 인용 복사 또는 체리 선택 메서드를 사용하여 패치를 적용할 수 있습니다. 선호하는 워크플로에 따라 다음 중 하나를 실행합니다.

    • 직접 인용 복사

      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
    • 체리 선택

      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. DPDK를 빌드하고 설치합니다.

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

드라이버에 DPDK 바인딩

인스턴스의 네트워크 인터페이스를 드라이버에 DPDK 바인딩 및 테스트에 설명된 대로 DPDK 호환 커널 드라이버에 바인딩해야 합니다.

U4C 베어메탈 인스턴스의 경우 다음을 고려하세요.

  • 베어메탈 인스턴스에는 VM 인스턴스에서 사용하는 UIO 또는 IOMMU 없는 VFIO 드라이버가 필요하지 않습니다. 표준 vfio-pci 드라이버에 직접 바인딩할 수 있습니다.
  • ULL 네트워크 인터페이스 (nic1 및 nic2)만 DPDK 드라이버에 바인딩할 수 있습니다. 네트워크 연결을 유지하고 시간 동기화를 지원하려면 nic0이 표준 커널 드라이버에 바인딩된 상태로 유지되어야 합니다.

자세한 내용은 DPDK 문서의 커널 모듈에 네트워크 포트 바인딩 및 바인딩 해제를 참고하세요.

다음 단계

  • 인스턴스 시계를 호스트 서버의 실제 NIC 시계와 동기화하려면 정확한 시간 구성을 참고하세요.