BPF/eBPF/XDP (BPF and XDP)

BPF/eBPF/XDP 주제 영역의 허브 문서입니다. 목적별 문서 선택 가이드, 주요 사용 사례 요약, 솔루션 성능 비교, 커널 버전별 최신 변경사항을 정리하고 각 심층 문서(eBPF 프레임워크, XDP, AF_XDP)로 연결합니다.

이 페이지(Page)의 역할: 개념 설명은 하지 않습니다. 목적에 맞는 문서로 빠르게 안내합니다. eBPF 자체를 처음 공부한다면 eBPF 프레임워크를, 고속 패킷 처리를 구현하려면 XDP를 바로 펼치세요. 아래 목적별 빠른 선택 표를 보면 바로 방향을 잡을 수 있습니다.

한 눈에 보는 관계도

  • eBPF — 커널 내 안전 실행 프레임워크. Verifier·JIT·Maps·Hook이 핵심 → eBPF 프레임워크
  • XDP — eBPF의 네트워크 hook. NIC 드라이버 레벨에서 패킷(Packet)을 처리해 최고 성능 달성 → XDP
  • TC BPF — sk_buff 레벨에서 동작, egress 포함 양방향 제어 가능 → TC BPF
  • AF_XDP — XDP_REDIRECT 대상. 유저스페이스 제로 카피(Zero-Copy) 수신 → AF_XDP
  • sched_ext — eBPF로 CPU 스케줄러(Scheduler)를 교체. 네트워크 외 영역 확장의 대표 사례 → struct_ops
패킷 수신 경로와 eBPF Hook 위치 패킷 수신 흐름 NIC (물리 인터페이스) 하드웨어 수신 버퍼 XDP Hook (xdp_buff) ~24 Mpps (Native) · ~5 Mpps (Generic) XDP_PASS XDP_REDIRECT AF_XDP Socket Zero-Copy 유저앱 수신 유저앱 직접 수신 NAPI poll → sk_buff 생성 커널 네트워크 스택 진입 TC BPF ingress hook ~6 Mpps · egress 포함 양방향 IP 라우팅 / Netfilter ~2 Mpps · 풍부한 기능 socket BPF / cgroup BPF 소켓 레벨 정책 · 모니터링 커널 (Kernel) 유저스페이스 (Userspace) 애플리케이션 (Userspace) 수신 완료 드라이버 레벨 TC 레벨 소켓 레벨
패킷이 NIC에서 애플리케이션까지 도달하는 경로. 위로 갈수록 처리 속도가 빠르고, 아래로 갈수록 기능이 풍부합니다.
관련 표준: IEEE 802.3 (Ethernet), RFC 791 (IPv4), RFC 8200 (IPv6) — XDP는 NIC 드라이버 레벨에서 이 표준 프레임/패킷을 직접 처리합니다. 종합 목록은 참고자료 — 표준 & 규격 섹션을 참고하세요.

문서 구성과 선택 가이드

BPF/eBPF/XDP는 주제 범위가 넓어 두 개의 심층 문서로 나뉩니다. 아래 가이드를 참고해 바로 필요한 섹션으로 이동하세요. eBPF 개념 전반은 eBPF 프레임워크 문서에서 다룹니다.

문서주요 내용핵심 키워드
eBPF 프레임워크 eBPF 실행 흐름, BPF Verifier 상세(상태 추적·pruning), BPF 맵 타입별 비교, CO-RE/BTF 이식성, libbpf 스켈레톤 API, BPF ISA(명령어 집합(Instruction Set)), 프로그램 타입과 헬퍼 함수, 개발 도구(bpftool/bpftrace/bcc), 테일 콜과 서브프로그램, struct_ops, BPF 토큰 보안 모델, 보안 취약점(Vulnerability) 사례, 성능 최적화, 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, 성능 튜닝
AF_XDP AF_XDP 소켓(Socket), UMEM/Ring SPSC, Zero-copy 데이터 경로, libxdp, 멀티큐 RSS AF_XDP, UMEM, zero-copy, xsk_socket, libxdp

목적별 빠른 선택

하고 싶은 일읽을 문서바로 가기
eBPF 프로그램 처음 작성 (Verifier, 맵, CO-RE 이해) eBPF 프레임워크 개요VerifierCO-RE
패킷을 가장 빠르게 Drop / Redirect XDP 개요드라이버 모드
DDoS 방어 구현 XDP DDoS 방어 실전
L4 로드밸런서 구현 eBPF 프레임워크 L4 로드밸런서
커널 함수/이벤트 트레이싱 (kprobe, tracepoint) eBPF 프레임워크 kprobe/tracepoint
TC BPF 트래픽 셰이핑(Shaping), QoS XDP TC 셰이핑
유저스페이스 제로 카피(Zero-Copy) 패킷 처리 AF_XDP AF_XDP 전체
LSM BPF로 동적 보안 정책 eBPF 보안 정책 전체
TCP 혼잡 제어(Congestion Control) 교체 eBPF 프레임워크 struct_ops
SmartNIC / DPU 하드웨어 오프로드 XDP SmartNIC

주제별 문서 인덱스

구성 요소역할상세 문서
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 프레임워크 — 개발 도구
AF_XDP 유저스페이스 제로 카피 패킷 처리, UMEM 공유 메모리 AF_XDP 전체

주요 사용 사례

eBPF와 XDP는 다양한 분야에서 활용됩니다. 각 사용 사례의 상세 구현은 해당 세부 문서를 참고하세요.

사용 사례기술성능상세 문서
DDoS 방어 XDP_DROP + LPM_TRIE 블랙리스트 ~24 Mpps (단일 코어) XDP — DDoS 방어
L4 로드밸런서 XDP_REDIRECT + Maglev 해싱 ~14 Mpps (포워딩) eBPF — L4 로드밸런서
커널 트레이싱 kprobe/fentry + Ring Buffer 나노초 단위 오버헤드(Overhead) eBPF — kprobe/tracepoint
네트워크 모니터링 TC BPF + PERCPU 맵 플로우별 통계 수집 eBPF — 네트워크 모니터링
트래픽 셰이핑 TC BPF + Token Bucket IP별 속도 제한 XDP — TC 셰이핑
TCP 혼잡 제어(Congestion Control) struct_ops + tcp_congestion_ops 커널 ops 교체 eBPF — struct_ops
동적 보안 정책 LSM BPF hook 런타임 정책 변경 eBPF — 프로그램 타입

패킷 처리 성능 비교 요약

고성능 패킷 처리에서 각 솔루션의 성능 특성을 요약합니다. 상세 벤치마크와 튜닝 가이드는 XDP — 성능 비교와 튜닝 가이드를 참고하세요.

솔루션실행 계층64B Drop PPS지연(Latency) (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없음

최신 eBPF/XDP 동향 (커널 6.14 ~ 7.0)

2025~2026년 주요 커널 릴리스에서 eBPF와 XDP는 보안·성능·표현력 세 방향으로 빠르게 발전하고 있습니다. 각 세부 문서(bpf.html, xdp.html)에 반영된 내용과 함께, 허브 차원의 변경 요약을 아래 표로 정리합니다.

버전릴리스주요 변경분류
6.142025-03 bpf_local_irq_save/restore kfunc(IRQ 상태 직접 제어), fd_array_cnt로 연속 fd 배열 지원, Generic XDP + libeth_xdp 추상화, libbpf 링커(Linker) API 인메모리 ELF 지원 🆕 신규 API
6.162025-07 BPF qdisc 지원(eBPF로 큐 디스플린 구현), RB-Tree 순회·list peek 지원, device-bound 프로그램의 XDP_REDIRECT 허용, dynptr 메모리 읽기 kfunc, HTMap 원자적(Atomic) 업데이트 🆕 신규 기능
6.172025-09 읽기 전용(Read-Only) string kfunc, bpf_dynptr_memset(), BPF 메모리 어카운팅(Accounting), cgroup_bpf mprog API, Verifier precision mark 전파 개선, struct bpf_token_info 🆕 신규 API · ⚡ 검증기 개선
6.182025-11 서명된(Signed) BPF 프로그램 로드 지원(무결성(Integrity) 보장·비특권 로드 준비), task_work 기반 지연 실행, Verifier path-insensitive live 스택 분석, bpf_strcasecmp kfunc, UDP 수신 경로 성능 50% 향상(DDoS 환경) 🔒 보안 · ⚡ 성능 · 🆕 API
6.192026-02 하드웨어 RX 체크섬(Checksum) eBPF 로딩, 64-bit bitops kfunc, 리사이즈 가능한 해시(Hash) 맵(resizable hash map), sched_ext misbehaving 스케줄러(Scheduler) 복구 강화(lockless DSQ peek) 🆕 신규 기능
7.02026-04 실행 컨텍스트 감지 helper(bpf_in_nmi(), bpf_in_hardirq(), bpf_in_serving_softirq(), bpf_in_task()), KF_IMPLICIT_ARGS(검증기가 kfunc에 bpf_prog_aux 자동 주입), BPF_PROG_ASSOC_STRUCT_OPS syscall, percpu 맵 BPF_F_CPU·BPF_F_ALL_CPUS 플래그, io_uring cBPF 필터링, SELinux BPF 토큰 통합, BTF 이진 탐색으로 검증기 성능 향상 🆕 신규 API · 🔒 보안 · ⚡ 성능
실무 포인트:
  • 6.16의 BPF qdisc는 TC BPF와 함께 사용해 소프트웨어 정의 QoS 구현이 가능합니다. 상세는 eBPF — TC BPF 섹션을 참고하세요.
  • 6.18의 서명된 BPF 프로그램은 향후 컨테이너(Container) 환경에서 비특권 사용자도 검증된 BPF 프로그램을 로드할 수 있는 기반입니다. 보안 모델 상세는 eBPF — BPF 토큰 보안 모델을 참고하세요.
  • 6.18의 UDP 수신 50% 개선은 DDoS 완화 시나리오에서 직접 체감됩니다. 실전 구현은 XDP — DDoS 방어를 참고하세요.
  • 6.19의 리사이즈 가능한 해시 맵은 동적 트래픽 규모에 맞춰 맵 크기를 조정할 수 있어, 플로우 테이블 메모리 낭비 문제를 해결합니다.
  • 7.0의 KF_IMPLICIT_ARGS는 kfunc 개발자가 bpf_prog_aux를 명시적 인자로 선언하지 않아도 검증기가 자동 주입합니다. 기존 매크로 래퍼 없이 깔끔한 kfunc 시그니처를 유지할 수 있습니다.
  • 7.0의 io_uring cBPF 필터는 eBPF 권한 없이도 컨테이너(Container) 환경에서 io_uring SQE 연산을 세밀하게 제어할 수 있어 보안 정책 적용에 유용합니다.
  • 7.0의 실행 컨텍스트 helper(bpf_in_nmi() 등)는 sched_ext 스케줄러가 태스크 wake-up 원인(인터럽트 vs. 프로세스)을 구분해 더 정밀한 스케줄링 결정을 내릴 수 있게 합니다.

참고자료

커널 공식 문서

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