Подключение 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
Изменения контрольных сумм не являются нарушением сертифицированных характеристик ПК СВ.
Для проведения контроля целостности данные файлы могут быть исключены из проверки или установлены на контроль с обновленными контрольными суммами.
Настройка сервера виртуализации
Установка драйвера NVIDIA версии 470.103.02 для ядра linux-5.10-generic

Для настройки сервера виртуализации необходимо:
Включить блок управления памятью для операций ввода-вывода
IOMMU
, для этого привести/etc/
default
/grub
к виду:CODEи выполнить команду:
sudo update-grub
Выполнить перезагрузку сервера виртуализации и перейти в
BIOS
.- В BIOS выполнить настройки по активации и поддержке
SR-IOV
иIOMMU
: Установить набор компиляторов:
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
строку:CODEНеобходимо выполнить перезагрузку сервера виртуализации.
Установить драйвер NVIDIA:
sudo sh ./NVIDIA-Linux-x86_64-470.103.02-vgpu-kvm.run
Необходимо выполнить перезагрузку сервера виртуализации.
Подключиться к терминалу сервера управления с помощью
SSH
под учетной записью локального администратора и проверить что в ОС активирован блок управления памятью для операций ввода-выводаIOMMU
:пример корректного вывода:sudo dmesg | grep -e DMAR -e IOMMU
CODEПроверить, что в ОС отображается видеокарта, используется драйвер
NVIDIA
, установлены модулиVFIO
иNVIDIA
:Пример вывода:sudo lspci -nnk -d 10de:
CODE
Установка драйвера NVIDIA версии 535.161.05
для ядра linux-5.15-generic

Для настройки сервера виртуализации необходимо:
Включить блок управления памятью для операций ввода-вывода
IOMMU
, для этого привести/etc/
default
/grub
к виду:CODEи выполнить команду:
sudo update-grub
Выполнить перезагрузку сервера виртуализации и перейти в
BIOS
.- В BIOS выполнить настройки по активации и поддержке
SR-IOV
иIOMMU
: Установить набор компиляторов:
sudo apt install gcc make
Отключить модуль
nouveau
, добавив в файл/etc/modprobe.d/blacklist.conf
строку:CODEНеобходимо выполнить перезагрузку сервера виртуализации.
Установить драйвер NVIDIA:
sudo sh ./
NVIDIA-Linux-x86_64-535.161.05-vgpu-kvm.run
Необходимо выполнить перезагрузку сервера виртуализации.
Подключиться к терминалу сервера управления с помощью
SSH
под учетной записью локального администратора и проверить что в ОС активирован блок управления памятью для операций ввода-выводаIOMMU
:пример корректного вывода:sudo dmesg | grep -e DMAR -e IOMMU
CODEПроверить, что в ОС отображается видеокарта, используется драйвер
NVIDIA
, установлены модулиVFIO
иNVIDIA
:Пример вывода:sudo lspci -nnk -d 10de:
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
привести к виду:CODEПрименить команду можно одним из следующих способов:
- выполнить перезагрузку сервера виртуализации;
в веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Инфраструктура — Узлы и на открывшейся странице Узлы из списка серверов виртуализации выбрать необходимый и открыть его свойства, последовательно нажать кнопки Отключен — Выкл — Включить.
Изменения могут быть не применены, если не будет нажата кнопка Выкл.
После обновления страницы веб-интерфейса ПК СВ в свойствах узла виртуализации появится вкладка PCI и список устройств.
- Создать и применить правило
udev
, для этого:/etc/udev/rules.d/opennebula-vfio.rules
привести к виду: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
. Работоспособность других видеокарт не гарантируется. Выбрать из списка готовый профиль и удостовериться, что он доступен для создания подключения
mdev
, командой:Значения для определения доступности:
1
— доступен;0
— уже используется.
Ранее выбран профиль
A10-4Q
, соответствующий готовому профилюnvidia-593
.for
i in *;
do
echo
"$i"
$(cat $i/name) available: $(cat $i/avail*); done
Пример вывода:
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
Если команда
uuidgen
не сработала, необходимо установить пакетuuid-runtime
:CODEПосле установки пакета повторить шаг 5.
После того, как отработает команда
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>
- Чтобы развернуть ВМ с созданными ранее параметрами необходимо:
- перейти в веб-интерфейс ПК СВ и создать шаблон ВМ;
- перейти во вкладку Метки и ввести в поле Данные код пробрасываемого готового профиля:CODE
Возможно так же редактировать шаблоны уже существующих ВМ, для этого необходимо:
- выключить ВМ;
- в веб-интерфейсе ПК СВ в меню слева выбрать Шаблоны — ВМ;
- из списка ВМ выбрать необходимую, открыть шаблон и нажать кнопку Обновить.
- Запустить ВМ и подключиться к ней через RDP-клиент. Так как драйвер NVIDIA уже установлен, можно проверить проброшенный готовый профиль виртуальной функции, для этого необходимо: