Search
moon
sun

컨테이너 환경에서의 eBPF/XDP 로드밸런서 Deep Dive

URL
생성 일시
2026/11/10 07:02
최종 편집 일시
2026/11/10 07:02
태그
컴투스
파일과 미디어
eBPF란 무엇인가? XDP(eXpress Data Path) XDP 실행 흐름과 Veth (Virtual Ethernet) XDP INSTALL & ATTACH XDP EXECUTION Flow 로드밸런서 데이터 자료구조 (BPF MAP) 클라이언트 → 로드밸런서 → 서버 서버 → 로드밸런서 → 클라이언트 퍼포먼스 레이턴시 리소스 사용량 한계 결론 요약 참고문헌 클라이언트의 요청을 여러 개의 멀티 인스턴스 형태 서버에 로드밸런싱하려면, 앞단에서 패킷을 받아 포워딩해주는 로드밸런서 서버가 필요하다. 하지만 일반적인 로드밸런서는 애플리케이션 단까지 패킷을 수신하고 다시 전송하기까지 비용이 크다. NIC에서 수신된 패킷을 기반으로 커널 내에서 SKB를 만들고, 만들어진 SKB는 리눅스 커널 네트워크 스택을 통과한다. 이후 유저 영역의 소켓 버퍼로 메모리를 복사해야 하는데, 이 과정에는 컨텍스트 전환이 포함돼 비용 소모가 크다. 이번 챕터에서는 NIC에서 수신된 패킷을 리눅스 커널 네트워크 스택을 태우지 않고, 유저 영역으로의 메모리 카피도 하지 않는 제로카피 방식으로 원하는 서버로 패킷을 포워딩하는 기법인 eBPF/XDP를 소개한다. 더불어, XDP 기반 로드밸런서가 일반적인 L4, L7 Nginx 로드밸런서 대비 레이턴시(Latency), RPS(초당 요청 처리 수), CPU 사용량 측면에서 어느 정도의 성능 향상을 가져오는지 측정하고 분석해 본다. 이미지 출처: https://en.wikipedia.org/wiki/Iptables 참고: 이 글은 리눅스 네트워크 스택의 상세 구조나 eBPF의 원론적 개념보다는 XDP, Veth(가상 이더넷) 환경에서의 동작 원리, 그리고 퍼포먼스 측면에 집중하여 서술한다. eBPF란 무엇인가? 본격적으로 eBPF/XDP를 설명하기 앞서, eBPF의 기본 개념을 간략히 짚고 넘어간다. 이미지 출처: https://ebpf.io/what-is-ebpf 본 내용은 XDP를 설명하기 위한 배경 지식이므로, eBPF Virtual Machine이나 Verifier의 상세 동작보다는 역할 위주로 설명한다. eBPF는 본래 BPF(Berkeley Packet Filter)에서 유래했으나, extended BPF로 발전하며 패킷 필터링을 넘어 관찰 가능성(Observability), 트레이싱(Tracing), 보안 등 다양한 기능을 수행하게 되었다. 이제는 약어로서의 의미보다 독립적인 기술 용어로 통용된다. eBPF 프로그램은 이벤트 기반으로 동작하며, 커널이나 애플리케이션이 특정 훅(Hook) 지점을 통과할 때 실행된다. 주요 훅 지점은 다음과 같다. System Calls Kernel/User Tracing Network Events Function Entry/Exit eBPF 프로그램은 커널 공간(Kernel Space)에서 동작하기 때문에 안정성이 매우 중요하다. 따라서 엄격한 Verifier(검증기)를 통해 코드에 위험 요소(예: 패킷 포인터 접근 시 경계 초과 등)가 없는지 확인한 후, JIT Compiler를 통해 실행된다. 검증기의 제약으로 인해 일반적인 함수 사용이 제한되므로, eBPF는 특수한 형태의 커널 헬퍼 함수(Helper Function)를 제공한다. 즉, eBPF는 크게 BPF MAP, Virtual Machine, Verifier 세 가지 핵심 요소로 구성된다. XDP(eXpress Data Path) XDP(eXpress Data Path)는 프로그래밍 가능한 패킷