개별 디바이스 할당을 사용하여 그래픽 디바이스 배포

적용 대상: Windows Server 2022, Windows Server 2019, Microsoft Hyper-V Server 2019, Windows Server 2016, Microsoft Hyper-V Server 2016

Windows Server 2016부터 DDA(개별 디바이스 할당)를 사용하여 전체 PCIe 디바이스를 VM(가상 머신)에 전달할 수 있습니다. 이렇게 하면 디바이스의 네이티브 드라이버를 적용할 수 있는 동시에 VM 내에서 NVMe 스토리지 또는 그래픽 카드 같은 디바이스에 대한 고성능 액세스를 허용합니다. 작동하는 디바이스 및 보안에 미치는 영향에 대한 자세한 내용은 개별 디바이스 할당을 사용하여 디바이스 배포 계획을 참조하세요.

Important

필수는 아니지만 SR-IOV(단일 루트 I/O 가상화)를 사용하도록 설정하거나 지원하지 않는 경우 DDA를 사용하여 그래픽 디바이스를 배포할 때 문제가 발생할 수 있습니다.

DDA에서 디바이스를 사용하는 세 가지 단계가 있습니다.

  1. DDA용 VM 구성
  2. 호스트 파티션에서 디바이스 분리
  3. 게스트 VM에 디바이스 할당

관리자 권한으로 Windows PowerShell 콘솔의 호스트에서 모든 명령을 실행할 수 있습니다.

DDA를 위해 VM 구성

솔루션의 첫 번째 단계는 VM에 대한 DDA 제한을 해결하는 것입니다. Automatic Stop Action 다음 PowerShell cmdlet을 사용하여 TurnOff를 사용하도록 VM을 구성합니다.

Set-VM -Name VMName -AutomaticStopAction TurnOff

그래픽 디바이스에 대한 VM 준비

일부 하드웨어는 VM이 특정 방식으로 구성된 경우 더 나은 성능을 발휘합니다. 하드웨어에 대해 다음 구성이 필요한지 여부에 대한 자세한 내용은 하드웨어 공급업체에 문의하세요. 자세한 내용은 개별 디바이스 할당 을 사용하여 디바이스 배포 계획 및 이 블로그 게시물을 참조하세요.

  1. 다음 cmdlet을 사용하여 CPU에서 쓰기 결합을 사용하도록 설정합니다.

    Set-VM -GuestControlledCacheTypes $true -VMName VMName
    
  2. 다음 cmdlet을 사용하여 32비트 MMIO 공간을 구성합니다.

    Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
    
  3. 다음 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 탑재 관련 문제 해결

VM에 GPU를 전달했지만 원격 데스크톱 서비스 또는 애플리케이션이 GPU를 인식하지 못하는 경우 다음과 같은 일반적인 문제를 검사.

  • GPU 공급업체에서 지원되는 드라이버의 최신 버전을 설치했으며 드라이버가 오류를 보고하지 않는지 확인합니다. 장치 관리자 디바이스 상태를 검사 수행할 수 있습니다.

  • 디바이스에 VM 내에 할당된 충분한 MMIO 공간이 있는지 확인합니다. 자세한 내용은 MMIO 공간을 참조 하세요.

  • 이 구성에서 공급업체가 지원하는 GPU를 사용해야 합니다. 예를 들어 일부 공급업체는 VM으로 전달될 때 소비자 카드 작동을 방지합니다.

  • 애플리케이션이 VM 내에서 실행을 지원하고 애플리케이션이 GPU와 관련 드라이버를 모두 지원하는지 확인합니다. 일부 애플리케이션에는 GPU 및 환경의 허용 목록이 있습니다.

  • 게스트에서 원격 데스크톱 세션 호스트 역할 또는 Windows Multipoint Services를 사용하는 경우 기본 GPU 사용을 허용하도록 특정 그룹 정책 항목이 설정되어 있는지 확인해야 합니다. 게스트(또는 게스트의 로컬 그룹 정책 편집기)에 적용된 그룹 정책 개체를 사용하여 다음 그룹 정책 항목으로 이동합니다.

    컴퓨터 구성\관리사용자 템플릿\Windows 구성 요소\원격 데스크톱 서비스\원격 데스크톱 세션 호스트\원격 세션 환경\모든 원격 데스크톱 서비스 세션에 하드웨어 그래픽 어댑터를 사용합니다.

    그룹 정책 값을 사용으로 설정한 다음 정책이 적용되면 VM을 다시 부팅합니다.