Вопрос или проблема
Кратко: хост на NixOS Linux с запущенным qemu
, настроенным с помощью virt-manager
. Гостевая VM на NixOS. Физическая машина имеет две GPU в собственных группах IOMMU. Хочу использовать более мощную GPU в гостевой NixOS для рендеринга/обработки, но реальное время не важно. Всё еще буду использовать spice или окно через virt-manager
для отображения.
Большинство учебников, которые я нахожу, посвящены передачам GPU для игр на Windows и т.д. В моем случае я хочу запустить очень легкую ОС хоста, которая просто управляет различными ВМ, контейнерами и т.д. Одна из этих ВМ будет моей “рабочей лошадкой” на NixOS. Я планирую заниматься такими вещами, как кодирование видео, рендеринг и т.д., для чего хочу использовать GPU. Реальное время меня действительно не беспокоит, главное, чтобы аудио и видео передавались через spice/VNC и т.д. одновременно для таких задач, как видеомонтаж, например, мои потребности были бы удовлетворены, если бы это было удаленное подключение с низкой задержкой.
Я прошел через несколько различных учебников, чтобы попытаться заставить это работать. В одном я увидел, что нужно сбрасывать BIOS, но это не требовалось в других учебниках. Похоже, что изменения в virt-manager иногда различаются и т.д. Возможно, некоторые из них устарели или изменения нужны для Windows? Многие из них, похоже, нацелены на использование второго монитора или на использование looking-glass
. Я определенно не хочу использовать второй монитор, и я считаю, что какой-то другой “дисплей” излишен в дополнение к работе внутри virt-manager
(я просто запускаю virt-manager
на i3
и разворачиваю ВМ на полный экран, это пока отлично работает для моих потребностей).
В одном тесте я закончил с неработоспособной ОС хоста, и из-за настроек системы шрифт был слишком маленьким, чтобы читать, что происходит. В другом случае я получаю визуализацию в прикрепленном просмотрщике virt-manager
до того момента, как, предполагаю, это часть входа в систему. Возможно, если я настрою другой клиент VNC или spice, я смогу войти там, но опять же, хотел бы избежать этой нагрузки.
Я также прочитал что-то, но не смог найти больше документации, которая это объясняла. Если я выберу “virtio” вместо QXL
, это фактически виртуализирует видеокарту? Возможно, для хоста Linux + гостя Linux нет необходимости в “передаче”? Но я думал, что некоторые приложения могут использовать специальные функции “NVIDIA”, недоступные при виртуализации? У меня также есть две видеокарты, так что, если возможно, я мог бы выделить одну из них.
По сути, я хотел бы понять, что я могу сделать, чтобы создать наименьшую настройку с минимальным количеством зависимостей (например, без looking-glass), чтобы позволить моему гостевому Linux использовать всю мощь GPU, но при этом иметь тот же опыт, что и сейчас с virt-manager
. Ещё лучше, если это можно сделать с использованием существующих опций или пакетов NixOS, которые доступны. Также, поскольку большинство этих учебников говорят о Windows, было бы полезно указать, что нужно делать особенного для гостевой VM Linux.
Ответ или решение
GPU Passthrough с использованием QEMU и Virt-Manager на Linux Hoстe и Linux Гостe
Введение
В текущих реалиях растущих требований к производительности графических вычислений, технология GPU Passthrough и виртуализация становятся все более популярными. Если вы работаете с NixOS в качестве хост-операционной системы и хотите использовать более мощный GPU в гостевой виртуальной машине (VM), данный мануал поможет вам настроить GPU Passthrough с использованием QEMU и Virt-Manager. Мы сосредоточимся на том, чтобы предложить максимально простое и эффективное решение, избегая сложных зависимостей и избыточных решений.
Шаг 1: Подготовка хост-системы
-
Проверка поддержки IOMMU
Убедитесь, что ваша система поддерживает IOMMU, включая настройки в BIOS. Перезагрузите систему и проверьте, включены ли виртуализация и IOMMU (AMD/Intel).
Для Intel:
intel_iommu=on
Для AMD:
amd_iommu=on
Убедитесь, что данные параметры добавлены в конфигурацию загрузчика (например, в
/etc/default/grub
). -
Установка необходимых пакетов
Установите необходимые пакеты для работы с QEMU и Virt-Manager:
nix-env -iA nixpkgs.qemu nixpkgs.virt-manager nixpkgs.vfio_tools
-
Настройка модуля VFIO
Создайте файл
/etc/modprobe.d/vfio.conf
с содержимым:options vfio-pci ids=0000:01:00.0,0000:01:00.1
Здесь
0000:01:00.0
и0000:01:00.1
— это идентификаторы вашего GPU. Определите их, используя командуlspci
. -
Черный список драйверов
В том же файле добавьте:
blacklist nouveau blacklist radeon
Это предотвращает загрузку драйверов для вашего GPU.
-
Перезагрузите систему для применения изменений.
Шаг 2: Настройка виртуальной машины в Virt-Manager
-
Создайте новую VM
Запустите
virt-manager
, создайте новую виртуальную машину и выберите NixOS ISO в качестве установочного образа. -
Настройка аппаратных ресурсов
Во время настройки выберите числа ядер процессора, оперативную память, которые вы хотите выделить вашей VM.
-
Конфигурация GPU Passthrough
На этапе выбора устройства добавьте ваше GPU:
- Перейдите в настройки вашей VM.
- Выберите раздел
PCI Host Device
. - Выберите ваш GPU из списка.
-
Настройка видеоустройства
Чтобы избежать проблем с отображением, используйте Virtio или QXL. Обратите внимание, что если ваш графический интерфейс требует специфических возможностей NVIDIA, их может не быть в виртуализированном режиме.
-
Сохраните настройки и запустите машину.
Шаг 3: Установка драйверов на гостевой операционной системе
-
Драйверы NVIDIA (для гостей)
Если вы используете NVIDIA GPU, установите соответствующие драйверы в NixOS. Добавьте
nvidia
в файл конфигурации NixOS, чтобы установить драйвера при следующей сборке системы. -
Конфигурация аудио
Для передачи звука убедитесь, что ваше звуковое устройство настроено и установлены необходимые драйверы (Alsa или PulseAudio).
Шаг 4: Тестирование и отладка
-
Тестируйте работу
Запустите гостевую машину и проверьте работу GPU:
glxinfo | grep "OpenGL renderer"
-
Используйте Spice/VNC для отображения
Spice позволяет подключиться к вашей VM с графическим интерфейсом без необходимости устанавливать дополнительные клиенты. Убедитесь, что выбрана опция Spice во вкладке
Display
настроек вашей VM.
Заключение
GPU Passthrough на Linux с использованием QEMU и Virt-Manager дает отличные возможности для работы с графическими задачами в виртуализированном окружении. Этот процесс может занять время, но в конечном итоге он обычно оправдывает себя. Убедитесь, что все драйверы обновлены и отлажены, а ваш NixOS клиент получает максимальную производительность от выделенного GPU.