Развертывание графических устройств с помощью дискретного назначения устройств
Узнайте, как использовать дискретное назначение устройств (DDA) для передачи всего устройства PCIe в виртуальную машину с помощью PowerShell. Это позволяет обеспечить высокий уровень производительности доступа к устройствам, таким как хранилище NVMe или графические карта из виртуальной машины при использовании собственных драйверов устройства. Дополнительные сведения о устройствах, которые работают и могут повлиять на безопасность, см. в разделе "Планирование развертывания устройств с помощью дискретного назначения устройств".
В этой статье описаны действия по использованию устройства с DDA:
- Настройка виртуальной машины для DDA
- Отключение устройства из раздела узла
- Назначение устройства гостевой виртуальной машине
Необходимые компоненты
Прежде чем использовать DDA для развертывания графических устройств, вам потребуется следующее.
Узел Hyper-V под управлением Windows Server 2016 или более поздней версии.
Виртуальная машина под управлением одной из следующих операционных систем:
Windows Server 2016 или более поздней версии.
Windows 10 или более поздней версии.
Просмотрите план развертывания устройств с помощью дискретного назначения устройств, чтобы обеспечить совместимость оборудования с DDA.
- Запустите surveyDDA.ps1. Скрипт PowerShell для определения правильности настройки сервера. Сценарий также показывает, какие устройства можно передавать с помощью дискретного назначения устройств.
Администратор istrative rights to the Hyper-V host.
(Необязательно) Хотя не требуется, если виртуализация одно корневых операций ввода-вывода (SR-IOV) не включена или поддерживается, при развертывании графических устройств может возникнуть проблема при использовании DDA.
Настройка виртуальной машины для DDA
Первым шагом в решении является устранение ограничений DDA для виртуальных машин.
Войдите в узел Hyper-V от имени администратора.
Откройте командную строку с повышенными привилегиями PowerShell.
Automatic Stop Action
Настройте виртуальную машину, чтобы включить TurnOff с помощью следующего командлета PowerShell:Set-VM -Name VMName -AutomaticStopAction TurnOff
Подготовка виртуальных машин для графических устройств
Некоторые аппаратные средства лучше выполняются, если виртуальная машина настроена определенным образом. Дополнительные сведения о том, нужны ли следующие конфигурации оборудования, обратитесь к поставщику оборудования. Дополнительные сведения см. в разделе "Планирование развертывания устройств" с помощью дискретного назначения устройств и в этой записи блога.
Включите объединение записей на ЦП с помощью следующего командлета:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Настройте 32-разрядное пространство памяти, сопоставленное с операцией ввода-вывода (MMIO), с помощью следующего командлета:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Настройте больше 32-разрядного пространства MMIO с помощью следующего командлета:
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Совет
Отображаемые значения пространства MMIO являются разумными значениями для экспериментирования с одним GPU. Если после запуска виртуальной машины устройство сообщает об ошибке, связанной с недостаточными ресурсами, скорее всего, потребуется изменить эти значения. Дополнительные сведения о том, как точно вычислить требования MMIO, см. в разделе "Планирование развертывания устройств с помощью дискретного назначения устройств".
Отключение устройства из раздела узла
Следуйте инструкциям в этом разделе, чтобы отключить устройство из раздела узла.
Установка драйвера секционирования (необязательно)
DDA предоставляет поставщикам оборудования возможность предоставлять драйвер защиты безопасности на своих устройствах. Этот драйвер не совпадает с драйвером устройства, установленным на гостевой виртуальной машине. Это до усмотрения поставщика оборудования, чтобы предоставить этот драйвер. Но если они предоставляют драйвер, установите его перед отключением устройства из раздела узла. Обратитесь к поставщику оборудования, чтобы узнать, есть ли у них драйвер устранения рисков.
Если драйвер секционирования не указан, во время отключения необходимо использовать -Force
параметр для обхода предупреждения системы безопасности. Дополнительные сведения о последствиях безопасности см. в разделе "Планирование развертывания устройств с помощью дискретного назначения устройств".
Поиск пути расположения устройства
Путь к расположению PCI необходим для отключения и подключения устройства с узла. Пример пути расположения выглядит следующим образом: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
Дополнительные сведения о поиске пути расположения см. в разделе "Планирование развертывания устройств с помощью дискретного назначения устройств".
Отключение устройства
Используйте диспетчер устройств или PowerShell, чтобы убедиться, что устройство отключено.
Отключение устройства
В зависимости от того, предоставил ли поставщик драйвер устранения рисков, необходимо либо использовать -Force
этот параметр, как показано ниже:
Если драйвер устранения рисков установлен, используйте следующий командлет:
Dismount-VMHostAssignableDevice -LocationPath $locationPath
Если драйвер устранения рисков не установлен, используйте следующий командлет:
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
Назначение устройства гостевой виртуальной машине
Последний шаг — сообщить Hyper-V, что виртуальная машина должна иметь доступ к устройству. Укажите путь к расположению и имя виртуальной машины.
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
Выполнение задач на виртуальной машине
После успешного подключения устройства на виртуальной машине вы сможете запустить эту виртуальную машину и взаимодействовать с ним, как если бы вы работали в системе без операционной системы. Теперь вы можете установить драйверы поставщика оборудования на виртуальной машине, а приложения смогут видеть оборудование. Его можно проверить, открыв диспетчер устройств на гостевой виртуальной машине и убедившись, что оборудование доступно.
Удалите устройство и верните его на узел
Если вы хотите вернуть устройство обратно в исходное состояние, необходимо остановить виртуальную машину и выполнить следующую команду:
# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath
Затем можно повторно включить устройство в диспетчер устройств, а операционная система узла снова сможет взаимодействовать с устройством.
Пример. Подключение GPU к виртуальной машине
В этом примере PowerShell используется для настройки виртуальной машины с именем ddatest1 , чтобы взять первый GPU, доступный производителем NVIDIA, и назначить его виртуальной машине.
# Configure the VM for a Discrete Device Assignment
$vm = "ddatest1"
# Set automatic stop action to TurnOff
Set-VM -Name $vm -AutomaticStopAction TurnOff
# Enable Write-Combining on the CPU
Set-VM -GuestControlledCacheTypes $true -VMName $vm
# Configure 32 bit MMIO space
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName $vm
# Configure Greater than 32 bit MMIO space
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName $vm
# Find the Location Path and disable the Device
# Enumerate all PNP Devices on the system
$pnpdevs = Get-PnpDevice -presentOnly
# Select only those devices that are Display devices manufactured by NVIDIA
$gpudevs = $pnpdevs | Where-Object {$_.Class -like "Display" -and $_.Manufacturer -like "NVIDIA"}
# Select the location path of the first device that's available to be dismounted by the host.
$locationPath = ($gpudevs | Get-PnpDeviceProperty DEVPKEY_Device_LocationPaths).data[0]
# Disable the PNP Device
Disable-PnpDevice -InstanceId $gpudevs[0].InstanceId
# Dismount the Device from the Host
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
# Assign the device to the guest VM.
Add-VMAssignableDevice -LocationPath $locationPath -VMName $vm
Устранение неполадок при подключении GPU
Если вы передаете GPU в виртуальную машину, но службы удаленных рабочих столов или приложение не распознает GPU, проверка для следующих распространенных проблем.
Убедитесь, что установлена последняя версия поддерживаемого драйвера поставщика GPU, и что драйвер не сообщает об ошибках. Это можно сделать, проверка состояние устройства в диспетчер устройств.
Убедитесь, что на устройстве достаточно места MMIO, выделенного на виртуальной машине. Дополнительные сведения см. в разделе MMIO Space.
Убедитесь, что используется GPU, который поставщик поддерживает в этой конфигурации. Например, некоторые поставщики препятствуют работе карта потребителей при передаче на виртуальную машину.
Убедитесь, что приложение поддерживает работу внутри виртуальной машины, и что приложение поддерживает как GPU, так и связанные с ним драйверы. Некоторые приложения имеют списки разрешенных графических процессоров и сред.
Если вы используете роль узла сеансов удаленного рабочего стола или службы Windows Multipoint Services на гостевом компьютере, необходимо убедиться, что задана определенная запись групповой политики, чтобы разрешить использование GPU по умолчанию. Используйте объект групповой политики, примененный к гостею (или редактору локальной групповой политики на гостевом компьютере). Перейдите к следующему элементу групповой политики:
Конфигурация компьютера\Администратор istrator Templates\Windows Components\Remote Desktop Services\Remote Desktop Host\Remote Desktop Session Environment\Use hardware graphics adapters for all Remote Desktop Services session.
Задайте для параметра "Включенная групповая политика", а затем перезагрузите виртуальную машину после применения политики.