gpu_ext: GPU 드라이버의 eBPF 확장
eBPF를 이용한 프로그래밍 가능한 메모리 오프로딩 및 스케줄링을 위한 Linux GPU 드라이버 확장.
논문 결과, 보충 실험, 원본 데이터 링크 및 재현 지침은 artifact guide부터 시작하세요.
개요
최신 GPU 워크로드(LLM 추론, 벡터 데이터베이스, DNN 학습)는 다양한 메모리 접근 패턴과 스케줄링 요구 사항을 보입니다. 하지만 GPU 드라이버는 워크로드별 요구에 적응할 수 없는 고정적이고 만능인 정책을 사용합니다.
gpu_ext는 eBPF struct_ops를 통해 사용자 정의 가능한 GPU 리소스 관리를 가능하게 합니다:
- 메모리 관리: 드라이버 수준에서 플러그 가능한 제거(eviction) 및 프리페치(prefetch) 정책
- 스케줄링: 다중 테넌트 GPU 공유를 위한 프로세스별 타임슬라이스 및 우선순위 제어
- 관측 가능성 (Observability): 메모리 및 스케줄링 이벤트를 추적하는 도구
Linux 커널의 sched_ext에서 영감을 받은 gpu_ext는 동일한 확장성을 GPU 드라이버에 가져옵니다.
참고: gpu_ext가 참조하는 디바이스 측 런타임 경로는 bpftime을 기반으로 합니다.
구조
├── extension/ # eBPF 정책, 사용자 공간 로더, 트레이스 도구
├── kernel-module/ # eBPF 훅이 적용된 수정된 NVIDIA 커널 모듈
│ └── nvidia-module/ # NVIDIA Open GPU Kernel Modules v575.57.08
...
extension/의 정책:
| 카테고리 | 정책 |
|---|
| 제거(Eviction) | FIFO, LFU, MRU, PID-quota, freq-decay, FIFO-chance |
| ... | |
전제 조건 (Prerequisites)
sudo apt-get install -y --no-install-recommends \
build-essential gcc g++ make \
...
추가 요구 사항:
- 커널 모듈 빌드: Linux 커널 헤더 (
linux-headers-$(uname -r)), CUDA 12.8+
- 워크로드:
uv 패키지 관리자를 사용하는 Python 3.12+
- Nix 사용자:
nix develop은 즉시 사용 가능한 쉘 환경을 제공합니다.
빌드
1. eBPF 정책 빌드
이 과정은 서브모듈에서 libbpf와 bpftool을 빌드한 다음, 각 .bpf.c 정책 파일을 BPF 바이트코드(.bpf.o)와 사용자 공간 로더 바이너리로 컴파일합니다. BPF 객체와 스켈레톤 헤더는 extension/.output/로 이동하며, 로더 바이너리는 extension/에 직접 배치됩니다.
일부 선택적 확장 바이너리는 추가적인 호스트 종속성을 필요로 합니다:
sched_gpu_*는 SCX_INCLUDE_DIR=/path/to/linux/tools/sched_ext/include가 필요합니다.
prefetch_adaptive_*는 CUDA/NVML 헤더와 스텁이 필요합니다.
test_preempt_demo / test_preempt_multi는 CUDA 드라이버 헤더와 스텁이 필요합니다.
2. 커널 모듈 빌드
수정된 NVIDIA 커널 모듈(Open GPU Kernel Modules v575.57.08 기반)은 메모리 관리를 위해 nvidia-uvm에 BPF struct_ops 후크 포인트를 추가하고, GPU 스케줄링을 위해 nvidia에 이를 추가합니다.
cd kernel-module/nvidia-module
make modules -j$(nproc)
이 명령어는 두 단계를 자동으로 실행합니다: 먼저 OS와 무관한 드라이버 객체(src/nvidia/, src/nvidia-modeset/)를 빌드하고, 그 다음 Kbuild를 통해 커널 모듈을 빌드합니다.
출력:
kernel-open/nvidia.ko
kernel-open/nvidia-modeset.ko
kernel-open/nvidia-drm.ko
...
3. 사용자 정의 커널 모듈 로드 (insmod만)
중요: 임시 로딩에는 insmod만 사용하세요. 절대 make modules_install을 실행하거나 .ko 파일을 /lib/modules/로 복사하지 마세요. 사용자 정의 모듈은 실행 중인 커널에만 로드되며, 재부팅 시 시스템 NVIDIA 드라이버로 자동 복원됩니다. 이는 시스템 안정성을 보장합니다—문제가 발생하면 간단한 재부팅으로 원래의 드라이버가 복구됩니다.
sudo systemctl stop nvidia-persistenced 2>/dev/null || true
sudo systemctl stop gdm3 2>/dev/null || true
...
언제든지 시스템 모듈로 되돌리려면 (재부팅 없이):
sudo rmmod nvidia_uvm nvidia_drm nvidia_modeset nvidia
sudo modprobe nvidia && sudo modprobe nvidia_uvm
자세한 문제 해결은 docs/driver_docs/MODULE_LOAD_UNLOAD_GUIDE.md를 참조하세요.
4. eBPF 정책 로드
커스텀 커널 모듈을 로드한 후, 정책을 연결합니다:
sudo ./extension/prefetch_adaptive_sequential
...
워크로드(Workloads)
논문 실험을 재현하기 위한 벤치마크 워크로드입니다. 전체 설정 및 지침은 workloads/README.md를 참조하세요.
| 워크로드 | 논문 | 설명 |
|---|
| llama.cpp | RQ1, Fig 6 | MoE 전문가 오프로딩 (GPT-OSS-120B, 59 GiB) |
| ... | | |
| Quick start: | | |
cd workloads/llama.cpp
uv sync
uv run python configs/bench.py --uvm -o results/uvm_baseline.json
논문(Paper)
gpu_ext: eBPF를 통한 GPU용 확장 가능한 OS 정책
Yusheng Zheng, Tong Yu, Yiwei Yang, Minghui Jiang, Xiangyu Gao, Jianchang Su, Yanpeng Hu, Wenan Mao, Wei Zhang, Dan Williams, Andi Quinn
arXiv:2512.12615
문서 동기화 참고 사항: 논문 기반의 주장(claims), 정책 또는 벤치마크 구성이 변경되면, 이 파일 docs/gpu-ext/paper/README.md와 workloads/README.md를 함께 업데이트하세요.
로드맵(Roadmap)
커널 드라이버 확장 프레임워크
정책 및 평가
라이선스 (License)
MIT