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
Для корректной работы функций, требующих vGPU на базе программно-аппаратных решений ускорения графических вычислений в средах виртуализации (далее видеокарты с поддержкой vGPU) NVIDIA необходимо, чтобы на серверы виртуализации ПК СВ "Брест" были установлены драйверы NVIDIA согласно модели видеокарты с поддержкой vGPU.
Данные драйверы не входят в состав сертифицированных на соответствие требованиям по безопасности информации ПК СВ и ОС СН.
После установки драйверов и настройки серверов виртуализации изменяются следующие файлы ПК СВ контрольные суммы которых указаны в файле gostsums.txt состава установочного диска и его обновления:
/usr/bin/sprof/usr/bin/rpcgen/usr/bin/gencat/usr/lib/x86_64-linux-gnu/libmcheck.a
Изменения контрольных сумм не являются нарушением сертифицированных характеристик ПК СВ.
Для проведения контроля целостности данные файлы могут быть исключены из проверки или установлены на контроль с обновленными контрольными суммами.
/usr/bin/sprof — отображает сводку профилирования для общего объекта (общей библиотеки), указанного в качестве первого аргумента командной строки. Сводка профилирования создается с использованием ранее сгенерированных данных профилирования во втором (необязательном) аргументе командной строки.
/usr/bin/rpcgen — инструмент, который генерирует код C для реализации протокола RPC. Входные данные для rpcgen — это язык, похожий на C, известный как RPC Language (язык удаленного вызова процедур).
/usr/bin/gencat — файл каталога сообщений (обычно *.cat), который команда gencat создает из исходных файлов текстов сообщений (обычно *.msg). Команда gencat объединяет исходные файлы текстов сообщений, указанные параметром SourceFile, в форматированный каталог сообщений, указанный параметром CatalogFile.
/usr/lib/x86_64-linux-gnu/libmcheck.a — библиотека функции mcheck, которая устанавливает набор отладочных хуков для семейства функций выделения памяти malloc. Эти хуки вызывают определенные проверки согласованности состояния общей массы запросов в памяти. Проверки могут обнаруживать ошибки приложения, такие как освобождение блока памяти более одного раза или повреждение структур данных учета, которые непосредственно предшествуют блоку выделенной памяти.
Настройка сервера виртуализации
Установка драйвера 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 nouveauCODEНеобходимо выполнить перезагрузку сервера виртуализации.
Установить драйвер 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 enabledCODEПроверить, что в ОС отображается видеокарта, используется драйвер
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, nvidiaCODE
Установка драйвера 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 nouveauCODEНеобходимо выполнить перезагрузку сервера виртуализации.
Установить драйвер 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 enabledCODEПроверить, что в ОС отображается видеокарта, используется драйвер
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, nvidiaCODE
Настройка сервера виртуализации в конфигурации с видеокартой NVIDIA Ampere
Активировать virtfn:
sudo /usr/lib/nvidia/sriov-manage -e 0000:ca:00.00000: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 -icd /sys/bus/pci/devices/0000:ca:00.0/virtfn23/mdev_supported_types- В зависимости от установленной видеокарты, выбрать готовый профиль:
Из серий архитектур видеокарт
NVIDIAAmpere,Turing,Volta,Pascal,Maxwell, тестирование было проведено только на видеокартахNVIDIAA10 иNVIDIAT4. Работоспособность других видеокарт не гарантируется.- Для NVIDIA Ampere:
В данном примере выбран профиль
A10-4Q.
- Для NVIDIA Turing:
В данном примере выбран профиль
Т4-4Q.
- Для NVIDIA Ampere:
Выбрать из списка готовый профиль и удостовериться, что он доступен для создания подключения
mdev, командой:Значения для определения доступности:
1— доступен;0— уже используется.
Ранее выбран профиль
A10-4Q, соответствующий готовому профилюnvidia-593.fori in *;doecho"$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: 1CODEСгенерировать случайный
UUIDдля создания файла подключения:UUIDбудет соответствовать готовому профилюnvidia-593. Действия, описанные ниже, аналогичны для NVIDIA Ampere и NVIDIA Turing.uuidgenecho"a65589d6-99a5-44fe-8519-1d1abea61a55"> nvidia-593/createmdevctl define --auto -u a65589d6-99a5-44fe-8519-1d1abea61a55Если команда
uuidgenне сработала, необходимо установить пакетuuid-runtime:sudo apt install uuid-runtimeCODEПосле установки пакета повторить шаг 5.
После того, как отработает команда
echo, в каталоге/dev/vfio/будет созданmdevфайл, владельцем которого станетoneadmin:oneadmin(согласно правилуudev, настроенному на шаге 3 настройки сервера виртуализации) с правами на чтение и запись. Созданный файл будет использоваться утилитойlibvirtдля подключения в процессе ВМ устройства выбранного профиля в гостевую ОС в качестве графического адаптера. В текущем примереmdevфайл всегда будет создан с номером297, т.к. номер296назначен видеокарте. Проверить списокmdevможно командой (так же выполняется с правами локального администратора):Посмотреть список соответствий созданныхls -l /dev/vfio/mdevподключений:Все подключения в выведенном списке будут отмеченыlsmdevdefined. Эти подключения сохранены в ОС, после перезагрузки сервера виртуализации в списке активации виртуальный функций будут только эти подключения. По умолчанию создаются временный подключения, для того чтобы сделать подключение постоянным в режиме автостарт при активацииvirtfnпосле перезагрузки сервера виртуализации, необходимо выполнить команду:гдеmdevctl define --auto -u $<uuid><uuid>— сгенерированный ранееUUID.После перезагрузки сервера виртуализации достаточно активировать
virtfnи запустить ВМ в шаблоне которой добавлено это подключение. Для удаления ненужных соответствийmdevнеобходимо после остановки процессов ВМ, использующих эти подключения, остановитьmdevустройство командой:и выполнить команду его удаления:mdevctl undefine -u $<uuid>mdevctl stop -u $<uuid>- Чтобы развернуть ВМ с созданными ранее параметрами необходимо:
- перейти в веб-интерфейс ПК СВ и создать шаблон ВМ;
перейти во вкладку Метки и ввести в поле Данные код пробрасываемого готового профиля:

<devices> <hostdev mode='subsystem' type='mdev' model='vfio-pci'> <source> <address uuid='a65589d6-99a5-44fe-8519-1d1abea61a55'/> </source> </hostdev> </devices>CODEВозможно так же редактировать шаблоны уже существующих ВМ, для этого необходимо:
- выключить ВМ;
- в веб-интерфейсе ПК СВ в меню слева выбрать Шаблоны — ВМ;
- из списка ВМ выбрать необходимую, открыть шаблон и нажать кнопку Обновить.
- Запустить ВМ и подключиться к ней через RDP-клиент. Так как драйвер NVIDIA уже установлен, можно проверить проброшенный готовый профиль виртуальной функции, для этого необходимо:
- ввести логин и пароль учетной записи в ОС гостевой ВМ;
- нажать кнопку Пуск, ввести
comp, выбрать Управление компьютером; - в списке слева выбрать Диспетчер устройств:
