노트북의 유휴 NVIDIA VRAM을 스왑으로 활용하기 (ublk + CUDA, 커널 모듈 없음)
I made my laptop use its idle NVIDIA VRAM as swap (ublk + CUDA, no kernel module)
핵심 요약
유휴 VRAM을 스왑 공간으로 활용해 노트북 성능을 높이는 ublk 기반 도구 USM을 개발함.
- VRAM 스왑 활용 — 유휴 VRAM을 우선순위 높은 스왑 장치로 사용하여 시스템 성능 개선함.
- 커널 모듈 미사용 — 커널 모듈 없이 사용자 공간 데몬과 CUDA API를 통해 구현되어 보안 부팅과 호환됨.
- 압축 기술 적용 — lz4 압축을 통해 5.5GB VRAM으로 약 16GB의 앱 메모리를 수용함.
- 성능 테스트 결과 — zram 대비 안정적인 성능을 보이며 VRAM 부족 시 디스크 스왑으로 자동 전환됨.
내 16GB 램 노트북(RTX 3050 6GB, 화면 출력은 인텔 내장 그래픽 담당)은 램 사용량이 90%만 넘어가면 D램 없는 NVMe SSD 때문에 컴퓨터가 완전히 맛이 가버리더라. 근데 정작 엔비디아 그래픽카드 메모리는 내내 놀고 있는 거임.
USM은 그 VRAM을 스왑 장치로 우선 사용하게 해줌:
\- 유저 스페이스 데몬이 CUDA 드라이버 API로 VRAM을 빌려와서 ublk로 넘겨줌. 덕분에 최우선 순위 스왑 장치로 잡히고, 커널 모듈도 안 건드려서 Secure Boot도 문제없음.
\- lz4 압축 적용: 5.5 GiB VRAM에 앱 메모리 약 16 GiB까지 들어감.
\- 페이지 폴트당 약 9 µs 소요, NVMe는 오버헤드 포함해서 55 µs 정도 걸리는 거랑 비교하면 개빠름.
\- \`usm off\` 명령어 치거나 퀵 세팅 토글만 누르면 램이 꽉 차 있어도 몇 초 만에 VRAM을 다시 돌려받을 수 있음.
\- VRAM까지 다 차면 디스크에 있는 스왑 파일이 알아서 받아줌.
8GB 램에서 1.5 GiB짜리 앱 8개 돌리는 과부하 테스트 결과: zram은 6번 돌려서 3번 뻗었는데, VRAM 티어링은 4번 다 문제없었음.
아직 베타고 엔비디아 전용임. 우분투 26.04에서 노트북 두 대로 테스트했어. 코드 대부분은 내가 목표 정해주고 매일 돌리면서 Claude Code로 짰으니까, 신입이 짠 코드라고 생각하고 꼼꼼히 봐주라. 다른 GPU나 배포판에서 테스트해 본 사람 있으면 후기 좀 남겨줘.
Repo: [https://github.com/kha333n/usm](https://github.com/kha333n/usm)

