피드로 돌아가기
GeekNewsInfrastructure
원문 읽기
nbd-vram - Linux에서 NVIDIA GPU VRAM을 스왑 공간으로 사용하는 도구
NBD-VRAM: CUDA API 기반 VRAM 스왑 도입으로 NVMe 대비 27배 빠른 지연시간 달성
AI 요약
Context
물리적 메모리 증설이 불가능한 온보드 RAM 환경 및 하이브리드 GPU 노트북의 유휴 VRAM 낭비 문제 직면. 기존의 BAR1 direct ioremap이나 P2P API 방식은 소비자용 GeForce GPU의 권한 제약으로 인해 구현이 불가능한 한계 존재.
Technical Solution
- CUDA Driver API를 활용해 VRAM을 할당하고 cuMemcpyHtoD/DtoH 함수로 데이터 전송 경로를 확보하여 하드웨어 권한 제약을 우회한 설계
- User-space 데몬이 NBD(Network Block Device) 프로토콜을 통해 블록 장치를 제공하고 커널 nbd 드라이버를 통해 /dev/nbdX 장치로 노출하는 구조 채택
- kernel swap subsystem에서 시작해 Unix socket과 nbd-vram 데몬을 거쳐 GPU VRAM으로 이어지는 데이터 파이프라인 구축
- 시스템 부팅 시 systemd 서비스를 통해 VRAM 상한(VRAM_SETUP_SIZE_MB) 및 스왑 우선순위를 동적으로 설정하는 메커니즘 적용
- AC 전원 상태에 따른 서비스 자동 제어 로직을 포함하여 노트북 환경의 전력 관리 최적화
Impact
- 4K 읽기(1 request/sec) 지연 시간 기준 VRAM 평균 335us 달성으로 NVMe(9.05ms) 대비 약 27배의 성능 향상 확인
- VRAM 7GB 할당을 통해 zram 및 SSD 스왑을 포함한 총 46GB의 주소 지정 가능 메모리 공간 확보
Key Takeaway
커널 수준의 직접 접근이 제한된 하드웨어 환경에서 User-space 프로토콜(NBD)과 표준 드라이버 API(CUDA)를 조합해 가상 블록 장치를 구현함으로써 시스템 제약을 해결한 사례
실천 포인트
- 소비자용 GPU의 BAR1/P2P 제약 사항 확인 시 CUDA 복사 경로를 통한 우회 가능성 검토 - 고성능 스왑 구현을 위해 NBD의 Context Switching 오버헤드 및 바운스 버퍼 병목 지점 분석 필요 - 메모리 고정(Pinning) 기법을 통해 스왑 데몬 자체의 페이지가 스왑아웃되어 발생하는 데드락 방지 설계 적용