Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du använder Diskret enhetstilldelning (DDA) för att skicka en hel PCIe-enhet till en virtuell dator (VM) med PowerShell. Detta ger hög prestandaåtkomst till enheter som NVMe-lagring eller grafikkort inifrån en virtuell dator samtidigt som enhetens interna drivrutiner kan tillämpas. Mer information om enheter som fungerar och möjliga säkerhetskonsekvenser finns i Planera för att distribuera enheter med diskret enhetstilldelning.
Den här artikeln beskriver hur du använder en enhet med DDA:
- Konfigurera den virtuella datorn för DDA
- Demontera enheten från värdpartitionen
- Tilldela enheten till den virtuella gästdatorn
Förutsättningar
Innan du kan använda DDA för att distribuera grafikenheter måste du ha följande.
En Hyper-V värd som kör Windows Server 2016 eller senare.
En virtuell dator som kör något av följande operativsystem:
Windows Server 2016 eller senare.
Windows 10 eller senare.
Granska Planen för att distribuera enheter med diskret enhetstilldelning för att se till att maskinvaran är kompatibel med DDA.
- Kör SurveyDDA.ps1. PowerShell-skript för att identifiera om servern är korrekt konfigurerad. Skriptet visar också vilka enheter som kan skickas via med diskret enhetstilldelning.
Administrativa rättigheter på Hyper-V-värd.
(Valfritt) Även om det inte krävs kan det uppstå problem när du använder DDA för att distribuera grafikenheter om inte en enskild rot-I/O-virtualisering (SR-IOV) inte är aktiverad eller stöds.
Konfigurera den virtuella datorn för DDA
Det första steget i lösningen är att åtgärda DDA-begränsningar för de virtuella datorerna.
Logga in på Hyper-V-hostservern som administratör.
Öppna en PowerShell-prompt med administratörsbehörighet.
Konfigurera en
Automatic Stop Action
virtuell dator för att aktivera TurnOff med följande PowerShell-cmdlet:Set-VM -Name VMName -AutomaticStopAction TurnOff
Förberedelse av virtuella datorer för grafikenheter
Viss maskinvara fungerar bättre om den virtuella datorn konfigureras på ett visst sätt. Mer information om huruvida du behöver följande konfigurationer för maskinvaran finns i kontakta maskinvaruleverantören. Mer information finns i Planera för att distribuera enheter med diskret enhetstilldelning och i det här blogginlägget.
Aktivera Write-Combining på processorn med hjälp av följande cmdlet:
Set-VM -GuestControlledCacheTypes $true -VMName VMName
Konfigurera det 32-bitars minnesmappade I/O-utrymmet (MMIO) med hjälp av följande cmdlet:
Set-VM -LowMemoryMappedIoSpace 3Gb -VMName VMName
Konfigurera större än 32-bitars MMIO-utrymme med hjälp av följande cmdlet:
Set-VM -HighMemoryMappedIoSpace 33280Mb -VMName VMName
Tips/Råd
De MMIO-utrymmesvärden som visas är rimliga värden att ange för experimentering med en enda GPU. Om enheten efter att ha startat den virtuella datorn rapporterar ett fel som rör inte tillräckligt med resurser måste du förmodligen ändra dessa värden. Mer information om hur du exakt beräknar MMIO-krav finns i Planera för att distribuera enheter med diskret enhetstilldelning.
Demontera enheten från värdpartitionen
Följ anvisningarna i det här avsnittet för att demontera enheten från värdpartitionen.
Installera partitioneringsdrivrutinen (valfritt)
DDA ger maskinvaruleverantörer möjlighet att tillhandahålla en säkerhetsreduceringsdrivrutin med sina enheter. Den här drivrutinen är inte samma som enhetsdrivrutinen som är installerad på den virtuella gästdatorn. Det är upp till maskinvaruleverantören att ange den här drivrutinen. Men om de tillhandahåller en drivrutin installerar du den innan du demonterar enheten från värdpartitionen. Kontakta maskinvaruleverantören för att se om de har en åtgärdsdrivrutin.
Om ingen partitioneringsdrivrutin tillhandahålls måste du under demonteringen -Force
använda alternativet för att kringgå säkerhetsvarningen. Mer information om säkerhetskonsekvenserna finns i Planera för att distribuera enheter med diskret enhetstilldelning.
Leta upp enhetens platssökväg
PCI-platssökvägen krävs för att demontera och montera enheten från värden. Ett exempel på sökväg ser ut så här: PCIROOT(20)#PCI(0300)#PCI(0000)#PCI(0800)#PCI(0000)
. Mer information om hur du hittar platssökvägen finns i Planera för att distribuera enheter med diskret enhetstilldelning.
Inaktivera enheten
Använd Enhetshanteraren eller PowerShell för att se till att enheten är inaktiverad.
Demontera enheten
Beroende på om leverantören tillhandahöll en åtgärdsdrivrutin måste du antingen använda -Force
alternativet eller inte, som du ser här:
Om en åtgärdsdrivrutin har installerats använder du följande cmdlet:
Dismount-VMHostAssignableDevice -LocationPath $locationPath
Om en åtgärdsdrivrutin inte har installerats använder du följande cmdlet:
Dismount-VMHostAssignableDevice -Force -LocationPath $locationPath
Tilldela enheten till den virtuella gästdatorn
Det sista steget är att berätta för Hyper-V att en virtuell dator ska ha åtkomst till enheten. Ange platssökvägen och namnet på den virtuella datorn.
Add-VMAssignableDevice -LocationPath $locationPath -VMName VMName
Slutför uppgifter på den virtuella datorn
När en enhet har monterats i en VM kan du nu starta VM:en och interagera med enheten som om du körde på ett bare metal-system. Nu kan du installera maskinvaruleverantörens drivrutiner på den virtuella datorn och program kan se maskinvaran. Du kan verifiera det genom att öppna Enhetshanteraren på den virtuella gästdatorn och se att maskinvaran är tillgänglig.
Koppla bort en enhet och returnera den till värden
Om du vill återställa enheten till dess ursprungliga tillstånd måste du stoppa den virtuella datorn och utfärda följande kommando:
# Remove the device from the VM
Remove-VMAssignableDevice -LocationPath $locationPath -VMName VMName
# Mount the device back in the host
Mount-VMHostAssignableDevice -LocationPath $locationPath
Du kan sedan återaktivera enheten i Enhetshanteraren och värdoperativsystemet kan interagera med enheten igen.
Exempel – Montera en GPU på en virtuell dator
Det här exemplet använder PowerShell för att konfigurera en virtuell dator med namnet ddatest1 för att ta den första GPU:n som är tillgänglig av tillverkaren NVIDIA och tilldela den till den virtuella datorn.
# 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
Felsöka problem med att montera en GPU
Om du skickar en GPU till en virtuell dator men fjärrskrivbordstjänster eller ett program inte känner igen GPU:n kontrollerar du följande vanliga problem.
Kontrollera att du installerar den senaste versionen av GPU-leverantörens drivrutin som stöds och att drivrutinen inte rapporterar fel. Du kan göra det genom att kontrollera enhetstillståndet i Enhetshanteraren.
Kontrollera att enheten har tillräckligt med MMIO-utrymme allokerat i den virtuella datorn. Mer information finns i MMIO Space.
Se till att du använder en GPU som leverantören stöder används i den här konfigurationen. Vissa leverantörer förhindrar till exempel att deras konsumentkort fungerar när de skickas till en virtuell dator.
Kontrollera att programmet stöder körning i en virtuell dator och att programmet stöder både GPU:n och dess associerade drivrutiner. Vissa program har tillåtna listor över GPU:er och miljöer.
Om du använder fjärrskrivbordssessionsvärdrollen eller Windows Multipoint Services på gästmaskinen måste du se till att en specifik grupprincipspost har angetts för att tillåta användning av standard-GPU:n. Använd ett grupprincipobjekt som tillämpas på gästen (eller redigeraren för lokal grupprincip på gästen). Gå till följande grupprincipobjekt:
Datorkonfiguration\Administratörsmallar\Windows-komponenter\Fjärrskrivbordstjänster\Värd för fjärrskrivbordssession\Fjärrskrivbordssessionsmiljö\Använd maskinvarans grafikadaptrar för alla sessioner med fjärrskrivbordstjänster.
Ange grupprincipvärdet till Aktiverad och starta sedan om den virtuella datorn när du har tillämpat principen.