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
패킷이 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 프레임워크 | 개요 → Verifier → CO-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) | 커널 통합 |
|---|---|---|---|---|
| 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 | 없음 |
최신 eBPF/XDP 동향 (커널 6.14 ~ 7.0)
2025~2026년 주요 커널 릴리스에서 eBPF와 XDP는 보안·성능·표현력 세 방향으로 빠르게 발전하고 있습니다. 각 세부 문서(bpf.html, xdp.html)에 반영된 내용과 함께, 허브 차원의 변경 요약을 아래 표로 정리합니다.
| 버전 | 릴리스 | 주요 변경 | 분류 |
|---|---|---|---|
| 6.14 | 2025-03 | bpf_local_irq_save/restore kfunc(IRQ 상태 직접 제어), fd_array_cnt로 연속 fd 배열 지원, Generic XDP + libeth_xdp 추상화, libbpf 링커(Linker) API 인메모리 ELF 지원 |
🆕 신규 API |
| 6.16 | 2025-07 | BPF qdisc 지원(eBPF로 큐 디스플린 구현), RB-Tree 순회·list peek 지원, device-bound 프로그램의 XDP_REDIRECT 허용, dynptr 메모리 읽기 kfunc, HTMap 원자적(Atomic) 업데이트 |
🆕 신규 기능 |
| 6.17 | 2025-09 | 읽기 전용(Read-Only) string kfunc, bpf_dynptr_memset(), BPF 메모리 어카운팅(Accounting), cgroup_bpf mprog API, Verifier precision mark 전파 개선, struct bpf_token_info |
🆕 신규 API · ⚡ 검증기 개선 |
| 6.18 | 2025-11 | 서명된(Signed) BPF 프로그램 로드 지원(무결성(Integrity) 보장·비특권 로드 준비), task_work 기반 지연 실행, Verifier path-insensitive live 스택 분석, bpf_strcasecmp kfunc, UDP 수신 경로 성능 50% 향상(DDoS 환경) |
🔒 보안 · ⚡ 성능 · 🆕 API |
| 6.19 | 2026-02 | 하드웨어 RX 체크섬(Checksum) eBPF 로딩, 64-bit bitops kfunc, 리사이즈 가능한 해시(Hash) 맵(resizable hash map), sched_ext misbehaving 스케줄러(Scheduler) 복구 강화(lockless DSQ peek) | 🆕 신규 기능 |
| 7.0 | 2026-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 Documentation Hub — 커널 BPF 문서 최상위
- AF_XDP Documentation — AF_XDP 공식 문서
- ebpf.io — eBPF Foundation 공식 포털
- Cilium BPF & XDP Reference Guide — 아키텍처/opcode/맵 상세 설명
- BPF Features by Linux Kernel Version (iovisor/bcc) — 커널 버전별 BPF 기능 지원 여부 테이블
- eBPF Ecosystem Progress in 2024-2025 (eunomia) — 2024~2025년 eBPF 생태계 기능 심층 분석
- Phoronix: Signed Programs & Other BPF Changes For Linux 6.18 — 서명된 BPF 프로그램 및 6.18 주요 변경사항
- KernelNewbies: Linux 6.16 — BPF qdisc, XDP redirect, dynptr 등 6.16 변경 요약
- KernelNewbies: Linux 7.0 — 실행 컨텍스트 helper, KF_IMPLICIT_ARGS, percpu 맵 플래그 등 7.0 BPF 변경 요약
- Phoronix: Linux 7.0 Adds BPF Filtering To IO_uring — io_uring cBPF 필터링 지원 상세
- Implicit arguments for BPF kfuncs (LWN, 2026) — KF_IMPLICIT_ARGS 설계와 검증기 구현을 설명합니다
- Support associating BPF programs with struct_ops (LWN, 2025) — BPF_PROG_ASSOC_STRUCT_OPS syscall 설계 논의를 담습니다
관련 문서
BPF/XDP와 관련된 다른 주제를 더 깊이 이해하고 싶다면 다음 문서를 참고하세요.