Опубликован открытый проект NBD-VRAM, позволяющий задействовать часть видеопамяти NVIDIA GPU как swap-пространство в Linux. Проект ориентирован прежде всего на ноутбуки с распаянной оперативной памятью, где RAM нельзя расширить, но при этом в системе есть дискретная видеокарта NVIDIA RTX/GTX с неиспользуемой VRAM. Код написан на C и shell, распространяется под лицензией MIT.
Идея NBD-VRAM проста: если система уже начинает уходить в swap на SSD, можно поставить перед SSD ещё один промежуточный слой — видеопамять. Автор приводит пример с ноутбуком на Portàtil RTX 3070: из 8 ГБ VRAM было выделено 7 ГБ под swap, а суммарно с RAM, zram и SSD swap система получила около 46 ГБ адресуемой памяти. Предполагаемый порядок переполнения такой: сначала используется RAM, затем VRAM как быстрый swap, затем zram, и только после этого SSD.
Технически NBD-VRAM не добавляет новый драйвер ядра. Небольшой демон выделяет память видеокарты через CUDA Driver API, затем отдаёт её ядру Linux как блочное устройство через NBD — Network Block Device — поверх Unix-сокета. После подключения стандартным nbd-client в системе появляется /dev/nbdX, которое можно разметить как обычный swap через mkswap и включить через swapon.
Автор отдельно подчёркивает, что такой подход выбран из-за ограничений потребительских видеокарт NVIDIA. Более прямой путь через NVIDIA P2P API на GeForce, по его словам, упирается в EINVAL, так как соответствующие возможности фактически доступны только для профессиональных и серверных моделей. Вариант с прямым обращением к BAR1 также не сработал: доступной оказывается только небольшая отображённая область, а чтение из остальной части возвращает нули. NBD-подход обходит это ограничение, так как использует обычные CUDA-копирования cuMemcpyHtoD и cuMemcpyDtoH.
Capacitats
Использование VRAM как обычного Linux intercanviar. После запуска демон предоставляет видеопамять как /dev/nbd0 или другое NBD-устройство, которое для ядра выглядит как стандартное блочное устройство.
Работа без собственного модуля ядра. Проект не требует писать, собирать и сопровождать отдельный kernel module, не использует внутренние символы NVIDIA-драйвера и должен переживать обновления ядра и драйвера без пересборки.
Ориентация на потребительские NVIDIA GPU. В требованиях указаны NVIDIA GPU с поддержкой CUDA, включая потребительские RTX/GTX-карты, официальный NVIDIA-драйвер с libcuda.so.1, модуль nbd в ядре Linux, nbd-client, gcc и make. CUDA Toolkit при этом не нужен.
systemd-интеграция. Установка через install.sh добавляет сервис vram-swap-nbd, который можно запускать через systemctl; после установки сервис включается для автоматического старта при загрузке.
Настройка размера и приоритета swap. В systemd-unit можно задать VRAM_SETUP_SIZE_MB, то есть верхний предел выделяемой VRAM, и VRAM_SWAP_PRIORITY, то есть приоритет swap-устройства. Чем выше приоритет, тем раньше Linux будет использовать этот swap-слой.
Автоматическое уменьшение запрошенного размера. Если требуемый объём VRAM недоступен, демон пытается уменьшать размер блоками по 512 МиБ, чтобы всё равно выделить доступный объём, например если часть памяти уже занята композитором или графической сессией.
Проверочные сценарии. В репозитории есть test-nbd.sh для смоук-теста с записью/чтением 1 МиБ и test-fill.sh для стресс-проверки всего VRAM-раздела.
Заявленная производительность около 1,3 ГБ/с. На RTX 3070 Laptop автор измерил последовательную запись 7 ГБ блоками по 4 МБ примерно на уровне 1,3 ГБ/с.
Scripts
Ноутбуки с распаянной RAM. Главный сценарий — современные ноутбуки, где 16 или 32 ГБ оперативной памяти уже не хватает, но расширить её невозможно. Если в такой машине есть дискретная RTX-карта, часть VRAM можно использовать как дополнительный swap-слой. Это не превращает VRAM в полноценную RAM, но может спасти систему от резкого ухода в медленный SSD swap или от OOM-killer при пиковых нагрузках.
Тяжёлые рабочие окружения разработчика. IDE, браузер с десятками вкладок, Docker-контейнеры, локальные базы данных, сборки больших проектов и тестовые окружения легко создают кратковременные пики потребления памяти. В таком сценарии NBD-VRAM может работать как буфер: не ускорять обычную работу, а смягчать момент, когда RAM закончилась.
Снижение нагрузки на SSD swap. Если swap на SSD используется часто, это не только медленнее, но и создаёт лишнюю запись на накопитель. VRAM-swap можно поставить с более высоким приоритетом, чтобы при переполнении RAM система сначала вытесняла страницы в видеопамять, а уже потом обращалась к SSD. Особенно это актуально для ноутбуков, где SSD тоже часто несъёмный или дорогой в замене.
Комбинация с zram. Автор прямо описывает схему, где VRAM swap получает более высокий приоритет и принимает первый «разлив» памяти, zram используется следующим уровнем, а SSD остаётся последней линией обороны. Такая схема может быть полезна для рабочих станций и ноутбуков, где важнее сохранить отзывчивость системы при нехватке памяти, чем получить максимальную предсказуемость задержек.
Локальные AI/LLM-задачи вокруг GPU, но не вместо VRAM для модели. NBD-VRAM не увеличивает видеопамять, доступную CUDA-приложению как VRAM для модели. Это обратный сценарий: не RAM используется как VRAM, а VRAM используется как swap для обычной памяти Linux. Поэтому проект не позволит напрямую загрузить в GPU модель большего размера. Но он может быть полезен на машине, где рядом с LLM-инференсом работают браузер, IDE, индексаторы, Python-окружения и контейнеры, а системная RAM начинает заканчиваться.
Домашние и экспериментальные рабочие станции. Проект интересен для пользователей, у которых видеокарта часто простаивает вне игр, рендера или ML-задач. Например, 8–12 ГБ VRAM на десктопной GeForce можно временно превратить в дополнительный слой swap для тяжёлых задач компиляции, обработки данных или запуска виртуальных машин.
Restriccions
NBD-VRAM не является заменой оперативной памяти. Доступ к такому swap идёт по цепочке kernel swap → /dev/nbdX → nbd-драйвер → Unix-сокет → демон → CUDA-копирование → VRAM, поэтому задержки и поведение будут отличаться от настоящей RAM. Это скорее аварийный или промежуточный слой между RAM и SSD, чем способ «добавить памяти» без последствий.
Также проект завязан на официальный стек NVIDIA с CUDA. Nouveau/Nova для этого не подходят, так как требуется libcuda.so.1. Phoronix также отмечает, что NBD-VRAM создан именно для потребительских NVIDIA GPU, где альтернативные подходы через NVIDIA P2P API не работают.
В сухом остатке, NBD-VRAM — небольшой, но любопытный системный хак для Linux: он не делает чудес и не заменяет апгрейд RAM, но позволяет использовать простаивающую видеопамять как дополнительную ступень swap перед SSD. Для ноутбуков с распаянной памятью и дискретной RTX-картой это может оказаться практичным способом переживать пиковые нагрузки без немедленного падения приложений или болезненного ухода в медленный накопитель.
Font: linux.org.ru
