Проброс видеокарты kvm linux

Проброс видеокарты Nvidia GeForce в виртуальную машину KVM

Рассмотрим, как пробросить графический адаптер Nvidia GeForce в виртуальную машину Windows 10 с хоста KVM (на базе Linux CentOS 8).

проброс видеокарты Nvidia geforce в KVM

В BIOS хоста KVM должна быть включена поддержка IOMMU. Проверьте, что в /etc/default/grub включена поддержка IOMMU. Если нет, добавьте в файл строку:

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet intel_iommu=on"

# grub2-mkconfig -o /boot/grub2/grub.cfg

Отключите драйвер nouveau, который может вызвать проблемы с привязкой vfio-pci к видеокарте.

# grubby —update-kernel=ALL —args=»rd.driver.blacklist=nouveau nouveau.modeset=0″
# mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
# dracut /boot/initramfs-$(uname -r).img $(uname -r)
# echo ‘blacklist nouveau’ > /etc/modprobe.d/nouveau-blacklist.conf

Выведите список доступных видеокарт на хосте KVM:

Каждая видеокарта состоит из нескольких компонентов. Например:

82:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] [10de:1e07] (rev a1) 82:00.1 Audio device [0403]: NVIDIA Corporation TU102 High Definition Audio Controller [10de:10f7] (rev a1) 82:00.2 USB controller [0c03]: NVIDIA Corporation TU102 USB 3.1 Host Controller [10de:1ad6] (rev a1) 82:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU102 USB Type-C UCSI Controller [10de:1ad7] (rev a1)

Скопируйте VID:PID устройств, которые нужно пробросить в ВМ.

Создайте файл /etc/modprobe.d/vfio.conf и добавьте в него строку со списком, доступных для vfio-pci (список в одной строке):

options vfio-pci ids=10de:1e07, 10de:10f7, 10de:1ad6, 10de:1ad7
# echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf

Проверьте, что графические карты доступны в режиме vfio:

В выводе должны присутствовать строки:

Kernel driver in use: vfio-pci Kernel modules: nouveau

В моем примере я создал на хосте KVM чистую ВМ (с UEFI firmware) с Windows 10 и выключил ее. Теперь нужно отредактировать конфигурационный XML файл виртуальной машины KVM.

И в конце конфигурационного файла перед тегами добавьте следующую конфигурацию:

В этом примере мы хотим пробросить в ВМ устройства все устройства с видеокарты 82:00. На ней доступны 4 функции, мы добавили их все в XML файл:

  • VGA controller (82:00.0)
  • Audio device (82:00.1)
  • USB 3.1 Host Controller3.1 (82:00.2)
  • USB Type-C UCSI Controller (82:00.3)
Читайте также:  About rpm in linux

Сохраните XML файл и запустите ВМ. Windows должна определить новое графическое устройство и вы можете установить драйвера Nvidia.

Источник

Проброс видеокарты в виртуальную машину

Две разные системы (win + linux) на одной аппаратной базе — реальность. В этом нет ничего нового или инновационного (на данный момент времени), но если требуется максимальная производительность гостевой системы, то не обойтись без проброса реальных устройств в виртуальную машину. Проброс сетевых карт, usb-контроллеров (etc) экстраординарных особенностей не несёт, а вот попытка «шаринга» ресурсов видеокарты и процессора вполне может принести некоторое количество проблем.

Итак, а для чего, собственного говоря, городить системы с полнофункциональным использованием ресурсов GPU и CPU? Самый простой и очевидный ответ — игры (широко известный факт — если не большинство, то очень многие, написаны под ОС Windows). Другой вариант — полноценное рабочее место с возможностью запуска требовательных приложений (например, CAD-софта), быстрым бэкапом (скопировать файл ВМ куда проще, чем создавать полную копию HDD/SSD) и опцией полного контроля сетевого трафика гостевой системы.

2. Аппаратная часть

Процессор: Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz

Материнская плата: ASRock Z390 Phantom Gaming 4S

Видеокарта 0 (для проброса в ВМ): Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X]

Видеокарта 1 (для хост-системы): Park [Mobility Radeon HD 5430]

USB-контроллер (для проброса в ВМ и последующего подключения периферийных устройств, например, клавиатуры): VIA Technologies, Inc. VL805 USB 3.0 Host Controller

3. Настройки ОС

В качестве хост-системы выбрана ОС AlmaLinux 8 (вариант установки«Server with GUI»). Долгое время пользовался CentOS 7/8, поэтому, думаю, выбор тут очевиден.

Первое, что необходимо сделать, — это ограничить использование видеокарты, предназначенной для использования в ВМ, хост-системой. Для этого применяем ряд команд и настроек:
1) с помощью команды « lspci -nn | grep RX » получаем уникальные идентификаторы видеокарты. Т. к. видеокарта RX-серии, то, соответственно, ищем в выводе lspci (утилита устанавливается посредством команды « dnf install pciutils ») по этим двум символам. Вывод получим примерно такой (выделенные подстроки — это и есть искомые идентификаторы устройств) —

Читайте также:  Virtualbox размер экрана linux

«02:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Lexa PRO [Radeon 540/540X/550/550X / RX 540X/550/550X] [1002:699f] (rev c7)

02:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X] [1002:aae0] », где 1002:699f — идентификатор VGA-контроллера, а 1002:aae0 — встроенной аудиокарты. Также запоминаем идентификаторы «02:00.0» и «02:00.1»;

2) добавив к команде « lspci -nn » ключ « k » (« lspci -nnk ») находим в выводе устройство «1002:699f» и запоминаем значение «Kernel driver in use» . В моём случае — это « amdgpu »;

3) в файле « /etc/default/grub » находим строку, начинающуюся с « GRUB_CMDLINE_LINUX », и добавляем после « quiet » значения «intel_iommu=on iommu=on rd.driver.pre=pci-stub pci-stub.ids=1002:699f,1002:aae0», где « intel_iommu / iommu » – параметры, отвечающие за поддержку технологии IOMMU (технология взаимодействия виртуальных машин с реальным оборудованием), «rd.driver.pre=pci-stub» — указание на принудительную первоочередную загрузку фиктивного драйвера pci-sub, «pci-stub.ids» — перечисление устройств, для которых при загрузке ядра необходимо использовать фиктивный драйвер (т.е. происходит изоляция устройств для дальнейшего использования в виртуальных машинах). Если на хост-машине используется CPU от AMD, то «intel_iommu» меняем на «amd_iommu»;

4) в файл « /etc/modprobe.d/local.conf » добавляем строки « blacklist amdgpu » и « options pci-stub ids=1002:699f,1002:aae0 », где « blacklist amdgpu » — явное указание на запрет использования драйвера AMD для графических устройств, а « options pci-stub ids=1002:67ff,1002:aae0 » — явное указание на использование фиктивного драйвера для соответствующих идентификаторов устройств;

5) выполняем команду « grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg » (т.е. пересоздаём конфигурационный файл загрузчика GRUB). Если речь не про EFI-загрузку, то команда выглядит так — « grub2-mkconfig -o /boot/grub2/grub.cfg »;

6) выполняем команду « dracut —regenerate-all —force » для пересоздания образа initramfs (initial RAM disk image, загружаемый в оперативную память файл с образом файловой системы), используемого при загрузке Linux в качестве первоначальной корневой файловой системы;

Читайте также:  What is compatibility mode linux mint

7) перезагружаем хост виртуализации.

Смысл этих настроек в том, чтобы ограничить использование определённых устройств при загрузке. Например, до прописания параметров в выводе команды «lspci -v» для VGA-контроллера будет присутствовать подстрока « Kernel driver in use: amdgpu », а после перезагрузки – « Kernel driver in use: pci-stub ». При старте же ВМ с Windows (и после проброса устройств) – “ Kernel driver in use: vfio-pci ” (в чём можно убедиться после запуска созданной ВМ). Важный момент — используемая для хост-системы видеокарта должна использовать драйвера, отличные от используемых для пробрасываемой видеокарты, например, в моём случае используется «Radeon HD 5430», драйвер для которой — это «radeon» (в выводе « lspci -v » – « Kernel driver in use: radeon »).

4. Установка софта для виртуализации

1) « dnf install epel-release ».

2) « dnf install qemu-kvm qemu-img libvirt virt-install libvirt-client virt-viewer virt-manager seabios numactl perf cockpit cockpit-machines xauth virt-top libguestfs-tools ».

4) Optional. « dnf install perl » (Perl – one love).

5. Настройки ВМ QEMU-KVM via virt-manager

Предварительно скачиваем iso-образ Windows 10 и драйвера Virtio от RedHat (тоже в виде iso-образа).

При первоначальной установке всегда ставим галочку « Customize configuration before install ».

1) Указываем iso-образ устанавливаемой операционной системы (например, Windows 10). Также добавляем дополнительное устройство вида «CD-ROM» и монтируем в доп. устройство iso-образ с драйверами Virtio.

2) Для виртуального HDD (куда планируется установка ОС) выставляем: « Bus type = Virtio ». Тип виртуального диска — qcow2 или raw.

3) Для более эффективной работы размещаем основной виртуальный диск для ВМ на SSD.

4) Модель сетевой карты — virtio.

5) Overview: chipset = “Q35”, firmware = “UEFI x86_64: /usr/share/OVMF/OVMF_CODE.secboot.fd”.

6) OS Information: Operation System = “Microsoft Windows 10”.

7) CPU (соответствующие блоки в XML должны выглядеть именно так, если речь про аналогичную аппаратную конфигурацию):

Источник

Оцените статью
Adblock
detector