Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как использовать дискретное назначение устройств (DDA) для передачи всего устройства PCIe в виртуальную машину с помощью PowerShell. Это обеспечивает высокий уровень производительности доступа к устройствам, таким как хранилище NVMe или графические карты из виртуальной машины, при этом можно применять собственные драйверы устройства. Дополнительные сведения о устройствах, которые работают и могут повлиять на безопасность, см. в разделе "Планирование развертывания устройств с помощью дискретного назначения устройств".
В этой статье описаны действия по использованию устройства с DDA:
- Настройка виртуальной машины для DDA
- Демонтаж устройства из главного раздела
- Назначение устройства гостевой виртуальной машине
Предпосылки
Прежде чем использовать DDA для развертывания графических устройств, вам потребуется следующее.
Узел Hyper-V под управлением Windows Server 2016 или более поздней версии.
Виртуальная машина под управлением одной из следующих операционных систем:
Windows Server 2016 или более поздней версии.
Windows 10 или более поздней версии.
Просмотрите план развертывания устройств с помощью дискретного назначения устройств , чтобы обеспечить совместимость оборудования с DDA.
- Запустите SurveyDDA.ps1. Скрипт PowerShell для определения правильности настройки сервера. Сценарий также показывает, какие устройства можно передавать через механизм дискретного назначения устройств.
Права администратора на узел Hyper-V.
(Необязательно) Хотя это не требуется, если виртуализация операций ввода-вывода с одним корневым узлом (SR-IOV) не включена или не поддерживается, вы можете столкнуться с проблемами при использовании DDA для развертывания графических устройств.
Настройка виртуальной машины для DDA
Первым шагом в решении является устранение ограничений DDA для виртуальных машин.
Войдите на узел Hyper-V с правами администратора.
Откройте окно PowerShell в повышенном режиме.
Настройте
Automatic Stop Action
виртуальной машины, чтобы разрешить TurnOff с помощью следующего командлета PowerShell:Set-VM -Name VMName -AutomaticStopAction TurnOff
Подготовка виртуальных машин для графических устройств
Некоторые аппаратные средства лучше выполняются, если виртуальная машина настроена определенным образом. Чтобы узнать, нужны ли следующие конфигурации для вашего оборудования, пожалуйста, свяжитесь с поставщиком. Дополнительные сведения см. в разделе "Планирование развертывания устройств" с помощью дискретного назначения устройств и в этой записи блога.
Включите Write-Combining на ЦП с помощью следующего командлета:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Настройте 32-разрядное адресное пространство памяти, адаптированное для операций ввода-вывода (MMIO), с помощью следующего командлета:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Настройте пространство 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\Службы удаленных рабочих столов\Узел сеансов удаленных рабочих столов\Среда удаленного сеанса\Использование аппаратных графических адаптеров для всех сеансов служб удаленных рабочих столов.
Настройте значение групповой политики на Включено, затем примените политику и перезапустите виртуальную машину.