개별 디바이스 할당으로 그래픽 디바이스 배포
개별 디바이스 할당 (DDA)를 사용하여 전체 PCIe 디바이스를 PowerShell을 사용하여 가상 머신 (VM)에 전달하는 방법을 알아봅니다. 이렇게 하면 디바이스의 네이티브 드라이버를 적용할 수 있는 동시에 VM 내에서 NVMe 스토리지 또는 그래픽 카드와 같은 디바이스에 대한 고성능 액세스를 허용합니다. 작동하는 디바이스 및 보안에 미치는 영향에 대한 자세한 내용은 개별 디바이스 할당으로 디바이스 배포 계획을 참조하세요.
이 문서에서는 DDA에서 디바이스를 사용하는 단계를 안내합니다.
필수 조건
DDA를 사용하여 그래픽 디바이스를 배포하려면 다음이 필요합니다.
Windows Server 2016 이상을 실행하는 Hyper-V 호스트.
다음 운영 체제 중 하나를 실행 중인 VM:
Windows Server 2016 이상
Windows 10 이상
개별 디바이스 할당으로 디바이스 배포 계획 을 검토하여 하드웨어가 DDA와 호환되는지 확인합니다.
- SurveyDDA.ps1 을 실행하세요. 서버가 올바르게 구성되었는지 식별하는 PowerShell 스크립트입니다. 또한 이 스크립트는 불연속 디바이스 할당을 사용하여 전달할 수 있는 디바이스를 표시합니다.
Hyper-V 호스트에 대한 관리 권한입니다.
(선택 사항) 필수는 아니지만 단일 루트 I/O 가상화 (SR-IOV) 를 사용하도록 설정하거나 지원하지 않는 경우 DDA를 사용하여 그래픽 디바이스를 배포할 때 문제가 발생할 수 있습니다.
DDA를 위해 VM 구성
솔루션의 첫 번째 단계는 VM에 대한 DDA 제한을 해결하는 것입니다.
Hyper-V 호스트에 관리자로 로그인합니다.
관리자 권한 PowerShell 프롬프트를 엽니다.
다음의 PowerShell cmdlet으로 TurnOff 를 사용하도록 VM의
Automatic Stop Action
를 구성하세요:Set-VM -Name VMName -AutomaticStopAction TurnOff
그래픽 디바이스에 대한 VM 준비
일부 하드웨어는 VM이 특정 방식으로 구성된 경우 더 나은 성능을 발휘합니다. 하드웨어에 대해 다음 구성이 필요한지 여부에 대한 자세한 내용은 하드웨어 공급업체에 문의하세요. 자세한 내용은 개별 디바이스 할당을 사용한 디바이스 배포 계획 및 이 블로그 포스트를 참조하세요.
다음의 cmdlet으로 CPU에서 쓰기 결합을 활성화하세요.
Set-VM -GuestControlledCacheTypes $true -VMName VMName
다음의 cmdlet으로 32비트 메모리 매핑 IO (MMIO) 공간을 구성하세요.
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
다음의 cmdlet으로 32비트 이상의 MMIO 공간을 구성하세요.
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
팁
표시된 MMIO 공간 값은 단일 GPU를 실험하기 위해 설정하는 적절한 값입니다. VM을 시작한 후 디바이스가 리소스 부족과 관련된 오류를 보고하는 경우 이러한 값을 수정해야 할 수 있습니다. MMIO 요구 사항을 정확하게 계산하는 방법에 대한 자세한 내용은 개별 디바이스 할당을 사용하여 디바이스 배포 계획을 참조하세요.
호스트 파티션에서 디바이스 분리하기
이 섹션의 지침에 따라 호스트 파티션에서 디바이스를 분리합니다.
분할 드라이버 설치(선택 사항)
DDA는 하드웨어 공급업체에 디바이스에 보안 완화 드라이버를 제공할 수 있는 기능을 제공합니다. 이 드라이버는 게스트 VM에 설치된 디바이스 드라이버와 동일하지 않습니다. 이 드라이버를 제공하는 것은 하드웨어 공급업체의 재량에 달려 있습니다. 그러나 드라이버를 제공하는 경우 호스트 파티션에서 디바이스를 분리하기 전에 설치하세요. 하드웨어 공급업체에 문의하여 완화 드라이버가 있는지 확인하세요.
분할 드라이버가 제공되지 않은 경우 분리하는 동안 보안 경고를 우회하는 옵션 -Force
을 사용해야 합니다. 보안 영향에 대한 자세한 내용은 개별 디바이스 할당을 사용한 디바이스 배포 계획을 참조하세요.
디바이스의 위치 경로 찾기
호스트에서 디바이스를 분리 및 탑재하려면 PCI 위치 경로가 필요합니다. 위치 경로 예제는 다음과 같습니다: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
. 위치 경로를 찾기에 대한 자세한 내용은 개별 디바이스 할당을 사용한 디바이스 배포 계획을 참조하세요.
장치 비활성화
장치 관리자 또는 PowerShell로 디바이스가 비활성화로 설정되어 있는지 확인합니다.
장치 분리
공급업체에서 완화 드라이버를 제공했는지 여부에 따라 다음과 같이 -Force
옵션을 사용해야 합니다.
완화 드라이버가 설치된 경우 다음 cmdlet을 사용하세요:
Dismount-VMHostAssignableDevice -LocationPath $locationPath
완화 드라이버가 설치되지 않은 경우 다음 cmdlet을 사용하세요:
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
디바이스를 게스트 VM에 할당하세요.
마지막 단계는 VM에 디바이스에 대한 액세스 권한이 있어야 하며 Hyper-V에 지시하는 것입니다. VM의 위치 경로와 이름을 지정하세요.
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
VM에서 작업 완료하기
디바이스가 VM에 성공적으로 탑재된 후에는, 이제 운영 체제 미설치 시스템에서 실행 중인 것처럼 해당 VM을 시작하고 디바이스와 상호 작용할 수 있습니다. 이제 VM에 하드웨어 공급업체의 드라이버를 설치할 수 있으며 애플리케이션에서 하드웨어를 볼 수 있습니다. 게스트 VM에서 장치 관리자 열고 하드웨어를 사용할 수 있는지 확인하여 확인할 수 있습니다.
디바이스를 제거하고 호스트에 반환
디바이스를 원래 상태로 되돌리려면 VM을 중지하고 다음 명령을 실행해야 합니다:
# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath
그런 다음 디바이스 관리자에서 디바이스를 재활성화 설정을 할 수 있으며 호스트 운영 체제가 디바이스와 다시 상호 작용할 수 있습니다.
예제 - VM에 GPU 탑재
이 예제에서는 PowerShell을 사용하여 ddatest1 이라는 VM을 구성하여 제조업체 NVIDIA에서 사용할 수 있는 첫 번째 GPU를 가져와 VM에 할당합니다.
# 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를 VM에 전달하지만 원격 데스크톱 서비스 또는 애플리케이션이 GPU를 인식하지 못하는 경우 다음과 같은 일반적인 문제를 확인합니다.
GPU 공급업체의 지원되는 드라이버의 최신 버전을 설치하고 드라이버가 오류를 보고하지 않는지 확인합니다. 장치 관리자 디바이스 상태를 확인하여 수행할 수 있습니다.
디바이스에 VM 내에 할당된 충분한 MMIO 공간이 있는지 확인합니다. 자세한 내용은 MMIO 공간을 참조하세요.
이 구성에서 공급업체가 지원하는 GPU를 사용해야 합니다. 예를 들어 일부 공급업체는 VM으로 전달될 때 소비자 카드가 작동하지 않도록 방지합니다.
애플리케이션이 VM 내에서 실행을 지원하고 애플리케이션이 GPU와 관련 드라이버를 모두 지원하는지 확인합니다. 일부 애플리케이션에는 GPU 및 환경의 허용 목록이 있습니다.
게스트에서 원격 데스크톱 세션 호스트 역할 또는 Windows Multipoint Services를 사용하는 경우 기본 GPU 사용을 허용하도록 특정 그룹 정책 항목이 설정되어 있는지 확인해야 합니다. 게스트에 적용된 그룹 정책 개체(또는 게스트의 로컬 그룹 정책 편집기)를 사용합니다. 다음 그룹 정책 항목으로 이동합니다.
모든 원격 데스크톱 서비스 세션용 컴퓨터 구성\관리자 템플릿\Windows 구성 요소\원격 데스크톱 서비스\원격 데스크톱 세션 호스트\원격 세션 환경\하드웨어 그래픽 어댑터 사용.
그룹 정책 값을 활성화로 설정한 다음 정책을 적용한 후 VM을 다시 부팅하세요.