1. XDP (eXpress Data Path)의 개념 및 특징
개념 | 특징 |
---|---|
고속 데이터 전송을 위해 리눅스 커널 내 eBPF Hook 기반 OS 네트워크 스택을 우회, 전송하는 데이터 송수신 기술 | – 리눅스 커널 내 이벤트는 사용자 정의 함수 기반 샌드박스 환경 동작 – 커널 코드 수정 없이 프로그램을 운영체제 커널 공간에서 실행 |
- XDP는 eBPF Hook의 한 종류로 패킷을 고속으로 처리하기 위해 iptables의 패킷 처리 기능을 네트워크 드라이버 수준에서 사용할 수 있도록 커널에서 명령어 제공
2. XDP의 구성도 및 동작 과정
(1) XDP의 구성도
(2) XDP 프로그램 구성 요소
구성 요소 | 역할 |
---|---|
XDP driver hook | XDP의 주요 인입 구간이며, H/W에서 패킷 도착 시 실행 |
eBPF virtual machine | XDP 프로그램의 byte code 실행, 성능 향상 위해 just-in-time-compile 형태로 동작 |
BPF maps | 다른 시스템과 정보 교환을 위한 Key-Value 저장 |
eBPF verifier | 프로그램 로드 전 커널 내 문제 발생 영향도 분석 |
- 패킷이 시스템에 도착하면 device driver에서 eBPF 프로그램이 패킷 Drop, Redirect, Forwarding 등 결정
3. XDP의 동작 과정 및 프로그램 리턴 코드
(1) XDP의 동작 과정
① 패킷이 도착하면 프로그램은 패킷 헤더를 구문 분석하여 반응 정보 추출 ② 여러 소스 중 하나에서 메타데이터를 읽거나 업데이트 ③ 패킷이 재생성 될 수 있고 패킷 제어 방식 최종 결정 (프로그램은 패킷 구문 분석, 메타데이터 조회/재생성을 번갈아 수행 가능) ④ 패킷 제어 방식 최종 결정 후 결과는 프로그램 반환 코드 형태로 제공 |
(2) XDP 프로그램 리턴 코드
구분 | 핵심 기능 | 세부 동작 |
---|---|---|
Packet Drop | XDP_ABORTED | 패킷을 버리고 xdp_exception 발생 |
XDP_DROP | 패킷을 버림 | |
Packet Forwarding | XDP_PASS | 패킷을 커널로 보냄 |
XDP_TX | 패킷을 수신된 인터페이스로 재전송 | |
XDP_REDIRECT | 패킷을 다른 인터페이스로 전달 |
- XDP는 Intel의 DPDK(Data Plane Development Kit)와 비교하여 성능이 낮고 일부 메모리 접근 제한 등 한계점이 있지만 다양한 네트워크 벤더의 H/W 사용 가능하며, Linux Kernel에서 꾸준히 개선되고 있고 안정적인 프로그램 인터페이스 제공 가능
4. XDP의 한계점 및 대응 방안
한계점 | 대응 방안 |
---|---|
Loop 및 최대 프로그램 크기, 일부 메모리 접근 제한 | 커널 안정성 보장을 위한 제약사항이며, eBPF verifier 효율 개선 |
메모리 할당, Lock 등 표준 라이브러리 부재 | 커널의 help function, execution context management로 완화 |
Network Interface 별 하나의 XDP 프로그램만 사용 가능 | 패킷 내용 확인 후 실행할 XDP 프로그램 결정 등 협업으로 해결 |
- XDP는 Intel의 DPDK 등 다른 고성능 패킷 처리 시스템과 비교하여 조금 부족한 성능을 보이지만 Kernel Security 활용, 호환성, Kernel 기능 취사 선택, 안정적인 인터페이스 제공 등 여러 장점이 있고, 특수 하드웨어가 필요하지 않아 다양한 환경에서 사용 가능
[참고]
- ACM CoNEXT 2018, The eXpress Data Path: Fast Programmable Packet Processing in the Operating System Kernel
- MONITORAPP, XDP를 활용한 네트워크 패킷 처리