고성능 패킷 처리를 위한 핵심 기술인 DPDK의 첫걸음, 즉 환경 설정과 빌드 시스템에 대한 심층 분석을 제공합니다. 이 글을 통해 DPDK 개발 환경을 구축하고, 다양한 빌드 옵션을 이해하여 자신에게 최적화된 개발 환경을 만들 수 있습니다.

개발 환경 설정 (Setting up the Development Environment)

DPDK 개발을 시작하기 위한 환경 설정은 다음과 같은 주요 단계를 포함합니다.

필수 소프트웨어 설치

DPDK를 빌드하고 실행하기 위해서는 기본적인 개발 도구들이 필요합니다.

  • 운영체제: Linux (Ubuntu, CentOS, Fedora 등) 환경을 권장합니다.
  • 컴파일러: GCC (GNU Compiler Collection) 최신 버전을 권장합니다.
  • 빌드 도구: Make, Meson (최신 DPDK 버전)
  • Python: 빌드 스크립트 및 유틸리티 실행에 필요합니다.
  • 개발 라이브러리: libnuma-dev, libpcap-dev, libxml2-dev, libssl-dev 등 (운영체제별로 다를 수 있습니다)
  • Hugepages 설정: DPDK는 대용량 메모리 할당 및 관리를 위해 Hugepages를 사용합니다. 시스템에 Hugepages를 설정해야 합니다.
# Hugepages 설정 예시 (2MB 페이지 1024개 할당)
sudo sysctl vm.nr_hugepages=1024
# 설정 확인
  cat /proc/meminfo | grep HugePages

DPDK 소스 코드 다운로드

DPDK 소스 코드는 공식 웹사이트 (https://www.dpdk.org/) 또는 GitHub (https://github.com/DPDK/dpdk)에서 다운로드할 수 있습니다. 안정적인 사용을 위해서는 릴리즈 버전을 다운로드하는 것을 권장합니다.

git clone https://github.com/DPDK/dpdk.git
cd dpdk
git checkout <원하는_버전> # 예: git checkout v23.09

DPDK 빌드 시스템 이해 (Understanding the DPDK Build System)

DPDK는 다양한 환경과 요구 사항을 지원하기 위해 여러 빌드 시스템을 제공합니다. 초기에는 Make 기반의 빌드 시스템을 사용했지만, 최신 버전에서는 Meson 빌드 시스템을 기본으로 채택하고 있습니다.

Make 기반 빌드 시스템 (Legacy)

과거 DPDK 버전에서 주로 사용된 Make 기반 빌드 시스템은 설정 파일(.config)을 통해 다양한 옵션을 설정하고 빌드를 수행합니다.

  • 설정: make config T=x86_64-native-linuxapp-gcc 와 같이 타겟 아키텍처 및 환경을 지정하여 설정 파일을 생성합니다.
  • 빌드: make -j<CPU 코어 수> 명령을 사용하여 빌드를 수행합니다.
  • 장점: 비교적 간단하고 익숙한 방식입니다.
  • 단점: 빌드 속도가 느리고, 의존성 관리가 복잡할 수 있습니다.

Meson 빌드 시스템 (Modern)

최신 DPDK 버전에서 권장하는 Meson은 더 빠르고 유연한 빌드 시스템입니다.

  • 설정: meson build 명령으로 빌드 디렉토리를 생성하고, meson configure -Doption=value 와 같이 다양한 빌드 옵션을 설정할 수 있습니다.
  • 빌드: ninja -C build 명령을 사용하여 빌드를 수행합니다. Ninja는 Meson과 함께 사용되는 고속 빌드 도구입니다.
  • 장점: 빠른 빌드 속도, 명확한 의존성 관리, 다양한 빌드 옵션 제공, 크로스 컴파일 지원이 용이합니다.
  • 단점: Make에 비해 상대적으로 새로운 시스템이라 익숙하지 않을 수 있습니다.

주요 빌드 옵션 (Key Build Options)

DPDK 빌드 시 설정할 수 있는 주요 옵션들은 다음과 같습니다.

  • --target / T: 타겟 아키텍처 및 환경을 지정합니다 (예: x86_64-native-linuxapp-gcc, arm64-dpaa2-linuxapp-arm64-gcc).
  • --enable-debug / CONFIG_RTE_BUILD_DEBUG: 디버깅 심볼을 포함한 빌드를 활성화합니다.
  • --enable-tests / CONFIG_RTE_BUILD_TESTS: 테스트 코드를 함께 빌드합니다.
  • --enable-drivers=... / CONFIG_RTE_DRIVERS: 특정 드라이버만 빌드하거나 제외할 수 있습니다.
  • --enable-bpf / CONFIG_RTE_LIBRTE_BPF: BPF (Berkeley Packet Filter) 지원을 활성화합니다.
  • --enable-cryptodev=... / CONFIG_RTE_LIBRTE_PMD_CRYPTO: 암호화 장치 드라이버를 활성화합니다.

Meson 빌드 시스템에서는 meson configure 명령과 meson_options.txt 파일을 통해 더 많은 옵션을 확인할 수 있습니다.

Make vs. Meson/Ninja: DPDK 빌드 시스템 비교

비교 항목 Make Meson/Ninja
빌드 속도 느림, 수동 병렬 처리 필요 (make -j) 매우 빠름, 기본적으로 병렬 빌드 수행 (ninja)
의존성 관리 수동 의존성 관리 필요, 재빌드 범위 과잉 발생 가능 자동 의존성 추적 및 효율적인 incremental build 지원
설정 파일 구조 단일 Makefile에 집중되어 있어 유지보수 어려움 meson.build 기반의 계층적 설정 구조, 가독성과 관리성 우수
설정 유연성 커스터마이징 가능하지만 복잡함 다양한 옵션을 meson configure로 직관적으로 조정 가능
크로스 컴파일 가능하지만 별도 환경설정과 추가 작업 필요 cross file을 통한 표준화된 방식 제공, 설정 간편
학습 곡선 낮음 (기존 GNU Make 사용자에 친숙함) 약간 높음 (Meson 문법과 설정 방식에 익숙해져야 함)
모듈성 / 유지보수성 낮음, 대형 프로젝트에서 구조적 한계 높음, 서브디렉토리별 설정 가능
플랫폼 지원 플랫폼 간 이식성 낮음 다양한 플랫폼 지원, 기본적으로 크로스 플랫폼 지향
최신 DPDK 호환성 점차 비공식화됨, DPDK 20.11 이후 deprecated DPDK의 공식 빌드 시스템으로 적극 지원
빌드 옵션 관리 매크로나 Makefile 직접 수정 필요 meson configure 명령으로 동적 설정 가능
도구 생태계 연동 기존 autotools와 호환성 있음 pkg-config, Python 스크립트와의 통합 우수

DPDK 빌드 시스템 이해하기

DPDK는 20.11 버전 이후부터 기존의 make 기반 시스템을 벗어나 Meson + Ninja 조합을 기본 빌드 시스템으로 채택했습니다. 이 시스템은 현대적인 C/C++ 프로젝트에 최적화된 빌드 환경을 제공하며, 설정의 명확성, 빠른 빌드 속도, 유지보수성 측면에서 기존 시스템을 능가합니다.

✅ 기본 빌드 흐름

# 1. Meson으로 빌드 디렉토리 초기화
meson setup build

# 2. 해당 디렉토리로 이동
cd build

# 3. Ninja를 이용한 실제 빌드 수행
ninja

🔍 설정 확인 및 수정

Meson은 configure 명령을 통해 현재 설정 상태를 확인하고 수정할 수 있습니다.

meson configure

 

출력 예시:

buildtype      : debugoptimized
platform       : native
examples       : true

필요시 meson configure -D<옵션>=<값> 형식으로 실시간 설정 변경이 가능합니다.

⚙️ 빌드 설정 최적화 팁

DPDK는 매우 유연한 설정을 지원하므로, 환경에 맞는 빌드 최적화가 가능합니다. 빌드 성능, 실행 최적화, 디버깅 편의성을 고려하여 아래와 같은 설정을 조합할 수 있습니다.

1. buildtype 설정

-Dbuildtype=release        # 성능 최적화용 (기본)
-Dbuildtype=debug          # 디버깅 전용 빌드
-Dbuildtype=debugoptimized # 디버깅 + 최적화 병행 (추천)

2. 예제 코드 포함 여부

-Dexamples=true   # 예제 코드 빌드 포함
-Dexamples=false  # 예제 코드 제외 (빌드 시간 단축)

3. 특정 라이브러리 활성/비활성

예: pcap 라이브러리 사용 여부

-Dpcap=true  # libpcap 지원 활성화

4. CPU 최적화 (native)

현재 시스템의 CPU 아키텍처에 맞춰 자동 최적화 빌드:

meson setup build -Dplatform=native


또는 커스텀 native.txt 파일 사용:

# native.txt
[built-in options]
c_args = ['-march=native']
c_link_args = ['-march=native']
meson setup build --native-file native.txt

5. 빌드 캐시 삭제 후 재설정 (클린 빌드)

rm -rf build
meson setup build

첫 번째 DPDK 애플리케이션 빌드 및 실행 (Building and Running Your First DPDK Application)

DPDK 빌드가 성공적으로 완료되면, 예제 애플리케이션을 통해 DPDK의 동작 방식을 확인할 수 있습니다. examples 폴더에는 다양한 예제 코드가 제공됩니다.

cd examples/l2fwd
# Make 기반 빌드시
sudo make -j$(nproc)

# Meson 기반 빌드시 (빌드 디렉토리 내에서)
sudo ninja l2fwd

# 애플리케이션 실행 (Hugepages 설정 및 네트워크 인터페이스 확인 필요)
sudo ./build/l2fwd -p 0x1 -n 1 -- -p 1 -q 1

위 명령어는 간단한 Layer-2 Forwarding (L2Fwd) 예제를 실행하는 것으로, -p 옵션으로 사용할 네트워크 포트의 비트마스크를 지정하고, -n 옵션으로 사용할 메모리 채널 수를 지정합니다. -- 이후의 옵션은 애플리케이션 자체에 전달되는 인자입니다.

'한글화자료 [Translation] > DPDK' 카테고리의 다른 글

DPDK Source Tree 정리  (0) 2025.05.02
DPDK (Data Plane Development Kit) 란 ?  (0) 2019.07.05

DPDK 소스 코드는 성능 테스트 앱, 빌드/개발 도구, 플랫폼 설정, 문서, 다양한 장치 드라이버, 자동화 테스트, 기능별 예제, 커널/사용자 모드 드라이버, 핵심 라이브러리, 라이선스, 유틸리티 등을 포함합니다. 
고성능 패킷 처리를 위한 모든 것을 담고 있어요!

📁 DPDK 25.03 소스 트리 구조 분석

📁 dpdk/
├── 📁 app/                # 테스트 및 성능 확인용 주요 애플리케이션 (예: testpmd)
├── 📁 buildtools/         # 빌드 지원 스크립트 (pkg-config 생성 등 도구 제공)
├── 📁 config/             # 플랫폼 및 타겟별 컴파일 설정 정의
├── 📁 devtools/           # 코드 스타일 검사, 자동 린트, 릴리스 도구 등 개발 보조 스크립트
├── 📁 doc/                # HTML/PDF 문서 생성용 소스와 스크립트 포함
├── 📁 drivers/            # 하드웨어/소프트웨어 드라이버 (PMD) 모음, 종류별 서브디렉터리 존재
├── 📁 dts/                # Python 기반 자동화 테스트 프레임워크 (TestSuite, framework 등 포함)
├── 📁 examples/           # 다양한 기능의 최소 예제 코드 (문서와 연계됨)
├── 📁 kernel/             # Linux 커널용 드라이버 (kni, igb_uio 등 포함)
├── 📁 lib/                # DPDK의 핵심 기능을 구성하는 라이브러리 모음 (eal, ethdev 등)
├── 📁 license/            # SPDX 및 라이선스 검증 도구와 정보
├── 📁 usertools/          # hugepage 설정, NIC 바인딩 등 유저 모드 유틸리티 스크립트
├── 📄 ABI_VERSION         # 현재 ABI 버전 문자열 정의
├── 📄 MAINTAINERS         # 각 서브시스템의 유지관리자 정보
├── 📄 Makefile            # Meson 빌드 시스템에 대한 wrapper 역할
├── 📄 README              # DPDK 프로젝트 개요 및 빌드 안내
├── 📄 VERSION             # 현재 릴리스 버전 문자열 (예: 25.03.0)
├── 📄 meson.build         # Meson 빌드 시스템 루트 설정 파일
└── 📄 meson_options.txt   # Meson 빌드 옵션 정의 (예: 드라이버 on/off)

 DPDK 폴더별 요약

- `app/`: 성능 측정이나 기능 확인용 주요 애플리케이션을 포함합니다.    
- `buildtools/`: 빌드 환경 구성을 돕는 보조 스크립트 모음입니다.    
- `config/`: 다양한 플랫폼과 타겟을 위한 컴파일 설정을 제공합니다.    
- `devtools/`: 코드 검사, 릴리스 준비 등 개발 보조 도구가 들어 있습니다.    
- `doc/`: 문서 빌드를 위한 소스와 설정을 포함합니다.    
- `drivers/`: 네트워크, 암호화 등 다양한 장치 드라이버(PMD)가 모여 있습니다.    
- `dts/`: Python 기반의 자동화 테스트 스위트가 포함된 테스트 프레임워크입니다.    
- `examples/`: 각 기능을 보여주는 최소 구성의 예제 코드가 들어 있습니다.    
- `kernel/`: 커널 모드에서 사용되는 드라이버 모듈(예: `igb_uio`, `kni`)이 포함됩니다.    
- `lib/`: DPDK의 핵심 기능을 제공하는 라이브러리 모듈들이 포함되어 있습니다.    
- `license/`: 라이선스 검증 및 SPDX 관련 도구와 정보가 들어 있습니다.    
- `usertools/`: hugepage 설정, 디바이스 바인딩 등 사용자 유틸리티 스크립트를 제공합니다.

 

 

출처 : https://developer.cisco.com/site/trex/discover/overview/


TRex

Traffic generator

TRex DPDK에 의해 힘입어 오픈 소스, 저비용, 상태 저장(stateful) 및 상태 비저장(stateless) 트래픽 생성기입니다.
Stateful 모드에서는 사전 처리(pre-processing)를 기반으로 클라이언트 및 서버 측 L4-7 트래픽을 생성합거나 실제 트래픽 템플릿의 스마트 재생을 합니다.
Stateless 모드에서는 라인 속도로 여러 스트림을 생성 할 수 있고, 스트림 당 또는 인터페이스 당 통계를 계산할 수 있습니다.

Stateful

·         Intel DPDK 1/10/40Gbps interface support
·         High scale of realistic traffic, up to 200Gb/sec with one Cisco UCS
           ( 1개의 Cisco UCS 최대 200Gb/sec, 높은 수준의 현실적인 traffic  생성 )
·         Latency/Jitter measurements
·         Flow ordering checks
·         NAT, PAT dynamic translation learning
·         Python automation API

 

Stateless

·         High scale - line rate 14MPPS per core, linear scale with number of cores
          (
높은 스케일 - 코어 14MPPS, 코어 수가linear scale )
·         Support 1/10/40 Gb/sec interfaces
·         인터페이스에 다중 트래픽 프로파일을 설정해서 사용할 수 있습니다.
·         트래픽 프로필은 다중 스트림을 지원할 수 있습니다. 병렬로 10K 스트림으로 확장
·         각각의 스트림
         o Packet 템플릿 - Scapy 사용하여 모든 패킷을 빌드하는 가능 (e.g. MPLS/IPv4/Ipv6/GRE/VXLAN/NSH)
            - 조작된 패킷(malformed packets) 생성이 가능합니다.
         o Field engine program
            - 패킷내에 모든 필드를 변경할 수 있습니다. 예를들어, src_ip = 10.0.0.1-10.0.0.255
            -
 패킷 사이즈를 변경할 수 있습니다. (e.g. Random packet size 64-9K)
         o Mode - Continuous/Burst/Multi burst support
         o Rate can be specified in (pps/bps/percentage)
         
Support HLTAPI like profile definition
         
Action- stream can trigger a stream      
·         Interactive support- Fast Console, GUI
·         Statistic per interface/per stream\
·         Latency and Jitter per stream
·         Blazing fast Automation support
·         Python Client API
·          Multi user support







DPDK(Data Plane Development Kit) 소개

DPDK는 다양한 CPU 아키텍처에서 실행되는 패킷 처리 작업을 가속화하는 라이브러리로 구성된 데이터 플레인 개발 키트(Data Plane Development Kit)입니다.
사람들이 통신하는 방식에 네트워크가 기본이 되는 세계에서 무선 코어 및 액세스, 유선 인프라, 라우터, 로드 밸런서, 방화벽, 비디오 스트리밍, VoIP 등과 같은 애플리케이션에 성능, 처리량 및 대기 시간이 점점 더 중요 해지고 있습니다.
DPDK는 매우 빠른 패킷 처리를 가능하게 함으로써 통신 업계가 모바일 네트워크 용 백본 및 클라우드로에서 음성 처리와 같은 성능에 민감한 응용 프로그램을 이동할 수 있게합니다.
또한 원래 ETSI NFV White Paper 에서 NFV (Network Functions Virtualization)를 위한 핵심 기술을 가능케 하는 것으로 확인되었습니다.

DPDK의 역사

DPDK 2010 년에 Intel에서 제작되었으며 허용 된 오픈 소스 라이선스에 따라 사용할 수 있습니다.
오픈 소스 커뮤니티는 2013 6WIND에 의해 DPDK.org에 설립되었으며 프로젝트의 지속적인 확장을 촉진했습니다.
그 이후로 커뮤니티는 기여자들, 패치 그리고 기여 조직에 관심으로 지속적으로 성장해 왔으며 5 개 주요 릴리스는 25 개 서로 다른 조직의 160 명 이상이 인원이 참여하여 완성되었습니다.
DPDK는 이제 여러 공급 업체의 모든 주요 CPU 아키텍처와 NIC를 지원하므로 여러 플랫폼에서 사용이 가능한 응용 프로그램에 이상적입니다.

특징 

DPDK는 빠른 패킷 처리를위한 일련의 라이브러리 및 드라이버입니다.
DPDK는 다양한 CPU 아키텍처에서 실행되는 패킷 처리 작업을 가속화하는 라이브러리로 구성된 데이터 플레인 개발 키트입니다.

  • 모든 프로세서에서 실행되도록 설계됨

  • 대부분 Linux 사용자 환경에서 실행됨

  • DPDK 오픈 소스 BSD 라이센스가 부여된 프로젝트

Architecture

 

안정화 릴리즈( Stable Release)

안정화 릴리스의 지침을 설명하는 문서 페이지가 따로 있습니다안정적 포인트 릴리즈는 메인라인 릴리즈에 따른다.
-rc 태그 후와 최종 버전 후에, 관련 버그 수정은 안정적 유지관리자에 의해 "버스트"에서 각각의 분기점으로 되돌아간다.
개발자는 stable@dpdk.org에만 패치를 보내 특정 패치를 제공할 수 있다( dev@dpdk.org는 피함).
관련 버그 수정이 모두 분기점으로 되돌간 후 회귀 테스트가 실행되고 명확한 경우 안정화 릴리스가 발표됩니다.
일반적으로 새로운 안정화 버전은 테스트 결과에 따라 메인라인 릴리즈  1-2 주 정도 후 발표됩니다.

스케쥴

19.08 

  • Proposal deadline: June 3, 2019
    Integration deadline: July 1, 2019
    Release: August 1, 2019

19.11 

  • Proposal deadline: September 6, 2019
    Integration deadline: October 11, 2019
    Release: November 8, 2019

출처 : DPDK 공식 홈페이지 내용 https://www.dpdk.org/

 

Home - DPDK

DPDK China · June 24th, 2019 Shanghai, China Attend DPDK China, co-located with Kubecon+CloudNativeCon+Open Source Summit, June 24th, 2019. Let’s discuss the present and future, including DPDK roadmap suggestions, container networking, P4, hardware acceler

www.dpdk.org

 

제품소개

Napatech Link SmartNIC Hardware
for Reconfigurable Computing

가변형 컴퓨팅의 세계에선 기능의 용도를 결정하는 것은 소프트웨어이다. 하지만 잘 못된 하드웨어의 선택은 솔루션의 전반적인 이윤과 신뢰성에 심각한 제한을 초래할 수 있다.
나파텍의 Link SmartNIC은 모든 최신 서버들의 기준과 데이터센터들의 급속한 변화, 방향에 부합하도록 개발되었다.

마음의 안정

하드웨어 솔루션을 선택할 때 모두가 염두하는 것은 신뢰성에 대한 의문이다. 소프트웨어는 잘 못될 경우 패치가 될 수 있지만 하드웨어는 교체가 필요하다. 교체는 바로 즉시 되어야 한다.

나파텍이 하드웨어를 만들 때, 신뢰성이 모든 것들 중 가장 먼저이다. 고객들은 어떤 경우에도 걱정없이 도움을 받을 수 있는 솔루션을 필요로 한다. 우리의 오랜 고객들은 이런 점에 대한 믿음을 확신한다.

평점심 유지

FPGA 기술의 힘은 당신이 힘을 사용할 수 있을 경우에만 가능합니다. 그리고, 냉각이 필요합니다.
간단히 말하면; 냉각을 잘하면 잘할수록 더 많은 힘이 발휘될 수 있고 당신의 Link SmartNIC에서 더 많은 기능을 실행할 수 있습니다. 이것은 좋은 냉각 솔루션으로 서버 랙 공간에서 더 많은 처리능력을 가질 수 있기 떄문에 실제 경제적 이익으로 변환될 수 있습니다. 

Napatech는 SmartNIC를 능동 및 수동 냉각 방식 두가지 모두로 디자인되었습니다.
자체적인 냉각 솔루션은 특정 서버 공기 흐름에 대한 요구 사항 없이 자체 냉각 솔루션만으로 100% 냉각을 제공합니다.
이 솔루션은 전면 플레이트 컷 아웃 (front plate cutouts)을 통해 서버 외부에서 대부분의 비산 에너지가 소모됩니다.
이 의미는, 고객들이 서버 디자인을 고를 때 냉각 능력을 걱정으로부터 자유를 가질 수 있다는 것이다.
통신 요구사항을 충족하기 위해 수동 냉각 솔루션인 NEBS를 충족하고 있습니다.

진동에 좋음

최신 서버들에는 Quick Release PCI 고정 매커니즘이 있어서 나파텍의 Link SmartNIC을 쉽게 교체할 수 있습니다.
불행하게도 이러한 디자인 중 일부는 교체 중에 PCI 카드가 슬롯의 진동에 노출되도록 되어 있습니다.
이런 환경에서 하드웨어가 살아남을 수도록 하기 위해 나파텍 하드웨어는 최고 수준의 기준을 충족하도록 설계되었습니다.

우수성의 기준

현대 서버의 내/외부를 이해하는 것은 표준에서 시작할 수 있지만 특정 폼 팩터 또는 가격대에 맞게 구현 된 타협과 예외의 어려운 현실을 계속적으로 발생하고 있습니다.
SmartNIC 하드웨어가 기존 산업 표준에 더 부합 될수록 고객이 솔루션을 통합하는 것이 더 쉬워질 것이다.
Napatech은 고객이 하드웨어에 대해서 걱정할 필요가 없이 소프트웨어 솔루션에 집중할 수 있도록 Napatech의 노력에 대한 결과로 PCI-SIG 통합 업체 목록에 있습니다.

미래와의 연결

나파텍은 Link 하드웨어는 아래의 Use Case들에 적용할 수 있는 모든 종류의 FPGA 소프트웨어 옵션을 제공합니다.

Network Security 
Network Quality of Experience Assurance 
Network & Security Forensics 
Application Performance Management (APM) 
Network Test & Measurement 
Cyber Defense 
vSwitch Acceleration 
Virtual Network Monitoring

Napatech Link SmartNIC 제품들

 



+ Recent posts