GPU Passthrough qemu/virt-manager – Linux хост, Linux гость

Вопрос или проблема

Кратко: хост на 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: Подготовка хост-системы

  1. Проверка поддержки IOMMU

    Убедитесь, что ваша система поддерживает IOMMU, включая настройки в BIOS. Перезагрузите систему и проверьте, включены ли виртуализация и IOMMU (AMD/Intel).

    Для Intel:

    intel_iommu=on

    Для AMD:

    amd_iommu=on

    Убедитесь, что данные параметры добавлены в конфигурацию загрузчика (например, в /etc/default/grub).

  2. Установка необходимых пакетов

    Установите необходимые пакеты для работы с QEMU и Virt-Manager:

    nix-env -iA nixpkgs.qemu nixpkgs.virt-manager nixpkgs.vfio_tools
  3. Настройка модуля 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.

  4. Черный список драйверов

    В том же файле добавьте:

    blacklist nouveau
    blacklist radeon

    Это предотвращает загрузку драйверов для вашего GPU.

  5. Перезагрузите систему для применения изменений.

Шаг 2: Настройка виртуальной машины в Virt-Manager

  1. Создайте новую VM

    Запустите virt-manager, создайте новую виртуальную машину и выберите NixOS ISO в качестве установочного образа.

  2. Настройка аппаратных ресурсов

    Во время настройки выберите числа ядер процессора, оперативную память, которые вы хотите выделить вашей VM.

  3. Конфигурация GPU Passthrough

    На этапе выбора устройства добавьте ваше GPU:

    • Перейдите в настройки вашей VM.
    • Выберите раздел PCI Host Device.
    • Выберите ваш GPU из списка.
  4. Настройка видеоустройства

    Чтобы избежать проблем с отображением, используйте Virtio или QXL. Обратите внимание, что если ваш графический интерфейс требует специфических возможностей NVIDIA, их может не быть в виртуализированном режиме.

  5. Сохраните настройки и запустите машину.

Шаг 3: Установка драйверов на гостевой операционной системе

  1. Драйверы NVIDIA (для гостей)

    Если вы используете NVIDIA GPU, установите соответствующие драйверы в NixOS. Добавьте nvidia в файл конфигурации NixOS, чтобы установить драйвера при следующей сборке системы.

  2. Конфигурация аудио

    Для передачи звука убедитесь, что ваше звуковое устройство настроено и установлены необходимые драйверы (Alsa или PulseAudio).

Шаг 4: Тестирование и отладка

  1. Тестируйте работу

    Запустите гостевую машину и проверьте работу GPU:

    glxinfo | grep "OpenGL renderer"
  2. Используйте Spice/VNC для отображения

    Spice позволяет подключиться к вашей VM с графическим интерфейсом без необходимости устанавливать дополнительные клиенты. Убедитесь, что выбрана опция Spice во вкладке Display настроек вашей VM.

Заключение

GPU Passthrough на Linux с использованием QEMU и Virt-Manager дает отличные возможности для работы с графическими задачами в виртуализированном окружении. Этот процесс может занять время, но в конечном итоге он обычно оправдывает себя. Убедитесь, что все драйверы обновлены и отлажены, а ваш NixOS клиент получает максимальную производительность от выделенного GPU.

Оцените материал
Добавить комментарий

Капча загружается...