Download PDF
Download page Подключение NVIDIA vGPU к ВМ.
Подключение NVIDIA vGPU к ВМ
Перед выполнением действий, описанных ниже, необходимо подключиться к терминалу сервера управления с помощью SSH
под учетной записью локального администратора.
В данном примере используется драйвер NVIDIA-Linux-x86_64-
470.103
.
02
-vgpu-kvm.run
, который содержит механизм SR-IOV
manage
для разблокировки virtfn
. Приведенная версия драйвера работает только на ядре linux-5.10-generic
. Для более новых версий драйвера возможна работа с версией ядра linux-5.15-generic
.
Настройка сервера виртуализации в конфигурации с видеокартой NVIDIA Ampere
Для настройки сервера виртуализации необходимо :
Включить блок управления памятью для операций ввода-вывода
IOMMU
, для этого привести/etc/
default
/grub
к виду:-------------------------------------------------------------------------------------------------------- GRUB_CMDLINE_LINUX_DEFAULT="parsec.max_ilev=127 parsec.ccnr_relax=1 intel_iommu=on quiet net.ifnames=0" --------------------------------------------------------------------------------------------------------
CODEи выполнить команду:
sudo update-grub
Выполнить перезагрузку сервера виртуализации и перейти в
BIOS
.- В BIOS выполнить настройки по активации и поддержке
SR-IOV
иIOMMU
:- перейти во вкладку Advanced — PCI Subsystem support;
- для параметра SR-IOV Support выбрать Enabled:
- перейти во вкладку Socket Configuration — II0 Configuration;
- для параметра Intel@ VT for Directed I/0 выбрать Enable:
- применить изменения, нажав комбинацию клавиш <F10+Enter>.
Установить набор компиляторов:
sudo apt install gcc make
Установить ядро
linux-image-
5.10
-generic
:sudo apt install linux-image-5.10-generic linux-headers-5.10-generic
Отключить модуль
nouveau
, добавив в файл/etc/modprobe.d/blacklist.conf
строку:blacklist nouveau
CODEНеобходимо выполнить перезагрузку сервера виртуализации.
Установить драйвер NVIDIA:
sudo sh ./NVIDIA-Linux-x86_64-
470.103
.
02
-vgpu-kvm.run
Необходимо выполнить перезагрузку сервера виртуализации.
Подключиться к терминалу сервера управления с помощью
SSH
под учетной записью локального администратора и проверить что в ОС активирован блок управления памятью для операций ввода-выводаIOMMU
:пример корректного вывода:sudo dmesg | grep -e DMAR -e IOMMU
[ 1.802231] DMAR: IOMMU enabled
CODEПроверить, что в ОС отображается видеокарта, используется драйвер
NVIDIA
, установлены модулиVFIO
иNVIDIA
:Пример вывода:sudo lspci -nnk -d 10de:
locadmin@node2:~$ sudo lspci -nnk -d 10de: 0000:17:00.0 3D controller [0302]: NVIDIA Corporation TU10GL [Tesla T4] [10de:1eb8] (rev a1) Subsystem: NVIDIA Corporation TU10GL [Tesla T4] [10de:12a2] Kernel driver in use: nvidia Kernel modules: nvidiafb, nouveau, nvidia_vgpu_vfio, nvidia
CODEАктивировать
virtfn
:гдеsudo /usr/lib/nvidia/sriov-manage -e
0000
:ca:
00.0
0000
:ca:
00.0
— физический PCI-адрес видеокарты.Необходимо активировать
virtfn
после каждой перезагрузки сервера виртуализации.Чтобы просмотреть список функций ресурсов видеокарты нужно выполнить команду:
sudo ls -l /sys/bus/pci/devices/
0000
:ca:
00.0
/ | grep virtfn
Настройка сервера виртуализации в конфигурации с видеокартой NVIDIA Tesla
В текущем примере используется видеокарта Tesla Т4, которая не поддерживает SR-IOV
активацию virtfn
.
Для настройки сервера виртуализации необходимо выполнить шаги 1-9, после чего проверить доступные готовые профили:
sudo ls /sys/bus/pci/devices/
0000
:
17
:
00.0
/mdev_supported_types
На основе одного выбранного готового профиля можно создать несколько устройств mdev
т.к. количество available_instances
больше 1
.
Подготовка сервера виртуализации
Для подготовки сервера виртуализации необходимо:
Выполнить настройки фильтра
PCI
свойств узла виртуализации, для этого/var/lib/one/remotes/etc/im/kvm-probes.d/pci.conf
привести к виду:# or # # :filter: '*:*' # all devices # # or # # :filter: '0:0' # no devices # :filter: '*:*'
CODEПрименить команду можно одним из следующих способов:
- выполнить перезагрузку сервера виртуализации;
в веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Инфраструктура — Узлы и на открывшейся странице Узлы из списка серверов виртуализации выбрать необходимый и открыть его свойства, последовательно нажать кнопки Отключен — Выкл — Включить.
Изменения могут быть не применены, если не будет нажата кнопка Выкл.
После обновления страницы веб-интерфейса ПК СВ в свойствах узла виртуализации появится вкладка PCI и список устройств.
- Создать и применить правило
udev
, для этого:/etc/udev/rules.d/opennebula-vfio.rules
привести к виду:SUBSYSTEM=="vfio", OWNER="oneadmin", GROUP="oneadmin", MODE="0600"
CODEВыполнить команду:
sudo udevadm control --reload-rules && udevadm trigger
Настройка шаблона ВМ
Перед выполнением действий, приведенных ниже, необходимо подготовить образы дисков с установленной гостевой ОС Windows 10. На основе этих образов будут развернуты ВМ с пробросом готовых профилей виртуальных функций. Для ПК СВ в текущей версии доступен единственный способ реализации — добавление virtfn
через RAW Data
. Этот способ позволяет контролировать используемое количество профилей виртуальных функций, делать mdev
подключения постоянно хранимыми в ОС, а так же пробрасывать или менять профили virtfn
в уже существующие ВМ.
Для настройки шаблона ВМ необходимо:
Выбрать предпочитаемый номер ВМ из списка, выполнив:
sudo ls -l /sys/bus/pci/devices/
0000
:ca:
00.0
/ | grep virtfn
В данном примере был выбран номер
ca:03.3
.Перейти в каталог с правами привилегированного пользователя:
sudo -i
cd /sys/
class
/mdev_bus/
0000
:ca:
03.3
/mdev_supported_types
- В зависимости от установленной видеокарты, выбрать готовый профиль:
- Для NVIDIA Ampere:
В данном примере выбран профиль
A10-4Q
. Для NVIDIA Tesla:
В данном примере выбран профиль
Т4-4Q
.
- Для NVIDIA Ampere:
Проверить название профиля командой:
гдеgrep -l
"<vGPU_type>"
nvidia-*/name
<vGPU_type>
— выбранный профиль.Проверить доступен ли выбранный профиль для создания в нем подключения
mdev
:cat nvidia-
593
/available_instances
Значения для NVIDIA Ampere:
- 1 — доступен;
- 0 — используется.
Значения для NVIDIA Tesla:
- 1 и более — доступен;
- 0 — используется.
Сгенерировать случайный
UUID
для создания файла подключения:UUID
будет соответствовать 593 профилю виртуальной функцииca:03.3
. Действия, описанные ниже, аналогичны для NVIDIA Ampere и NVIDIA Tesla.uuidgen
echo
"a65589d6-99a5-44fe-8519-1d1abea61a55"
> nvidia-
592
/create
mdevctl define --auto -u a65589d6-99a5-44fe-
8519
-1d1abea61a55
После того, как отработает команда
echo
, в каталоге/dev/vfio/
будет созданmdev
файл, владельцем которого станетoneadmin:oneadmin
(согласно правилуudev
, настроенному на шаге 3 настройки сервера виртуализации) с правами на чтение и запись. Созданный файл будет использоваться утилитойlibvirt
для подключения в процессе ВМ устройства выбранного профиля в гостевую ОС в качестве графического адаптера. В текущем примереmdev
файл всегда будет создан с номером297
, т.к. номер296
назначен видеокарте. Проверить списокmdev
можно командой (так же выполняется с правами локального администратора):
Посмотреть список соответствий созданныхls -l /dev/vfio/
mdev
подключений:
Все подключения в выведенном списке будут отмеченыlsmdev
defined
. Эти подключения сохранены в ОС, после перезагрузки сервера виртуализации в списке активации виртуальный функций будут только эти подключения. По умолчанию создаются временный подключения, для того чтобы сделать подключение постоянным в режиме автостарт при активацииvirtfn
после перезагрузки сервера виртуализации, необходимо выполнить команду:
гдеmdevctl define --auto -u $<uuid>
<uuid>
— сгенерированный ранееUUID
.После перезагрузки сервера виртуализации достаточно активировать
virtfn
и запустить ВМ в шаблоне которой добавлено это подключение. Для удаления ненужных соответствийmdev
необходимо после остановки процессов ВМ, использующих эти подключения, остановитьmdev
устройство командой:
и выполнить команду его удаления:mdevctl undefine -u $<uuid>
mdevctl stop -u $<uuid>
- Чтобы развернуть ВМ с созданными ранее параметрами необходимо:
- перейти в веб-интерфейс ПК СВ и создать шаблон ВМ;
перейти во вкладку RAWdata и ввести в поле код пробрасываемого готового профиля:
<devices> <hostdev mode='subsystem' type='mdev' model='vfio-pci'> <source> <address uuid='a65589d6-99a5-44fe-8519-1d1abea61a55'/> </source> </hostdev> </devices>
CODEВозможно так же редактировать шаблоны уже существующих ВМ, для этого необходимо:
- выключить ВМ;
- в веб-интерфейсе ПК СВ в меню слева выбрать Шаблоны — ВМ;
- из списка ВМ выбрать необходимую, открыть шаблон и нажать кнопку Обновить.
- Запустить ВМ и подключиться к ней через RDP-клиент. Так как драйвер NVIDIA уже установлен, можно проверить проброшенный готовый профиль виртуальной функции, для этого необходимо:
- ввести логин и пароль учетной записи в ОС гостевой ВМ;
- нажать кнопку Пуск, ввести
comp
, выбрать Управление компьютером; - в списке слева выбрать Диспетчер устройств: