나의 잡다한 노트 및 메모
eBPF란? 본문
eBPF란? — 커널을 “실행 중에 확장”하는 안전한 샌드박스
eBPF (extended Berkeley Packet Filter)는 리눅스 커널 안에 초경량 가상 머신(VM)을 탑재해, 커널 모드에서 작은 프로그램을 동적으로 실행할 수 있도록 해 주는 기술입니다. 커널을 다시 빌드하거나 커널-모듈을 삽입하지 않아도, 네트워크·보안·관측·성능 문제를 해결하는 로직을 “뜨거운 상태(hot)”로 넣었다 뺄 수 있다는 점이 혁신적입니다.
핵심 구성 요소
구성 설명
| eBPF 바이트코드 | LLVM/Clang이 생성하는 RISC-형 64-bit 명령 집합. |
| Verifier | 커널 안에서 바이트코드를 정적 분석해 무한 루프·NULL 접근·메모리 오버런 등을 차단. 실패하면 로드 자체를 거부 → 안전성 확보. (eBPF) |
| JIT 컴파일러 | 통과한 바이트코드를 x86/ARM/RISC-V 등 실제 머신 코드로 변환, 거의 네이티브 속도로 실행. |
| Maps & Ring-buffer | 커널-유저 공간 간 데이터를 교환하는 공유 자료구조(해시, 배열, LRU, 퍼시스턴트 맵 등). |
| BTF & CO-RE | BPF Type Format 메타데이터 + Compile Once – Run Everywhere 기술. 커널 버전이 달라도 동일 바이너리를 재컴파일 없이 재사용 가능. (docs.ebpf.io) |
프로그램 타입(Attach Point)
계층 Attach Point 대표 용도·툴
| 네트워킹 | XDP, TC, AF_XDP socket | DDoS 차단·로드밸런싱(Cilium, Katran) (Linux Kernel Documentation) |
| 시스템 콜·커널 함수 | kprobe/kretprobe, tracepoint | bpftrace, BCC로 실시간 프로파일링 |
| 사용자 공간 함수 | uprobe/uretprobe | Go/Python 애플리케이션 레이턴시 측정 |
| LSM hook | BPF LSM | 런타임 정책·안티멀웨어(Tracee, Tetragon) (eunomia.dev, eunomia.dev) |
| cgroup & sched | cgroup_skb, cgroup_sock, sched_switch | 컨테이너 네트워킹, 스케줄러 통계 |
| Perf events | perf_event | 하드웨어 PMU 기반 CPU 캐시 미스 분석 |
대표 사용 사례
- 고성능 네트워크
XDP 프로그램은 NIC → 커널 스택 직전에 패킷을 처리해 초당 수천 만 PPS를 달성합니다. Facebook Katran LB, Cilium 등이 이를 사용합니다. (Linux Kernel Documentation) - 관측·디버깅(Observability)
bpftrace/BCC 스크립트 하나로 실서비스에서 함수 호출 스택, IO 레이턴시 분포, TCP 재전송 등을 실시간 조회—perf · strace를 대체·보완. - 보안 & 정책 집행
BPF-LSM을 통해 커널 내부에서 시스템 콜 허용·차단을 시행하거나, eBPF로 프로세스 행위를 추적해 위협을 탐지합니다. Tracee, Tetragon, Falco-eBPF 엔진 등이 대표적. (eunomia.dev) - 성능 최적화
실시간 가시성 덕분에 GC pause, 디스크 블록 단편화, NUMA miss 등을 빠르게 파악하고 커널 파라미터나 애플리케이션 코드를 조정.
장점 vs 제약
장점 제약
| 커널 패치·재부팅 불필요 → 온-더-플라이 기능 추가 | Verifier 제약(1 M inst 제한, 루프 bound 필요) |
| 네이티브급 성능(JIT) | 부동소수점·동적 메모리 할당 불가 |
| 안전성: 실패 시 프로그램만 언로드, 커널 안전 | 오래된 커널( < 4.9)에서는 기능 제한 |
| CO-RE로 커널 버전 의존성 ↓ | 퍼포먼스 분석에는 여전히 도메인 지식 필요 |
개발·배포 워크플로
(1) C/Go/BPFTrace 스크립트 작성
(2) clang -target bpf → ELF(바이트코드+BTF)
(3) libbpf/bpftool 로드 → Verifier 통과
(4) JIT ↴ 특정 hook에 attach
(5) eBPF Maps/Ring-buffer로 메트릭 수집
(6) Prometheus exporter, Grafana 대시보드, Alertmanager …
최신 동향(2024-2025)
- 커널 6.8에서 BPF token, sk_msg redirect 지원 확대.
- AF_XDP zero-copy 성숙 → 사용자 공간 DPDK 대안으로 자리매김. (Linux Kernel Documentation)
- CO-RE v2 – BTF enum value 지원, 자동 포인터 릴로케이션. (docs.ebpf.io)
- Security: BPF-LSM 체인 기능(다중 LSM 병행)과 동적 정책 업데이트로 커널 SELinux 대체 사례 등장. (eunomia.dev)
한눈에 보는 eBPF 생태계 툴
- 개발: clang/LLVM 17+, libbpf, bpftool, bpf-linker
- 관측: BCC, bpftrace, Pixie, Parca, Hubble(Cilium)
- 네트워킹: Cilium, Katran, Calico XDP Dataplane
- 보안: Tracee, Tetragon, Falco-eBPF, Cilium Tetragon
- 배포: eBPF Operator, cilium-ebpf Go library, Aya-Rust
정리
eBPF는 **“커널을 동적·안전하게 확장”**하는 기술로 자리잡았으며, 네트워킹부터 보안·관측·성능 최적화까지 광범위하게 쓰이고 있습니다. Verifier와 CO-RE 덕분에 안전성과 이식성을 확보하면서도, JIT가 제공하는 네이티브급 속도로 기존 솔루션을 대체하거나 보완하는 사례가 급증하는 중입니다. 리눅스 기반 인프라를 운영한다면, eBPF는 더 이상 선택이 아닌 “필수 교양”에 가깝다고 볼 수 있습니다.
'DevOps > 리눅스' 카테고리의 다른 글
| TCP backlog (0) | 2025.09.16 |
|---|---|
| Keepalived 란? (0) | 2025.02.23 |
| fsck 란? (0) | 2025.02.23 |
| bash 쉘 환경 및 동작을 설정하는 파일들 (0) | 2025.02.19 |
| Alias 란? (0) | 2025.02.19 |