Linux bpffs(BPF File System)란? eBPF 객체를 관리하는 전용 파일 시스템 완벽 이해

Linux에서 eBPF 프로그램과 BPF Map은 모두 커널 내부 객체(Kernel Object)입니다. 이러한 객체는 일반적인 파일처럼 디스크에 저장되는 것이 아니라 커널 메모리에 생성되어 관리됩니다.

하지만 운영 환경에서는 생성된 eBPF Program이나 BPF Map을 여러 프로세스가 공유하거나, 프로그램이 종료된 후에도 계속 사용할 수 있어야 하는 경우가 많습니다.

이를 위해 Linux는 bpffs(BPF File System) 라는 전용 가상 파일 시스템을 제공합니다.

bpffs는 eBPF 객체를 파일처럼 관리할 수 있도록 만들어진 특수 파일 시스템이며, Pinning 기능의 기반이 되는 핵심 구성 요소입니다.

이번 글에서는 bpffs의 개념과 구조, 동작 원리, Pinning과의 관계, 주요 명령어, 실무 활용 사례를 자세히 알아보겠습니다.

Linux bpffs란?

bpffs는 BPF(Berkeley Packet Filter) 객체를 관리하기 위한 Linux 전용 가상 파일 시스템(Virtual File System) 입니다.

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

User Space

↓

bpffs

↓

BPF Program

BPF Map

BPF Link

↓

Linux Kernel

bpffs는 실제 디스크 파일을 저장하는 파일 시스템이 아니라, 커널 내부 객체를 사용자 공간에서 접근할 수 있도록 연결해 주는 역할을 합니다.

bpffs가 필요한 이유

만약 bpffs가 없다면 다음과 같은 문제가 발생합니다.

  • 프로그램 종료 시 BPF 객체 삭제
  • 다른 프로세스가 동일한 객체 접근 불가
  • BPF Map 공유 어려움
  • 운영 중인 Program 재사용 불가

bpffs를 사용하면 이러한 문제를 해결할 수 있습니다.

bpffs의 동작 원리

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

Application

↓

BPF Object 생성

↓

Pin

↓

bpffs

↓

Kernel Object 유지

↓

다른 Application 접근

bpffs는 커널 객체에 대한 참조(Reference)를 유지하여 여러 프로그램이 동일한 객체를 사용할 수 있게 합니다.

기본 마운트 위치

대부분의 Linux 배포판에서는 다음 경로를 사용합니다.

/sys/fs/bpf

예시

/sys/fs/bpf

├── xdp_prog
├── firewall
├── counter_map
├── trace_map
└── links

여기에 생성된 항목은 모두 Kernel Object를 가리킵니다.

bpffs 확인

현재 bpffs가 마운트되어 있는지 확인합니다.

mount | grep bpf

출력 예시

bpffs on /sys/fs/bpf type bpf

정상적으로 마운트되어 있으면 Pinning 기능을 사용할 수 있습니다.

bpffs 마운트

마운트되어 있지 않다면

sudo mount -t bpf bpf /sys/fs/bpf

또는

sudo mkdir -p /sys/fs/bpf

sudo mount -t bpf bpf /sys/fs/bpf

를 실행하면 됩니다.

bpffs에서 관리하는 객체

bpffs는 다양한 BPF 객체를 관리합니다.

대표적으로

  • BPF Program
  • BPF Map
  • BPF Link
  • BTF 객체

등을 저장할 수 있습니다.

Program 저장

Program Pin 예시

sudo bpftool prog pin id 10 /sys/fs/bpf/xdp_prog

확인

ls -l /sys/fs/bpf

출력 예시

xdp_prog

Program은 bpffs에 계속 유지됩니다.

Map 저장

Map도 동일하게 저장할 수 있습니다.

sudo bpftool map pin id 20 /sys/fs/bpf/counter_map

다른 프로그램도

/sys/fs/bpf/counter_map

을 이용하여 동일한 Map에 접근할 수 있습니다.

Link 저장

최근 Linux에서는 BPF Link도 Pinning이 가능합니다.

예를 들어

sudo bpftool link pin id 3 /sys/fs/bpf/xdp_link

Hook 연결 자체를 유지할 수 있습니다.

bpffs와 일반 파일 시스템의 차이

항목bpffs일반 파일 시스템
저장 대상Kernel Object일반 파일
디스크 저장XO
메모리 기반O일부
Program 공유OX
Map 공유OX
Pinning지원미지원

bpffs는 파일처럼 보이지만 실제로는 커널 객체를 참조하는 특수한 파일 시스템입니다.

bpffs와 Pinning의 관계

Pinning은 반드시 bpffs를 사용합니다.

동작 과정은 다음과 같습니다.

Program

↓

Pin

↓

bpffs

↓

Kernel Object 유지

즉,

Pinning 기능은 bpffs 위에서 동작합니다.

bpftool과 함께 사용

Program 목록

sudo bpftool prog show

Map 목록

sudo bpftool map show

Pinned Program 확인

sudo bpftool prog show pinned /sys/fs/bpf/xdp_prog

Pinned Map 확인

sudo bpftool map show pinned /sys/fs/bpf/counter_map

bpffs 사용 시 주의사항

운영 환경에서는 다음 사항을 주의해야 합니다.

  • 사용하지 않는 객체 삭제
  • 적절한 접근 권한 설정
  • 이름 충돌 방지
  • Pin 경로 관리
  • 오래된 Program 정리

객체가 많아질수록 관리 정책을 마련하는 것이 좋습니다.

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

bpffs 확인

mount | grep bpf

디렉터리 확인

ls -l /sys/fs/bpf

Program Pin

sudo bpftool prog pin id 10 /sys/fs/bpf/demo_prog

Map Pin

sudo bpftool map pin id 20 /sys/fs/bpf/demo_map

Pinned Program 확인

sudo bpftool prog show pinned /sys/fs/bpf/demo_prog

Pinned Map 확인

sudo bpftool map show pinned /sys/fs/bpf/demo_map

실무 사례

예를 들어 Cilium 기반 Kubernetes 클러스터를 운영한다고 가정해 보겠습니다.

다음과 같은 방식으로 bpffs를 활용할 수 있습니다.

  1. XDP Program을 /sys/fs/bpf/cilium_xdp에 Pin
  2. 서비스별 통계를 Hash Map으로 생성
  3. Hash Map을 /sys/fs/bpf/service_map에 Pin
  4. 관리 프로그램이 종료되어도 객체 유지
  5. 새로운 관리 프로세스가 기존 Map을 열어 통계 조회
  6. 서비스 중단 없이 네트워크 정책을 지속적으로 운영

이처럼 bpffs는 eBPF 객체를 장기간 유지하고 공유하는 핵심 역할을 수행합니다.

자주 묻는 질문

bpffs는 일반 파일 시스템인가요?

아닙니다. bpffs는 디스크에 파일을 저장하는 일반 파일 시스템이 아니라, 커널 내부의 eBPF 객체를 파일처럼 관리하기 위한 가상 파일 시스템입니다.

bpffs와 Pinning은 어떤 관계인가요?

Pinning은 bpffs를 기반으로 동작합니다. Program이나 Map을 Pin하면 /sys/fs/bpf 아래에 항목이 생성되고, 이를 통해 커널 객체를 계속 참조할 수 있습니다.

시스템을 재부팅하면 bpffs에 있는 객체는 유지되나요?

아닙니다. bpffs 자체는 다시 마운트할 수 있지만, 저장된 eBPF 객체는 커널 메모리에 존재하므로 재부팅하면 사라집니다. 부팅 후에는 프로그램을 다시 로드하고 Pin해야 합니다.

마무리

Linux bpffs(BPF File System)는 eBPF Program, BPF Map, BPF Link 등 커널 객체를 관리하기 위한 전용 가상 파일 시스템입니다. Pinning 기능의 기반이 되는 핵심 요소로, 여러 프로세스가 동일한 객체를 공유하고 운영 중에도 안정적으로 재사용할 수 있도록 지원합니다. eBPF 기반 시스템을 설계하거나 운영한다면 bpffs의 구조와 활용 방법을 반드시 이해해야 합니다.

댓글 남기기