애플리케이션이 받는 객체부터 비교합니다
Linux socket은 커널이 처리한 TCP byte stream이나 UDP datagram을 전달합니다. XDP는 이른 수신 지점의 BPF 처리이며, AF_XDP와 DPDK는 앱이 직접 다루는 프레임·패킷의 책임을 넓힙니다. 속도 이름만 보고 경로를 고르지 않습니다.
NIC DMA·NAPI·socket과 socket 객체의 수명은 기본 경로를 설명합니다. 여기서는 어느 경계를 바꾸며 무엇을 직접 책임질지 비교합니다.
AF_XDP의 UMEM은 버퍼 소유권을 교환합니다
Linux AF_XDP 문서에서 XSK는 장치의 특정 queue ID에 bind됩니다. XDP 프로그램은 XSKMAP을 통해 프레임을 redirect합니다. AF_XDP라는 이름이나 XDP_DRV 모드만으로 zero-copy가 보장되지 않습니다. 드라이버 지원, 실제 bind 모드와 copy/zero-copy 결과를 확인해야 합니다.
- FILL ring: 앱이 수신에 쓸 UMEM 프레임 주소를 커널에 제공합니다.
- RX ring: 수신 데이터가 들어 있는 프레임을 앱에 전달합니다.
- TX ring: 앱이 전송할 프레임을 제출합니다.
- COMPLETION ring: 커널 처리가 끝난 TX 프레임을 앱이 재사용할 수 있게 합니다. 소유권 반환이 상대에게 성공적으로 전달됐다는 확인은 아닙니다.
단일 생산자·소비자 ring을 여러 스레드가 임의로 함께 갱신하지 않습니다. 같은 프레임을 아직 사용 중인 두 경로에 동시에 제공하지 않도록 수명과 소유권을 관리합니다.
io_uring zero-copy RX는 payload 복사를 줄여도 TCP header를 커널 스택이 처리하는 구성입니다. io_uring을 사용했다고 해서 커널을 우회한 것은 아닙니다. XDP_PASS도 뒤쪽 커널 스택의 일을 없애지 않습니다.
DPDK는 패킷 처리와 자원 배치를 앱 쪽으로 옮깁니다
DPDK PMD·ethdev 문서는 RX/TX descriptor polling, burst 처리, 코어별 큐와 NUMA-local 메모리 배치를 설명합니다. PMD가 반환한 mbuf가 기존 커널 TCP socket에 자동으로 이어지는 것은 아닙니다. 프로토콜 처리·제어 평면·앱 backpressure를 어떤 구성 요소가 맡는지 정해야 합니다.
인터럽트·호출 비용을 줄일 여지가 있어도 코어 점유, 전력, 메모리 대역폭과 큐 분산 비용은 남습니다. Checksum 등 지원되는 offload를 사용할 수도 있으므로 모든 처리를 반드시 CPU 소프트웨어로 수행한다는 뜻은 아닙니다.
원 게시물의 “40Gbps 이상”, “결정적 지연”, “선형 확장”, “메시징에 절대 사용하지 않음”은 보편 선택 규칙으로 채택하지 않습니다. DPDK 문서도 장치 의존성을 전제로 여러 속도를 다룹니다. 작은 패킷의 pps, RSS 분포, 큐 수, cache·NUMA와 앱 작업이 실제 한계를 바꿉니다.
RDMA는 이 표의 더 빠른 다음 단계가 아닙니다. 등록 메모리와 queue pair를 사용하는 별도 통신 모델이며, 임의 Ethernet 패킷을 분류·수정하는 요구와 먼저 구분합니다. SR-IOV·SmartNIC에서도 VF나 representor가 있다고 해서 NAT offload나 steering 규칙이 보장되는 것은 아닙니다.
같은 부하에서 비용과 손실을 같이 봅니다
NIC·펌웨어·드라이버, 링크 속도, 패킷 크기·흐름 수·offered load, RX/TX 큐, 코어·NUMA 배치를 기록합니다. 달성 bps·pps와 drop, p50/p99/p99.9, 사용 코어·CPU 시간·전력을 함께 비교합니다. AF_XDP의 실제 copy 모드와 DPDK offload 설정도 같은 조건이어야 합니다.
- RX ring 고갈
- 버퍼 공급, 큐 크기와 처리 코어 배치를 확인합니다.
- 커널 수신은 정상인데 앱 지연 증가
- socket buffer, wake-up, parsing·queueing과 backpressure를 분리합니다.
- 코어 추가 효과가 작음
- RSS·flow steering, 한 큐·락 병목과 메모리·PCIe 한계를 확인합니다.
이 글은 Pallav Singh의 경로 비교 소개에서 출발한 독립 설명입니다. 원문 이미지를 복제하지 않았고 NIC 설정·드라이버 교체·DPDK 실행·성능 측정은 하지 않았습니다. 특정 장비의 성능 보증이 아닙니다.