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


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

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

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

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

Предпосылки

Прежде чем использовать 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
    

    Подсказка

    Отображаемые значения пространства 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\Службы удаленных рабочих столов\Узел сеансов удаленных рабочих столов\Среда удаленного сеанса\Использование аппаратных графических адаптеров для всех сеансов служб удаленных рабочих столов.

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