나의 잡다한 노트 및 메모

eBPF란? 본문

DevOps/리눅스

eBPF란?

peanutwalnut 2025. 5. 12. 10:34

 

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 캐시 미스 분석

대표 사용 사례

  1. 고성능 네트워크
    XDP 프로그램은 NIC → 커널 스택 직전에 패킷을 처리해 초당 수천 만 PPS를 달성합니다. Facebook Katran LB, Cilium 등이 이를 사용합니다. (Linux Kernel Documentation)
  2. 관측·디버깅(Observability)
    bpftrace/BCC 스크립트 하나로 실서비스에서 함수 호출 스택, IO 레이턴시 분포, TCP 재전송 등을 실시간 조회—perf · strace를 대체·보완.
  3. 보안 & 정책 집행
    BPF-LSM을 통해 커널 내부에서 시스템 콜 허용·차단을 시행하거나, eBPF로 프로세스 행위를 추적해 위협을 탐지합니다. Tracee, Tetragon, Falco-eBPF 엔진 등이 대표적. (eunomia.dev)
  4. 성능 최적화
    실시간 가시성 덕분에 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