← На главную

Проект nbd-vram превращает VRAM NVIDIA в swap на Linux — RTX 3070 получила +46 ГБ

02.06.2026 22:55 · hackernews

Проект nbd-vram от Sean Lobjoit (c0dejedi) превращает VRAM графического процессора NVIDIA в swap-пространство на Linux. Идея для ноутбуков с распаянной памятью — вместо сброса данных на SSD, переполнение ОЗУ уходит в видеопамять через PCIe. Тестировали на RTX 3070 Laptop (16 ГБ физической, 8 ГБ VRAM), драйвер 580.159.03, ядро 6.17, Pop!_OS. Выделили 7 ГБ под swap, итого вместе с zram и SSD получилось ~46 ГБ адресуемой памяти. Порядок вытеснения: сначала заполняется RAM, потом VRAM (быстрый PCIe), затем zram сжимает остаток (CPU), и только в самом конце — SSD.

Внутри всё просто: демон выделяет VRAM через CUDA driver API, затем отдаёт её как блочное устройство по протоколу NBD (Network Block Device) через Unix socket. Ядро подключается к нему через встроенный драйвер nbd и видит /dev/nbdX — обычный swap-раздел. Путь данных: kernel swap subsystem → /dev/nbdX → nbd kernel driver → Unix socket → nbd-vram daemon → cuMemcpyHtoD/cuMemcpyDtoH → GPU VRAM. Никаких модулей ядра, никаких символов NVIDIA — драйвер и обновления ядра переживаются без пересборки.

Почему не пошли через P2P API? Очевидный способ — nvidia_p2p_get_pages_persistent с привязкой страниц VRAM в BAR1 — не работает на потребительских GeForce. NVIDIA возвращает EINVAL на любых флагах, доступ к этому API есть только у Quadro и датацентровых карт. Прямой ioremap_wc BAR1 тоже бесполезен: GPU держит в нём всего ~16 МиБ под framebuffer, остальное читается нулями — mkswap проходит, а swapon падает.

nbd-vram обходит это через обычный cuMemcpy, который работает на любых CUDA-устройствах без специальных прав. Требования: любой потребительский RTX/GTX, драйвер с libcuda.so.1, ядро 3.0+ с модулем nbd, пакет nbd-client, gcc и make. Установка через git clone, install.sh и systemctl start vram-swap-nbd. Демон автоматически подбирает размер: если запрошенный объём (задаётся через VRAM_SETUP_SIZE_MB) не влазит, он отступает шагами по 512 МиБ, пока не найдёт свободное место. Приоритет swap задаётся через VRAM_SWAP_PRIORITY.

На RTX 3070 Laptop последовательная пропускная способность составила ~1.3 ГБ/с, а латентность ниже NVMe — данные идут напрямую через PCIe, минуя хранилище. Для ноутбуков с zram советуют ставить VRAM swap выше приоритетом, чтобы он ловил переполнение до сжатия. Есть встроенное управление питанием: сервис автоматически останавливается при отключении от сети или падении заряда батареи и возобновляется при подключении. Лицензия MIT.

Читать оригинал →