Поделиться через


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

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

В этой статье описаны действия по использованию устройства с DDA:

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

Prerequisites

Прежде чем использовать DDA для развертывания графических устройств, вам потребуется следующее.

  • Узел Hyper-V под управлением Windows Server 2016 или более поздней версии.

  • Виртуальная машина под управлением одной из следующих операционных систем:

    • Windows Server 2016 или более поздней версии.

    • Windows 10 или более поздней версии.

  • Просмотрите план развертывания устройств с помощью дискретного назначения устройств , чтобы обеспечить совместимость оборудования с DDA.

    • Запустите SurveyDDA.ps1. Скрипт PowerShell для определения правильности настройки сервера. Сценарий также показывает, какие устройства можно передавать через механизм дискретного назначения устройств.
  • Права администратора на узел Hyper-V.

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

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

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

  1. Войдите на узел Hyper-V с правами администратора.

  2. Откройте окно PowerShell в повышенном режиме.

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

    Set-VM -Name VMName -AutomaticStopAction TurnOff
    

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

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

  1. Включите Write-Combining на ЦП с помощью следующего командлета:

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

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. Настройте пространство MMIO, размер которого превышает 32-битный, используя следующий командлет:

    Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
    

    Tip

    Отображаемые значения пространства 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 в гостевой системе, необходимо убедиться, что задан определенный элемент групповой политики, позволяющий использовать графический процессор по умолчанию. Используйте объект групповой политики, примененный к гостею (или редактору локальной групповой политики на гостевом компьютере). Перейдите к следующему элементу групповой политики:

    Конфигурация компьютера\Администраторы\Компоненты Windows\Службы удаленных рабочих столов\Узел сеансов удаленных рабочих столов\Среда удаленного сеанса\Использование аппаратных графических адаптеров для всех сеансов служб удаленных рабочих столов.

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