Linux BCC(BPF Compiler Collection)란? eBPF 프로그램을 쉽게 개발하는 도구 완벽 이해

eBPF는 Linux Kernel 내부에서 다양한 작업을 수행할 수 있는 강력한 기술이지만, 처음부터 C 언어로 eBPF 프로그램을 작성하고 컴파일하여 로드하는 과정은 상당히 복잡합니다.

이러한 어려움을 해결하기 위해 등장한 것이 BCC(BPF Compiler Collection) 입니다.

BCC는 eBPF 프로그램을 쉽게 작성하고 실행할 수 있도록 다양한 라이브러리와 도구를 제공하는 프로젝트입니다. Python이나 Lua 같은 고수준 언어와 함께 사용할 수 있어 eBPF 입문자뿐 아니라 운영 환경에서도 널리 활용되고 있습니다.

이번 글에서는 BCC의 개념과 구조, 주요 도구, 설치 방법, 사용 예제, 그리고 실무 활용 사례를 자세히 알아보겠습니다.

Linux BCC란?

BCC(BPF Compiler Collection)는 eBPF 프로그램을 손쉽게 개발하고 실행하기 위한 오픈소스 프레임워크입니다.

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

Python Program

↓

BCC Library

↓

LLVM / Clang

↓

eBPF Bytecode

↓

Linux Kernel

개발자는 복잡한 시스템 호출을 직접 구현하지 않고도 eBPF 프로그램을 실행할 수 있습니다.

BCC가 필요한 이유

순수 eBPF 개발은 다음과 같은 과정을 거칩니다.

  • C 코드 작성
  • LLVM 컴파일
  • eBPF Bytecode 생성
  • Kernel 로드
  • BPF Map 생성
  • 이벤트 처리

반면 BCC를 사용하면 대부분의 과정을 자동으로 처리해 줍니다.

따라서 개발자는 eBPF 로직 작성에만 집중할 수 있습니다.

BCC의 동작 원리

전체 흐름은 다음과 같습니다.

Python Script

↓

BCC API

↓

Clang 컴파일

↓

Verifier 검사

↓

Kernel 로드

↓

eBPF 실행

BCC가 컴파일과 로딩 과정을 자동으로 수행합니다.

BCC의 주요 구성 요소

BCC는 크게 다음 요소로 구성됩니다.

구성 요소설명
Python APIPython에서 eBPF 제어
Lua APILua 지원
C FrontendeBPF C 코드
LLVM/Clang컴파일러
Kernel LoadereBPF 로드
Helper Library다양한 유틸리티 제공

Python API가 가장 널리 사용됩니다.

BCC 설치

Ubuntu에서는 다음과 같이 설치할 수 있습니다.

sudo apt update

sudo apt install bpfcc-tools

sudo apt install python3-bpfcc

RHEL 계열에서는

sudo dnf install bcc-tools

를 사용할 수 있습니다.

설치 확인

설치가 완료되면 다음 명령으로 확인합니다.

which execsnoop

또는

which opensnoop

정상 설치되었다면 실행 파일 위치가 출력됩니다.

대표적인 BCC 도구

BCC에는 매우 다양한 분석 도구가 포함되어 있습니다.

도구설명
execsnoop실행되는 프로세스 추적
opensnoop파일 열기 추적
biosnoop디스크 I/O 추적
tcpconnectTCP 연결 추적
tcptracerTCP 세션 추적
filetop파일 사용량 분석
runqlat스케줄러 지연 분석
profileCPU 프로파일링

운영 서버에서도 자주 활용됩니다.

execsnoop 사용

프로세스 실행을 추적합니다.

sudo execsnoop

출력 예시

PID     COMM

1234    bash

2345    nginx

3456    python

새로운 프로세스가 실행될 때마다 표시됩니다.

opensnoop 사용

파일 접근을 추적합니다.

sudo opensnoop

출력 예시

PID

COMM

FILE

1234

nginx

/etc/nginx/nginx.conf

어떤 프로세스가 어떤 파일을 여는지 확인할 수 있습니다.

biosnoop 사용

디스크 I/O 분석

sudo biosnoop

예시

TIME

PID

DISK

LAT(ms)

디스크 지연 시간을 분석할 수 있습니다.

tcpconnect 사용

TCP 연결 추적

sudo tcpconnect

출력 예시

PID

COMM

SADDR

DADDR

현재 생성되는 TCP 연결을 실시간으로 확인합니다.

BCC 프로그램 예제

Python에서 간단한 eBPF 프로그램을 실행하는 예시입니다.

from bcc import BPF

program = """
int hello(void *ctx) {
    bpf_trace_printk("Hello eBPF\\n");
    return 0;
}
"""

b = BPF(text=program)

Python 코드에서 직접 eBPF 프로그램을 정의하고 실행할 수 있습니다.

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

BCC 도구 설치 확인

which execsnoop

프로세스 추적

sudo execsnoop

파일 추적

sudo opensnoop

디스크 분석

sudo biosnoop

TCP 연결 분석

sudo tcpconnect

CPU 분석

sudo profile

설치 패키지 확인

dpkg -l | grep bpfcc

실무 사례

예를 들어 운영 중인 웹 서버에서 갑자기 응답 속도가 느려졌다고 가정해 보겠습니다.

다음과 같은 절차로 분석할 수 있습니다.

  1. execsnoop으로 비정상 프로세스 실행 여부 확인
  2. opensnoop으로 과도한 파일 접근 확인
  3. biosnoop으로 디스크 지연 분석
  4. tcpconnect로 비정상 네트워크 연결 확인
  5. profile로 CPU 사용량 분석
  6. 병목 원인을 확인하고 최적화

별도의 커널 수정 없이도 실시간으로 문제를 분석할 수 있다는 것이 BCC의 큰 장점입니다.

자주 묻는 질문

BCC와 eBPF는 같은 기술인가요?

아닙니다. eBPF는 Linux Kernel에서 실행되는 기술이고, BCC는 eBPF 프로그램을 쉽게 작성하고 실행할 수 있도록 지원하는 개발 프레임워크입니다.

BCC와 bpftrace의 차이는 무엇인가요?

BCC는 Python과 C를 기반으로 복잡한 eBPF 프로그램을 개발하는 데 적합합니다. 반면 bpftrace는 간단한 한 줄 명령으로 추적 작업을 수행할 수 있어 빠른 분석과 디버깅에 유리합니다.

BCC는 운영 서버에서도 사용할 수 있나요?

가능합니다. 필요한 도구만 실행하면 성능에 미치는 영향이 크지 않아 운영 환경에서도 성능 분석과 장애 진단에 널리 사용됩니다.

마무리

BCC(BPF Compiler Collection)는 eBPF 프로그램을 보다 쉽고 효율적으로 개발할 수 있도록 지원하는 강력한 프레임워크입니다. 다양한 내장 도구를 통해 프로세스, 파일, 디스크, 네트워크, CPU를 실시간으로 분석할 수 있으며, 운영 서버의 성능 문제와 장애 원인을 빠르게 파악하는 데 큰 도움이 됩니다. eBPF를 본격적으로 활용하려는 개발자와 시스템 엔지니어라면 반드시 익혀야 할 핵심 도구입니다.

댓글 남기기