|
| 1 | +--- |
| 2 | +title: Troubleshooting guidance for Hyper-V GPU assignment, partitioning, and passthrough |
| 3 | +description: Troubleshoot issues that occur when configuring GPU passthrough for virtual machines by using either Discrete Device Assignment (DDA) or GPU partitioning (GPU-P). |
| 4 | +ms.date: 08/11/2025 |
| 5 | +manager: dcscontentpm |
| 6 | +audience: itpro |
| 7 | +ms.topic: troubleshooting |
| 8 | +ms.reviewer: kaushika, jeffhugh, v-appelgatet |
| 9 | +ms.custom: |
| 10 | +- sap:virtualization and hyper-v\discrete device assignment gpu |
| 11 | +- pcy:WinComm Storage High Avail |
| 12 | +--- |
| 13 | +# Hyper-V GPU assignment, partitioning, and passthrough troubleshooting guidance |
| 14 | + |
| 15 | +_Applies to:_ Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows 11, and Windows 10 |
| 16 | + |
| 17 | +This article provides troubleshooting guidance for issues that are related to GPU passthrough in a Hyper-V environment. The article includes a checklist for troubleshooting, a description of known issues, and instructions to resolve common issues. You might encounter common issues when you set up host servers to provide GPU passthrough or configure virtual machines (VMs) to use GPU passthrough. |
| 18 | + |
| 19 | +## Troubleshooting checklist |
| 20 | + |
| 21 | +The following checklist provides the general troubleshooting steps that you should follow for any GPU passthrough issue. Many of the issues that you might encounter originate as problems that involve hardware compatibility, operating system compatibility, drivers, or basic configuration. If these steps don't resolve your issue, continue to the "Common issues and solutions" section. |
| 22 | + |
| 23 | +### Step 1: Verify that the functionality that you want is supported |
| 24 | + |
| 25 | +Make sure that your environment is supported for the specific method that you want to use. Follow these guidelines: |
| 26 | + |
| 27 | +- To use live migration for VMs that use GPU acceleration, you have to use GPU-P and Windows Server 2025 or a newer version on the host computer. For more information about the differences in capabilities between Discrete Device Assignment (DDA) and GPU-P, see [Plan for GPU acceleration in Windows Server](/windows-server/virtualization/hyper-v/plan/plan-for-gpu-acceleration-in-windows-server). |
| 28 | + |
| 29 | +- To use failover clusters and deploy GPUs by using DDA, you have to use Windows Server 2025. For more information, see [Use GPUs with Discrete Device Assignment in clustered VMs](/windows-server/virtualization/hyper-v/deploy/use-gpu-with-clustered-vm?tabs=windows-admin-center&pivots=windows-server). |
| 30 | + |
| 31 | +- You can't assign the same GPU by using both DDA and GPU-P. |
| 32 | + |
| 33 | +- To monitor GPU usage in Task Manager, the host computer must run Windows Server 2022 or a later version. |
| 34 | + |
| 35 | +- DDA and GPU-P aren't supported on desktop-class hardware or client operating systems such as Windows 10 or 11 Pro. |
| 36 | + |
| 37 | +- To use DDA to assign GPUs, the host computer has to run Windows Server 2016 or a newer version. |
| 38 | + |
| 39 | +- If you want to use GPU-P, the host computer has to run Windows Server 2025 or a newer version. |
| 40 | + |
| 41 | +- Currently, you can assign only a single GPU partition to a VM. Both the VM and the GPU partition must be on the same host computer. |
| 42 | + |
| 43 | +### Step 2: Verify that the server and GPU hardware support GPU passthrough |
| 44 | + |
| 45 | +Make sure that the host computer uses server-class hardware and includes a supported CPU, motherboard, and GPU. If you're using GPU-P on clustered host computers, the processors must be capable of Input/Output Memory Management Unit (IOMMU) DMA bit tracking. (This requirement includes processors that support Intel VT-D or AMD-Vi.) |
| 46 | + |
| 47 | +Review the vendor documentation for the hardware to verify that it supports Hyper-V GPU-P or DDA, as necessary. You can use vendor-provided scripts, such as `SurveyDDA.ps1` from Microsoft's open source GitHub repository [https://github.com/MicrosoftDocs/Virtualization-Documentation/tree/main/hyperv-tools/DiscreteDeviceAssignment](https://github.com/MicrosoftDocs/Virtualization-Documentation/tree/main/hyperv-tools/DiscreteDeviceAssignment). |
| 48 | + |
| 49 | +> [!IMPORTANT] |
| 50 | +> At this time, the following GPUs support GPU-P: |
| 51 | +> |
| 52 | +> - NVIDIA A2 |
| 53 | +> - NVIDIA A10 |
| 54 | +> - NVIDIA A16 |
| 55 | +> - NVIDIA A40 |
| 56 | +> - NVIDIA L2 |
| 57 | +> - NVIDIA L4 |
| 58 | +> - NVIDIA L40 |
| 59 | +> - NVIDIA L40S |
| 60 | +> |
| 61 | +> For more information, see [NVIDIA Virtual GPU Software User Guide](https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/index.html). |
| 62 | +
|
| 63 | +> [!NOTE] |
| 64 | +> Check the vendor information for any compatibility restrictions that apply to the GPU. |
| 65 | +
|
| 66 | +For more information about host computer prerequisites for DDA, see [Deploy graphics devices by using Discrete Device Assignment: Prerequisites](/windows-server/virtualization/hyper-v/deploy/deploying-graphics-devices-using-dda#prerequisites). |
| 67 | + |
| 68 | +For more information about host computer prerequisites for GPU-P, see [GPU Partitioning: Requirements](/windows-server/virtualization/hyper-v/gpu-partitioning#requirements). |
| 69 | + |
| 70 | +If your hardware doesn't support the GPU passthrough functionality that you want to use, upgrade the hardware. Incompatible hardware can cause various issues when you try to configure or use GPUs. |
| 71 | + |
| 72 | +### Step 2: Check the host computer operating system and BIOS or UEFI settings |
| 73 | + |
| 74 | +1. Make sure that the Hyper-V server role is installed and enabled on the host computer, and that you have administrative permissions for the computer. |
| 75 | + |
| 76 | +1. Check the BIOS/UEFI configuration of the host computer: |
| 77 | + - If you're using GPU-P, make sure that [Single Root I/O Virtualization (SR-IOV)](/windows-hardware/drivers/network/overview-of-single-root-i-o-virtualization--sr-iov-) and VT-d/IOMMU are enabled. |
| 78 | + - If you're using DDA, consider enabling SR-IOV. This setting might resolve some issues. |
| 79 | + > [!IMPORTANT] |
| 80 | + > If you change any BIOS or UEFI settings, restart the computer before you continue. |
| 81 | +
|
| 82 | +### Step 4: Check the versions of the guest operating systems |
| 83 | + |
| 84 | +Make sure that the VMs use operating systems that support GPU passthrough. |
| 85 | + |
| 86 | +- DDA is supported for Generation 1 or 2 VMs. Supported guests include: |
| 87 | + - Windows 10 or later |
| 88 | + - Windows Server 2016 or later |
| 89 | + |
| 90 | + For more information about non-Windows VMs, see [Supported Linux and FreeBSD virtual machines for Hyper-V on Windows Server and Windows](/windows-server/virtualization/hyper-v/supported-linux-and-freebsd-virtual-machines-for-hyper-v-on-windows). |
| 91 | + |
| 92 | +- GPU-P is supported for Generation 2 VMs that use the following operating systems: |
| 93 | + - Windows 10 or later |
| 94 | + - Windows 10 Enterprise multi-session or later |
| 95 | + - Windows Server 2019 or later |
| 96 | + - Linux Ubuntu 18.04 LTS, Linux Ubuntu 20.04 LTS, Linux Ubuntu 22.04 LTS |
| 97 | + |
| 98 | +### Step 5: Check Windows Update status |
| 99 | + |
| 100 | +Make sure that the host computer and all VMs all have relevant Windows updates installed. |
| 101 | + |
| 102 | +If you install any updates, restart the affected computers. |
| 103 | + |
| 104 | +### Step 6: Check the drivers and GPU licensing |
| 105 | + |
| 106 | +To use GPU passthrough, you must have the correct software and correct license. The drivers that you need might differ depending on whether you're using DDA or GPU-P, and also depend on the functionality that you want to use. For example, to use live migration together with GPU-P, you must use the driver that's included in the NVIDIA vGPU Software v18.*x* or a later version. Also, you must have a license that supports GPU-P. |
| 107 | + |
| 108 | +License or driver problems can cause the following symptoms, among others: |
| 109 | + |
| 110 | +- The Hyper-V or Windows Admin Center doesn't list GPUs as available for provisioning. |
| 111 | +- The Hyper-V or Windows Admin Center lists GPUs as "Ready for DDA assignment," but not for GPU-P. |
| 112 | +- Device manager on the VMs or host computer lists the GPUs as disabled or unrecognized. |
| 113 | +- You see error messages that include error code 48F or error code 003. |
| 114 | +- You can't configure a GPU pool for GPU-P. |
| 115 | + |
| 116 | +To check the drivers and licensing, follow these steps: |
| 117 | + |
| 118 | +1. Review the GPU vendor documentation and verify that you have the correct and most recent GPU drivers installed on both the host computer and the VMs. |
| 119 | + |
| 120 | + > [!IMPORTANT] |
| 121 | + > NVIDIA's vGPU drivers don't update or replace datacenter version drivers (non-vGPU drivers) that are installed on the host computer. To use GPU-P, you have to manually remove any NVIDIA datacenter version drivers before you install the vGPU software. |
| 122 | +
|
| 123 | +1. If you have to make any driver changes, follow these steps: |
| 124 | + |
| 125 | + 1. Uninstall any incorrect drivers. For example, if you want to use GPU-P together with NVIDIA vGPU hardware, uninstall all non-vGPU NVIDIA drivers. |
| 126 | + 1. Install the correct drivers. |
| 127 | + 1. Restart the affected computer (host computer or VM). |
| 128 | + |
| 129 | +1. Make sure that you have the correct licenses for the GPUs that you're using, that you have the correct number of licenses, and that the licenses are installed or activated correctly. |
| 130 | + |
| 131 | + > [!NOTE] |
| 132 | + > For more information about NVIDIA licenses, see [NVIDIA License System User Guide](https://docs.nvidia.com/license-system/latest/nvidia-license-system-user-guide/index.html). |
| 133 | +
|
| 134 | +1. To verify that the GPU is now available, open a Windows PowerShell Command Prompt window on the host computer, and then run the following command: |
| 135 | + |
| 136 | + ```powershell |
| 137 | + Get-VMHostPartitionableGpu |
| 138 | + ``` |
| 139 | + |
| 140 | + > [!NOTE] |
| 141 | + > If the GPU is still not available, see [After you update Windows, the GPU doesn't function or appears as an unknown device](#after-you-update-windows-the-gpu-doesnt-function-or-appears-as-an-unknown-device). |
| 142 | +
|
| 143 | +### Step 7 Check your administration tools |
| 144 | + |
| 145 | +- Windows Admin Center: |
| 146 | + - Install the latest version of Windows Admin Center. |
| 147 | + - Install the **GPUs** extension, version 2.8.0 or later. |
| 148 | +- Windows PowerShell: Install the Hyper-V module. |
| 149 | + |
| 150 | +### Step 8 Check the VM configuration |
| 151 | + |
| 152 | +If you're using GPU-P, see [Partition and assign GPUs to a virtual machine](/windows-server/virtualization/hyper-v/partition-assign-vm-gpu?tabs=windows-admin-center) for detailed information about how to configure the GPU and how to configure VMs. That article also provides information about common issues that you might encounter when you configure or assign GPU partitions. |
| 153 | + |
| 154 | +If you're using DDA to assign GPUs, follow these steps for each VM to make sure that the VMs are correctly configured: |
| 155 | + |
| 156 | +1. Sign in to the Hyper-V host as an administrator. |
| 157 | + |
| 158 | +1. Open an elevated PowerShell Command Prompt window, and then run the following command: |
| 159 | + |
| 160 | + ```powershell |
| 161 | + Get-VM -Name <VMName> |
| 162 | + ``` |
| 163 | + |
| 164 | + > [!NOTE] |
| 165 | + > In this command, \<VMName> is the name of the VM that you're checking. |
| 166 | +
|
| 167 | +1. Check that the settings that are listed in the following table have the specified values. |
| 168 | + |
| 169 | + | Setting | Value | |
| 170 | + | --- | --- | |
| 171 | + | `Automatic Stop Action` | **TurnOff** | |
| 172 | + | `GuestControlledCacheTypes` | **True** | |
| 173 | + | `LowMemoryMappedIoSpace` | **3000000000** | |
| 174 | + | `HighMemoryMappedIoSpace` | **33280000000** | |
| 175 | + |
| 176 | +For more information, see the following articles: |
| 177 | + |
| 178 | +- [Deploy graphics devices by using Discrete Device Assignment: Configure the VM for DDA](/windows-server/virtualization/hyper-v/deploy/deploying-graphics-devices-using-dda#vm-preparation-for-graphics-devices) |
| 179 | +- [Deploy devices by using Discrete Device Assignment: MMIO space](/windows-server/virtualization/hyper-v/plan/plan-for-deploying-devices-using-discrete-device-assignment#mmio-space) |
| 180 | + |
| 181 | +## Common issues and solutions |
| 182 | + |
| 183 | +### Windows Server 2022 Hyper-V or VMWare: Task Manager Processes tab doesn't display GPU or vGPU usage |
| 184 | + |
| 185 | +Consider the following scenario: |
| 186 | + |
| 187 | +- You run Hyper-V or VMWare VMs on a Windows Server 2022 host. |
| 188 | +- The VMs are configured to use GPUs. |
| 189 | +- You open Task Manager to check the GPU processes. |
| 190 | + |
| 191 | +In this scenario, you don't see the **GPU** column on the **Processes** tab or on the columns menu. In such cases, the VMs default to using [Windows Display Driver Model](/windows-hardware/drivers/display/windows-vista-display-driver-model-design-guide) (WDDM) 1.*x*. This model doesn't support GPU monitoring in Task Manager. |
| 192 | + |
| 193 | +To resolve this issue, follow these steps: |
| 194 | + |
| 195 | +1. Make sure that the host computer and all VMs have relevant Windows updates installed. |
| 196 | + |
| 197 | + If you install any updates, restart the affected computers. |
| 198 | + |
| 199 | +1. On each affected VM, follow these steps to check the display driver version: |
| 200 | + 1. Open a Command Prompt window, and then run the `dxdiag` command. |
| 201 | + 1. In the DirectX Diagnostic Tool, select the **Display** tab, and then look for **Driver Model**. This value should be WDDM 2.*x* or a later version. |
| 202 | + 1. If the driver model is 2.*x* or later, consider upgrading the host computer to Windows Server 2025. Otherwise, go to the next step. |
| 203 | +1. On each affected VM, follow these steps to update the drivers and rebuild the performance counters: |
| 204 | + 1. Uninstall the incorrect drivers. |
| 205 | + 1. Install the correct drivers. |
| 206 | + 1. Restart the affected VM. |
| 207 | + 1. After the VM restarts, rebuild the performance counters. At the command prompt, run the following commands, in sequence: |
| 208 | + |
| 209 | + ```console |
| 210 | + lodctr /R |
| 211 | + diskperf -y |
| 212 | + ``` |
| 213 | + |
| 214 | +1. If the preceding steps didn't resolve the issue, consider upgrading the host computer to Windows Server 2025 |
| 215 | + |
| 216 | +### After you update Windows, the GPU doesn't function or appears as an unknown device |
| 217 | + |
| 218 | +In this case, a VM suddenly can't use a GPU. Device Manager might list the GPU as disabled or as an unknown device. You might also see error message that includes error code 48F or error code 003. |
| 219 | + |
| 220 | +This situation typically means that a driver is corrupted, or a stale version of the driver was installed during the update. Simply reinstalling the correct driver might not resolve the problem, because stale or incorrect information might remain in the registry or system files. |
| 221 | + |
| 222 | +> [!IMPORTANT] |
| 223 | +> |
| 224 | +> - Make sure that you complete the steps that are described in the [Troubleshooting Checklist](#troubleshooting-checklist) section. If the issue persists, use the following procedure. |
| 225 | +> - Before you use this procedure, check with your vendor to make sure that cleaning up registry information or system files is advised in your situation. If it isn't, skip those steps. |
| 226 | +> - You must have administrative permissions to use this procedure. |
| 227 | + |
| 228 | +To clean up this information and resolve this issue, follow these steps on the affected VM: |
| 229 | + |
| 230 | +1. Restart the VM into [Safe mode](https://support.microsoft.com//windows/windows-startup-settings-1af6ec8c-4d4a-4b23-adb7-e76eef0b847f). |
| 231 | + |
| 232 | +1. To enumerate the current drivers, open an elevated Command Prompt window, and then run the following command: |
| 233 | + |
| 234 | + ```console |
| 235 | + pnputil /enum-drivers |
| 236 | + ``` |
| 237 | + |
| 238 | +1. To remove the old drivers and clean up related system files and registry entries, follow these steps: |
| 239 | + |
| 240 | + 1. Uninstall any incorrect drivers. For example, if you want to use GPU-P together with NVIDIA vGPU hardware, uninstall all non-vGPU NVIDIA drivers. To uninstall the driver, run the following command at the command prompt: |
| 241 | + |
| 242 | + ```console |
| 243 | + pnputil /delete-driver <Published Name> /uninstall /force |
| 244 | + ``` |
| 245 | + |
| 246 | + > [!NOTE] |
| 247 | + > In this command, \<Published Name> is the name of the driver. |
| 248 | + |
| 249 | + 1. Use the [DevNodeClean](https://www.microsoft.com/download/details.aspx?id=42286&msockid=2984b5ddab276c5d2200a0dbaa9d6d1d) tool to remove stale device nodes. |
| 250 | + |
| 251 | + 1. To repair the system files, run the following commands, in sequence, at the command prompt: |
| 252 | + |
| 253 | + ```console |
| 254 | + sfc /scannow |
| 255 | + DISM /Online /Cleanup-Image /RestoreHealth |
| 256 | + ``` |
| 257 | + |
| 258 | + 1. Install the correct GPU drivers from the vendor. |
| 259 | + |
| 260 | +1. Restart the VM. |
| 261 | + |
| 262 | +1. To verify that the GPU is now available, open a Windows PowerShell Command Prompt window on the host computer, and then run the following command: |
| 263 | + |
| 264 | + ```powershell |
| 265 | + Get-VMHostPartitionableGpu |
| 266 | + ``` |
| 267 | + |
| 268 | +### Can't assign a GPU to a VM because of insufficient resources |
| 269 | + |
| 270 | +When you're assigning a GPU to a VM, you might see error messages such as the following messages: |
| 271 | + |
| 272 | +> This Device Cannot Find Enough Free Resources to Use (Code:12) |
| 273 | +
|
| 274 | +> GPU Partition: Error Insufficient system resources exist to complete the requested service. |
| 275 | +
|
| 276 | +Such messages indicate that the VM has insufficient allocated Memory-Mapped IO (MMIO) space, or is otherwise misconfigured. For information about how to calculate and configure the resources that VMs need, see the following articles: |
| 277 | + |
| 278 | +- For DDA, see [Deploy devices by using Discrete Device Assignment: MMIO space](/windows-server/virtualization/hyper-v/plan/plan-for-deploying-devices-using-discrete-device-assignment#mmio-space). |
| 279 | +- For GPU-P, see [Partition and assign GPUs to a virtual machine](/windows-server/virtualization/hyper-v/partition-assign-vm-gpu?tabs=windows-admin-center) and your NVIDIA vGPU documentation. |
| 280 | + |
| 281 | +## Data collection |
| 282 | + |
| 283 | +If you still can't resolve your issue, contact Microsoft Support or your vGPU vendor for more assistance. Prepare to share the information that you gathered while troubleshooting and the results of your troubleshooting. Additionally, gather the following information: |
| 284 | + |
| 285 | +- To gather information about GPUs, run the following PowerShell command: |
| 286 | + |
| 287 | + ```powershell |
| 288 | + Get-PnpDevice -FriendlyName "<device-friendly-name>" |
| 289 | + ``` |
| 290 | + |
| 291 | +- If you're using GPU-P, run the following PowerShell command on the host computer to get the details of the partitionable GPUs: |
| 292 | + |
| 293 | + ```powershell |
| 294 | + Get-VMHostPartitionableGpu | FL Name, ValidPartitionCounts |
| 295 | + ``` |
| 296 | + |
| 297 | +- Note the **Driver Model** information on the **Display** tab of the DirectX Diagnostic Tool. |
| 298 | +- In Device Manager, note the properties of the affected GPU from the **General**, **Driver,** and **Location Path** tabs. |
| 299 | +- In Windows Admin Center, note the GPU status. |
| 300 | +- Note any applicable load information that you see in Task Manager and `nvidia-smi`. |
| 301 | + |
| 302 | +## More information |
| 303 | + |
| 304 | +- [Plan for GPU acceleration in Windows Server](/windows-server/virtualization/hyper-v/plan/plan-for-gpu-acceleration-in-windows-server) |
| 305 | +- [GPU Partitioning](/windows-server/virtualization/hyper-v/gpu-partitioning) |
| 306 | +- [Partition and assign GPUs to a virtual machine](/windows-server/virtualization/hyper-v/partition-assign-vm-gpu) |
| 307 | +- [Deploy devices by using Discrete Device Assignment](/windows-server/virtualization/hyper-v/plan/plan-for-deploying-devices-using-discrete-device-assignment) |
| 308 | +- [Deploy graphics devices by using Discrete Device Assignment: Prerequisites](/windows-server/virtualization/hyper-v/deploy/deploying-graphics-devices-using-dda#prerequisites) |
| 309 | +- [Use GPUs with Discrete Device Assignment in clustered VMs](/windows-server/virtualization/hyper-v/deploy/use-gpu-with-clustered-vm?tabs=windows-admin-center&pivots=windows-server) |
| 310 | + |
| 311 | +For more information about the NVIDIA hardware, software, and licenses, see the following articles: |
| 312 | + |
| 313 | +- [NVIDIA Virtual GPU Software User Guide](https://docs.nvidia.com/grid/latest/grid-vgpu-user-guide/index.html) |
| 314 | +- [NVIDIA License System User Guide](https://docs.nvidia.com/license-system/latest/nvidia-license-system-user-guide/index.html) |
| 315 | + |
| 316 | +[!INCLUDE [third-party-disclaimer](../../includes/third-party-disclaimer.md)] |
| 317 | + |
| 318 | +[!INCLUDE [Third-party disclaimer](../../includes/third-party-contact-disclaimer.md)] |
0 commit comments