Linux eBPF Program Type이란? XDP, Kprobe, Tracepoint 등 Program Type 종류와 특징 완벽 이해

eBPF 프로그램은 모두 같은 방식으로 실행되는 것이 아닙니다. 어떤 프로그램은 네트워크 패킷을 처리하고, 어떤 프로그램은 시스템 콜을 추적하며, 또 다른 프로그램은 파일 시스템이나 보안 이벤트를 감시합니다.

이처럼 eBPF 프로그램이 어디에 연결(Hook)되어 어떤 목적으로 실행되는지를 정의하는 것이 Program Type입니다.

Program Type에 따라 사용할 수 있는 Helper Function, 접근 가능한 데이터, 연결 가능한 Hook, 실행 시점 등이 달라집니다. 따라서 eBPF를 제대로 이해하려면 Program Type의 종류와 특징을 반드시 알아야 합니다.

이번 글에서는 eBPF Program Type의 개념과 구조, 대표적인 종류, 각 Program Type의 특징과 활용 사례를 자세히 살펴보겠습니다.

Linux eBPF Program Type이란?

Program Type은 eBPF 프로그램의 실행 위치와 목적을 정의하는 타입입니다.

기본 구조는 다음과 같습니다.

eBPF Program

↓

Program Type

↓

Kernel Hook

↓

Event 발생

↓

eBPF 실행

즉, Program Type이 달라지면 프로그램이 실행되는 위치도 달라집니다.

Program Type이 필요한 이유

예를 들어

  • 네트워크 패킷 처리
  • 프로세스 생성 추적
  • 파일 접근 감시
  • 시스템 콜 분석

모든 작업을 하나의 Hook에서 처리하는 것은 불가능합니다.

Linux Kernel은 상황에 맞는 다양한 Hook을 제공하며, 각각에 맞는 Program Type을 사용하도록 설계되어 있습니다.

대표적인 eBPF Program Type

Program Type주요 용도
XDP초고속 네트워크 패킷 처리
TC트래픽 제어
Socket Filter소켓 패킷 필터링
Kprobe커널 함수 추적
Kretprobe커널 함수 반환 추적
Tracepoint커널 이벤트 추적
Raw TracepointTracepoint보다 빠른 추적
Uprobe사용자 프로그램 함수 추적
Uretprobe사용자 함수 반환 추적
Cgroup리소스 제어
LSM보안 정책 적용
Perf Event성능 이벤트 추적
Scheduler스케줄러 이벤트 분석

Linux Kernel은 지속적으로 새로운 Program Type을 추가하고 있습니다.

XDP

XDP(eXpress Data Path)는 가장 빠른 네트워크 처리 방식입니다.

NIC

↓

XDP Hook

↓

Kernel Network Stack

사용 예

  • DDoS 차단
  • 방화벽
  • Load Balancer
  • Packet Drop

패킷이 네트워크 스택으로 올라오기 전에 처리합니다.

TC

TC(Traffic Control)는 네트워크 스택 내부에서 동작합니다.

Packet

↓

Kernel Network Stack

↓

TC Hook

↓

Network Device

사용 예

  • QoS
  • Traffic Shaping
  • Packet Redirect

XDP보다 조금 늦게 실행되지만 더 많은 기능을 제공합니다.

Socket Filter

소켓 계층에서 패킷을 검사합니다.

사용 예

  • 패킷 캡처
  • 패킷 분석
  • IDS

대표적으로 tcpdump와 유사한 기능을 구현할 수 있습니다.

Kprobe

Kprobe는 커널 함수 진입 시 실행됩니다.

Kernel Function

↓

Entry

↓

Kprobe

사용 예

  • 함수 호출 횟수
  • 실행 시간
  • 시스템 분석

커널 내부 동작을 분석할 때 가장 많이 사용됩니다.

Kretprobe

Kretprobe는 함수 종료 시 실행됩니다.

Function

↓

Return

↓

Kretprobe

사용 예

  • 함수 반환값 분석
  • 실행 시간 측정
  • 성능 분석

Kprobe와 함께 사용하는 경우가 많습니다.

Tracepoint

Tracepoint는 Kernel이 미리 제공하는 이벤트입니다.

예를 들어

Process Fork

↓

Tracepoint

↓

eBPF

대표 이벤트

  • sched_switch
  • sched_process_exec
  • sys_enter
  • sys_exit

Kernel 버전 간 호환성이 뛰어납니다.

Raw Tracepoint

Raw Tracepoint는 Tracepoint보다 단순한 인터페이스를 제공합니다.

장점

  • 오버헤드 감소
  • 빠른 실행
  • 낮은 비용

성능이 중요한 환경에서 사용됩니다.

Uprobe

Uprobe는 사용자 공간 프로그램을 추적합니다.

Application

↓

Function

↓

Uprobe

사용 예

  • MySQL 함수 추적
  • Redis 함수 추적
  • Nginx 분석

커널이 아닌 애플리케이션 내부를 분석할 수 있습니다.

Uretprobe

Uretprobe는 사용자 함수가 종료될 때 실행됩니다.

사용 예

  • 함수 반환값 확인
  • 응답 시간 분석
  • 라이브러리 호출 분석

Cgroup

Cgroup Program은 컨테이너와 리소스를 제어합니다.

사용 예

  • Container Monitoring
  • Kubernetes
  • Resource Limit
  • Access Control

Docker 환경에서 자주 활용됩니다.

LSM(Linux Security Module)

LSM Program은 커널 보안 Hook에 연결됩니다.

사용 예

  • 파일 접근 제어
  • 권한 검사
  • 보안 정책
  • 시스템 보호

Falco와 같은 보안 도구에서도 활용됩니다.

Perf Event

Perf Event Program은 CPU 성능 이벤트를 수집합니다.

사용 예

  • CPU Cycle
  • Cache Miss
  • Branch Miss
  • 성능 분석

시스템 튜닝에 유용합니다.

Program Type 확인

현재 로드된 Program Type 확인

sudo bpftool prog show

출력 예시

id 1

type xdp

id 2

type tracing

id 3

type tc

Kernel이 지원하는 Program Type 확인

sudo bpftool feature

Program Type 선택 기준

목적추천 Program Type
패킷 필터링XDP
네트워크 제어TC
Kernel 함수 추적Kprobe
Kernel 이벤트 추적Tracepoint
User 함수 추적Uprobe
보안 정책LSM
Container 관리Cgroup
성능 분석Perf Event

목적에 따라 적절한 Program Type을 선택하는 것이 중요합니다.

실무에서 자주 사용하는 명령어

Kernel 버전 확인

uname -r

Program 목록 확인

sudo bpftool prog show

Kernel 기능 확인

sudo bpftool feature

Map 목록 확인

sudo bpftool map show

BTF 확인

sudo bpftool btf show

libbpf 버전 확인

pkg-config --modversion libbpf

실무 사례

예를 들어 클라우드 환경에서 하나의 서버에서 다양한 모니터링 기능을 구현한다고 가정해 보겠습니다.

다음과 같이 여러 Program Type을 동시에 사용할 수 있습니다.

  1. XDP로 DDoS 공격 패킷 차단
  2. TC로 네트워크 트래픽 제어
  3. Kprobe로 커널 함수 호출 분석
  4. Tracepoint로 프로세스 생성 및 종료 추적
  5. Uprobe로 Nginx 함수 실행 시간 분석
  6. LSM으로 파일 접근 권한 검사

이처럼 하나의 시스템에서도 여러 Program Type을 조합하여 네트워크, 성능, 보안, 운영을 동시에 관리할 수 있습니다.

자주 묻는 질문

Program Type과 Hook은 같은 의미인가요?

아닙니다. Program Type은 eBPF 프로그램의 종류를 의미하고, Hook은 실제 프로그램이 연결되는 커널의 실행 지점입니다. Program Type은 어떤 종류의 Hook에 연결될 수 있는지를 정의합니다.

가장 많이 사용하는 Program Type은 무엇인가요?

운영 환경에서는 XDP, Kprobe, Tracepoint, TC가 가장 많이 사용됩니다. 네트워크 성능, 시스템 분석, 보안 모니터링 등 다양한 분야에서 활용됩니다.

하나의 프로그램에서 여러 Program Type을 사용할 수 있나요?

하나의 eBPF 프로그램은 하나의 Program Type을 갖지만, 하나의 프로젝트에서는 여러 eBPF 프로그램을 작성하여 각각 다른 Program Type으로 로드하고 함께 사용할 수 있습니다.

마무리

Linux eBPF Program Type은 프로그램이 어디에서 어떤 목적으로 실행되는지를 정의하는 핵심 개념입니다. XDP, TC, Kprobe, Tracepoint, Uprobe, LSM 등 다양한 Program Type이 존재하며, 각각 실행 위치와 기능이 다릅니다. 목적에 맞는 Program Type을 선택하면 네트워크 처리, 성능 분석, 시스템 추적, 보안 강화 등 다양한 작업을 효율적으로 수행할 수 있습니다.

댓글 남기기