- nbd-vram은 Linux에서 NVIDIA GPU의 유휴 VRAM을 높은 우선순위의 스왑 공간으로 쓰게 해주는 작은 데몬임
- 납땜 메모리라 업그레이드가 어렵고 내장 AMD/ATI GPU가 화면 출력을 맡는 하이브리드 그래픽 노트북에서, 놀고 있는 NVIDIA VRAM을 메모리 압박 완화에 활용함
- 테스트 환경은 AMD/ATI + RTX 3070 Laptop, RAM 16GB, VRAM 8GB, NVIDIA driver 580.159.03, kernel 6.17, Pop!_OS이며, VRAM 7GB를 스왑으로 할당해 zram·SSD 스왑까지 합쳐 약 46GB의 주소 지정 가능한 메모리를 구성함
- 동작 순서는 RAM이 먼저 차고, 그다음 VRAM이 PCIe를 통해 넘친 페이지를 흡수하며, 이후 zram이 CPU로 압축하고, 마지막에 SSD를 사용하는 구조임
- 데몬은 CUDA driver API로 VRAM을 할당하고, Unix socket 위의 NBD(Network Block Device) 프로토콜로 블록 장치를 제공하며, 커널의 내장
nbd드라이버가/dev/nbdX로 노출해 일반 스왑 장치처럼 사용함 - 데이터 경로는 kernel swap subsystem →
/dev/nbdX→ nbd kernel driver → Unix socket → nbd-vram daemon →cuMemcpyHtoD/DtoH→ GPU VRAM으로 이어짐 - 별도 커널 모듈이나 NVIDIA 커널 심볼이 필요 없어서, 커널·드라이버 업데이트 뒤에도 재빌드 없이 유지될 수 있음
- NVIDIA P2P API 방식은 consumer GeForce GPU에서
nvidia_p2p_get_pages_persistent가EINVAL을 반환하고, BAR1 직접ioremap_wc방식도 약 16MiB의 디스플레이 프레임버퍼 외 영역 읽기가 0을 반환해 실패함 - CUDA 복사 경로인
cuMemcpyHtoD와cuMemcpyDtoH는 특별한 권한 없이 CUDA GPU에서 동작하므로, NBD 접근이 P2P·BAR1 제약을 우회함 - 요구사항은 CUDA 지원 NVIDIA GPU,
libcuda.so.1이 있는 NVIDIA 드라이버, Linux kernel 3.0+의 nbd 모듈,nbd-client,gcc,make이며 CUDA toolkit은 필요 없음 - 설치 후
vram-swap-nbdsystemd 서비스가 부팅 시 자동 실행되며,/etc/systemd/system/vram-swap-nbd.service의VRAM_SETUP_SIZE_MB와VRAM_SWAP_PRIORITY로 사용할 VRAM 상한과 스왑 우선순위를 조정함 - 데몬은 요청한 VRAM 크기를 먼저 시도하고 GPU 메모리가 부족하면 512MiB 단위로 줄여 할당하므로,
VRAM_SETUP_SIZE_MB는 필수 크기가 아니라 상한으로 동작함 - 전원 인식 관리를 켜면 AC 전원 해제나 배터리 임계값 이하에서 서비스가 자동 중지되고, 전원이 복구되면 다시 시작되며, 수동
systemctl stop은 덮어쓰지 않음 - RTX 3070 Laptop 벤치마크에서 순차 처리량과 지속 랜덤 I/O는 NVMe가 더 빠르지만, 4K 읽기 1 request/sec 지연 시간은 VRAM이 평균 335us로 NVMe 9.05ms보다 27배 빠름
- MIT 라이선스로 제공되며, 저장소는 스모크 테스트용
test-nbd.sh, 전체 파티션 검사용test-fill.sh, 처리량·IOPS·지연 시간 벤치마크 스크립트를 함께 제공함
nbd-vram - Linux에서 NVIDIA GPU VRAM을 스왑 공간으로 사용하는 도
nbd-vram - Linux에서 NVIDIA GPU VRAM을 스왑 공간으로 사용하는 도 | GeekNews
원문으로 표시됩니다. 한국어로 보시려면 브라우저의 번역 기능을 사용해 주세요.