Download PDF
Download page Подключение NVIDIA vGPU к ВМ.
Подключение NVIDIA vGPU к ВМ
Перед выполнением действий, описанных ниже, необходимо подключиться к терминалу сервера управления с помощью SSH
под учетной записью локального администратора.
Данный пример настройки применим только для драйвера NVIDIA-Linux-x86_64-
470.103
.
02
-vgpu-kvm.run
(только на ядре linux-5.10-generic
) и драйвера NVIDIA-Linux-x86_64-535.161.05-vgpu-kvm.run
(только на ядре linux-5.15-generic
).
Настройка сервера виртуализации
Установка драйвера NVIDIA версии 470.103.02 для ядра linux-5.10-generic
Для настройки сервера виртуализации необходимо:
Включить блок управления памятью для операций ввода-вывода
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
:Этот шаг актуален только для драйвера
NVIDIA-Linux-x86_64-
470.103
.
02
-vgpu-kvm.run
. Для драйвераNVIDIA-Linux-x86_64-535.161.05-vgpu-kvm.run
этот шаг нужно пропустить.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
Установка драйвера NVIDIA версии 535.161.05
для ядра linux-5.15-generic
Для настройки сервера виртуализации необходимо:
Включить блок управления памятью для операций ввода-вывода
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
Отключить модуль
nouveau
, добавив в файл/etc/modprobe.d/blacklist.conf
строку:blacklist nouveau
CODEНеобходимо выполнить перезагрузку сервера виртуализации.
Установить драйвер NVIDIA:
sudo sh ./
NVIDIA-Linux-x86_64-535.161.05-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
Настройка сервера виртуализации в конфигурации с видеокартой NVIDIA Ampere
Активировать 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 Turing
В текущем примере используется видеокарта Turing Т4, которая не поддерживает SR-IOV
активацию virtfn
, потому что в данной видеокарте уже есть настроенные профили, в каждом из которых можно создать несколько устройств mdev
т.к. количество available_instances
больше 1
.
После настройки сервера виртуализации необходимо проверить доступные готовые профили:
sudo ls /sys/bus/pci/devices/
0000
:
17
:
00.0
/mdev_supported_types
Подготовка сервера виртуализации
Для подготовки сервера виртуализации необходимо:
На сервере управления (если используется алгоритм
RAFT
, то на всех серверах управления) выполнить настройки фильтра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
- Перезагрузить сервер виртуализации:
sudo reboot
Настройка шаблона ВМ
Перед выполнением действий, приведенных ниже, необходимо подготовить образы дисков с установленной гостевой ОС Windows 10. На основе этих образов будут развернуты ВМ с пробросом готовых профилей виртуальных функций. Для ПК СВ в текущей версии доступен единственный способ реализации — добавление virtfn
через RAW Data
. Этот способ позволяет контролировать используемое количество профилей виртуальных функций, делать mdev
подключения постоянно хранимыми в ОС, а так же пробрасывать или менять профили virtfn
в уже существующие ВМ.
Для настройки шаблона ВМ необходимо:
Выбрать предпочитаемый номер ВМ из списка, выполнив:
sudo ls -l /sys/bus/pci/devices/
0000
:ca:
00.0
/ | grep virtfn
В данном примере была выбрана виртуальная функция
virtfn23
, с адресомca:03.3
.Перейти в каталог с правами привилегированного пользователя:
sudo -i
cd /sys/bus/pci/devices/0000:ca:00.0/virtfn23/mdev_supported_types
- В зависимости от установленной видеокарты, выбрать готовый профиль:
Из серий архитектур видеокарт
NVIDIA
Ampere
,Turing
,Volta
,Pascal
,Maxwell
, тестирование было проведено только на видеокартахNVIDIA
A10 иNVIDIA
T4
. Работоспособность других видеокарт не гарантируется.- Для NVIDIA Ampere:
В данном примере выбран профиль
A10-4Q
. - Для NVIDIA Turing:
В данном примере выбран профиль
Т4-4Q
.
- Для NVIDIA Ampere:
Выбрать из списка готовый профиль и удостовериться, что он доступен для создания подключения
mdev
, командой:Значения для определения доступности:
1
— доступен;0
— уже используется.
Ранее выбран профиль
A10-4Q
, соответствующий готовому профилюnvidia-593
.for
i in *;
do
echo
"$i"
$(cat $i/name) available: $(cat $i/avail*); done
Пример вывода:
nvidia-588 NVIDIA A10-1B available: 1 nvidia-589 NVIDIA A10-2B available: 1 nvidia-590 NVIDIA A10-1Q available: 1 nvidia-591 NVIDIA A10-2Q available: 1 nvidia-592 NVIDIA A10-3Q available: 1 nvidia-593 NVIDIA A10-4Q available: 1 nvidia-594 NVIDIA A10-6Q available: 1 nvidia-595 NVIDIA A10-8Q available: 1 nvidia-596 NVIDIA A10-12Q available: 1 nvidia-597 NVIDIA A10-24Q available: 1 nvidia-598 NVIDIA A10-1A available: 1 nvidia-599 NVIDIA A10-2A available: 1 nvidia-600 NVIDIA A10-3A available: 1 nvidia-601 NVIDIA A10-4A available: 1 nvidia-602 NVIDIA A10-6A available: 1 nvidia-603 NVIDIA A10-8A available: 1 nvidia-604 NVIDIA A10-12A available: 1 nvidia-605 NVIDIA A10-24A available: 1 nvidia-610 NVIDIA A10-4C available: 1 nvidia-611 NVIDIA A10-6C available: 1 nvidia-612 NVIDIA A10-8C available: 1 nvidia-613 NVIDIA A10-12C available: 1 nvidia-614 NVIDIA A10-24C available: 1
CODEСгенерировать случайный
UUID
для создания файла подключения:UUID
будет соответствовать готовому профилюnvidia-593
. Действия, описанные ниже, аналогичны для NVIDIA Ampere и NVIDIA Turing.uuidgen
echo
"a65589d6-99a5-44fe-8519-1d1abea61a55"
> nvidia-
593
/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
, выбрать Управление компьютером; - в списке слева выбрать Диспетчер устройств: