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 경계를 명확히 유지합니다.

단계별 이해

  1. 경로 고정
    문제가 발생한 ingress/egress 지점을 먼저 특정합니다.
  2. 큐 관찰
    백로그와 드롭 위치를 계측합니다.
  3. 정책 반영 확인
    라우팅(Routing)/필터 변경이 데이터 경로에 반영됐는지 봅니다.
  4. 부하 검증
    실제 트래픽 패턴에서 재현성을 확인합니다.
관련 표준: 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 실행 흐름 BPF 프로그램 (C → clang → .o) BPF Verifier (안전성 검증) JIT Compiler (네이티브 코드) 커널 내 실행 (hook point) eBPF Hook Points: XDP TC (Traffic) kprobe/kretprobe tracepoint cgroup LSM BPF Maps (커널↔유저 공유 데이터): Hash, Array, LRU, Ring Buffer, Per-CPU, Stack, Queue ...
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)커널 통합
iptablesNetfilter (L3/L4)~2M~50us완전
TC BPFTC ingress/egress~6M~15us완전
XDP (Native)드라이버 NAPI~24M~5us완전
AF_XDP드라이버 + 유저~20M~3us부분
DPDK유저스페이스 PMD~30M~2us없음

참고자료

커널 공식 문서

BPF/XDP와 관련된 다른 주제를 더 깊이 이해하고 싶다면 다음 문서를 참고하세요.