Развертывание графических устройств с помощью дискретного назначения устройств

Область применения: Windows Server 2022, Windows Server 2019, Microsoft Hyper-V Server 2019, Windows Server 2016, Microsoft Hyper-V Server 2016

Начиная с Windows Server 2016, вы можете использовать дискретное назначение устройств (DDA) для передачи всего устройства PCIe в виртуальную машину . Это позволяет обеспечить высокий уровень производительности доступа к устройствам, таким как хранилище NVMe или графические карта из виртуальной машины при использовании собственных драйверов устройства. Дополнительные сведения о устройствах, которые работают и могут повлиять на безопасность, см. в разделе "Планирование развертывания устройств с помощью дискретного назначения устройств".

Важно!

Хотя не требуется, если виртуализация одно корневых операций ввода-вывода (SR-IOV) не включена или поддерживается, при развертывании графических устройств может возникнуть проблема при использовании DDA.

Существует три шага для использования устройства с DDA:

  1. Настройка виртуальной машины для DDA
  2. Отключение устройства из раздела узла
  3. Назначение устройства гостевой виртуальной машине

Вы можете выполнять все команды на узле в консоли Windows PowerShell от имени администратора.

Настройка виртуальной машины для DDA

Первым шагом в решении является устранение ограничений DDA для виртуальных машин. Automatic Stop Action Настройте виртуальную машину, чтобы включить TurnOff с помощью следующего командлета PowerShell:

Set-VM -Name VMName -AutomaticStopAction TurnOff

Подготовка виртуальных машин для графических устройств

Некоторые аппаратные средства лучше выполняются, если виртуальная машина настроена определенным образом. Дополнительные сведения о том, нужны ли следующие конфигурации оборудования, обратитесь к поставщику оборудования. Дополнительные сведения см. в разделе "Планирование развертывания устройств" с помощью дискретного назначения устройств и в этой записи блога.

  1. Включите объединение записей на ЦП с помощью следующего командлета:

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. Настройте 32-разрядное пространство MMIO с помощью следующего командлета:

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Настройте больше 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.

    Задайте для параметра "Включено" значение групповой политики, а затем перезагрузите виртуальную машину после применения политики.