BPF/eBPF/XDP (BPF and XDP)
Linux BPF/eBPF/XDP를 실무 관점에서 심층 다룹니다. verifier 제약과 BTF·CO-RE 기반 이식성, map 설계 패턴, redirect/tail call, XDP_DROP/PASS/TX/REDIRECT 동작 경로, bpftool·tracepoint 기반 관측, 고 PPS 환경에서의 병목(Bottleneck) 분석과 디버깅(Debugging) 절차까지 단계적으로 정리합니다.
전제 조건: 네트워크 스택(Network Stack)과 네트워크 디바이스 드라이버 문서를 먼저 읽으세요.
고성능 패킷(Packet) 경로는 큐 구조, 메모리 배치, 드롭 위치가 성능을 좌우하므로 드라이버 경계를 먼저 이해하는 것이 중요합니다.
일상 비유: 이 주제는 고속 톨게이트 차선 분리와 비슷합니다.
일반 차선(커널 스택)과 하이패스 차선(XDP/DPDK)을 구분해 보면 왜 지연(Latency)과 처리량(Throughput)이 달라지는지 명확해집니다.
핵심 요약
- 패킷 수명주기 — ingress, 처리, egress 경로를 연결합니다.
- 큐/버퍼(Buffer) 모델 — sk_buff와 큐 지점의 역할을 분리합니다.
- 정책/데이터 분리 — 제어 평면과 데이터 평면을 구분합니다.
- 성능 지표 — PPS, 지연, 드롭 원인을 함께 분석합니다.
- 오프로딩(Offloading) 경계 — NIC/XDP/DPDK 경계를 명확히 유지합니다.
단계별 이해
- 경로 고정
문제가 발생한 ingress/egress 지점을 먼저 특정합니다. - 큐 관찰
백로그와 드롭 위치를 계측합니다. - 정책 반영 확인
라우팅(Routing)/필터 변경이 데이터 경로에 반영됐는지 봅니다. - 부하 검증
실제 트래픽 패턴에서 재현성을 확인합니다.
관련 표준: IEEE 802.3 (Ethernet), RFC 791 (IPv4), RFC 8200 (IPv6) — XDP는 NIC 드라이버 레벨에서 이 표준 프레임/패킷을 직접 처리합니다.
종합 목록은 참고자료 — 표준 & 규격 섹션을 참고하세요.
세부 문서 안내
BPF/eBPF/XDP 문서는 주제별로 2개의 세부 문서로 나뉘어 있습니다. 각 문서에서 해당 영역을 심층적으로 다룹니다.
| 문서 | 주요 내용 | 핵심 키워드 |
|---|---|---|
| eBPF 프레임워크 | eBPF 실행 흐름, BPF Verifier 상세(상태 추적·pruning), BPF 맵 타입별 비교, CO-RE/BTF 이식성, libbpf 스켈레톤 API, BPF ISA(명령어 집합), 프로그램 타입과 헬퍼 함수, 개발 도구(bpftool/bpftrace/bcc), 테일 콜과 서브프로그램, struct_ops, BPF 토큰 보안 모델, 보안 취약점 사례, 성능 최적화, L4 로드밸런서 구현 | eBPF, Verifier, CO-RE, BTF, libbpf, BPF ISA, tail call, struct_ops, bpftool |
| XDP (Express Data Path) | XDP 패킷 처리 경로, Generic/Native/Offload 모드 비교, XDP Actions, XDP_REDIRECT(devmap·cpumap·AF_XDP), SmartNIC 오프로드, 멀티버퍼와 메타데이터, DDoS 방어 실전 구현, TC BPF 트래픽 셰이핑, ftrace/bpftrace 성능 분석, 패킷 솔루션 벤치마크, 튜닝 가이드 | XDP, XDP_DROP, XDP_REDIRECT, devmap, cpumap, AF_XDP, SmartNIC, DDoS, 성능 튜닝 |
BPF/eBPF 개요
eBPF(extended Berkeley Packet Filter)는 커널 내에서 안전하게 실행되는 프로그래밍 프레임워크입니다. 커널을 재컴파일하지 않고 네트워킹, 보안, 추적, 성능 분석 등의 기능을 확장할 수 있습니다.
eBPF: 사용자 작성 프로그램이 검증 후 커널 내에서 안전하게 실행
eBPF의 핵심 구성 요소와 각 세부 문서에서의 위치를 정리하면 다음과 같습니다.
| 구성 요소 | 역할 | 상세 문서 |
|---|---|---|
| BPF Verifier | 프로그램 안전성 정적 분석, 상태 추적, 가지치기(pruning) | eBPF 프레임워크 — Verifier |
| BPF Maps | 커널↔유저스페이스 데이터 공유 (Hash, Array, LRU, Ring Buffer 등) | eBPF 프레임워크 — BPF Maps |
| CO-RE / BTF | 커널 버전 간 이식성 보장 (Compile Once, Run Everywhere) | eBPF 프레임워크 — CO-RE |
| libbpf | BPF 프로그램 로드·어태치 관리, 스켈레톤 API | eBPF 프레임워크 — libbpf |
| XDP | NIC 드라이버 레벨 고성능 패킷 처리 | XDP — 개요 |
| XDP Redirect | devmap/cpumap/AF_XDP를 통한 패킷 전달 | XDP — Redirect |
| SmartNIC | XDP 하드웨어 오프로드, DPU 연동 | XDP — SmartNIC |
| TC BPF | sk_buff 기반 패킷 분류·수정·폴리싱 | eBPF 프레임워크 — TC BPF |
| bpftool / bpftrace | BPF 프로그램 관리, 고수준 트레이싱 | eBPF 프레임워크 — 개발 도구 |
주요 사용 사례
eBPF와 XDP는 다양한 분야에서 활용됩니다. 각 사용 사례의 상세 구현은 해당 세부 문서를 참고하세요.
| 사용 사례 | 기술 | 성능 | 상세 문서 |
|---|---|---|---|
| DDoS 방어 | XDP_DROP + LPM_TRIE 블랙리스트 | ~24 Mpps (단일 코어) | XDP — DDoS 방어 |
| L4 로드밸런서 | XDP_REDIRECT + Maglev 해싱 | ~14 Mpps (포워딩) | eBPF — L4 로드밸런서 |
| 커널 트레이싱 | kprobe/fentry + Ring Buffer | 나노초 단위 오버헤드 | eBPF — kprobe/tracepoint |
| 네트워크 모니터링 | TC BPF + PERCPU 맵 | 플로우별 통계 수집 | eBPF — 네트워크 모니터링 |
| 트래픽 셰이핑 | TC BPF + Token Bucket | IP별 속도 제한 | XDP — TC 셰이핑 |
| TCP 혼잡 제어 | struct_ops + tcp_congestion_ops | 커널 ops 교체 | eBPF — struct_ops |
| 동적 보안 정책 | LSM BPF hook | 런타임 정책 변경 | eBPF — 프로그램 타입 |
패킷 처리 성능 비교 요약
고성능 패킷 처리에서 각 솔루션의 성능 특성을 요약합니다. 상세 벤치마크와 튜닝 가이드는 XDP — 성능 비교와 튜닝 가이드를 참고하세요.
| 솔루션 | 실행 계층 | 64B Drop PPS | 지연 (p99) | 커널 통합 |
|---|---|---|---|---|
| iptables | Netfilter (L3/L4) | ~2M | ~50us | 완전 |
| TC BPF | TC ingress/egress | ~6M | ~15us | 완전 |
| XDP (Native) | 드라이버 NAPI | ~24M | ~5us | 완전 |
| AF_XDP | 드라이버 + 유저 | ~20M | ~3us | 부분 |
| DPDK | 유저스페이스 PMD | ~30M | ~2us | 없음 |
참고자료
커널 공식 문서
- BPF Documentation Hub — 커널 BPF 문서 최상위
- AF_XDP Documentation — AF_XDP 공식 문서
- ebpf.io — eBPF Foundation 공식 포털
- Cilium BPF & XDP Reference Guide — 아키텍처/opcode/맵 상세 설명
관련 문서
BPF/XDP와 관련된 다른 주제를 더 깊이 이해하고 싶다면 다음 문서를 참고하세요.