На просторах репозитория GitHub появился необычный проект NBD-VRAM от пользователя с никнеймом c0deJedi Sean — с его помощью можно использовать часть видеопамяти NVIDIA GPU как swap-пространство в операционной системе Linux. Подписывайтесь на Telegram-канал про технологии
Автор разработки описал свою идею довольно просто: когда Linux начинает использовать часть памяти на твердотельном или жёстком диске в качестве swap-пространства, можно перед ними поставить ещё один слой в виде видеопамяти.
В качестве примера выбран ноутбук с видеокартой RTX 3070 Laptop с 8 ГБ памяти. Благодаря использованию 7 ГБ видеопамяти, суммарный объём адресуемой памяти вместе с RAM, zram и SSD swap составил 46 ГБ. Сценарий использования выглядит следующим образом: сначала система задействует оперативную память, далее идёт видеопамять графического ускорителя, после чего вход вступают быстрый swap, zram и SSD.
Подобный подход можно использовать в следующих сценариях: на ноутбуках с распаянной RAM, где объёма оперативной памяти не хватает для решения тех или иных задач; для ресурсоёмкого рабочего окружения разработчика, включая Docker-контейнеры, локальные базы данных, сборки больших проектов и так далее; при необходимости снизить нагрузку на SSD при частом его использовании в качестве swap-пространства; для создания домашних рабочих станций, когда графический ускоритель часто простаивает без дела.
Автор проекта отметил, что подобный подход выбран из-за ограничений в потребительских картах NVIDIA. Попытка прямого использования NVIDIA P2P API, как говорит c0deJedi Sean, упирается в ошибку Invalid argument, так как такие возможности доступны исключительно на профессиональных моделях GPU. Если же напрямую обращаться к BAR1 (регистру базового кода), система видит только крохотную область, а чтение из остальной части возвращает нули.
Одним из главных достоинств метода является работа без собственного модуля ядра, то есть от пользователя не требуется писать, собирать и сопровождать отдельный kernel module. NBD-VRAM ориентирован на потребительские видеокарты NVIDIA, а при недостатке необходимой памяти VRAM пытается уменьшить его блоками по 512 МиБ.
Более подробную информацию можно получить на странице проекта в GitHub.
Источник: trashbox.ru