Tutorial for passing through a Nvidia RTX graphics card to a Windows 10 virtual machine using a modified VBIOS
Last update: September 14, 2021
Starting with the GeForce 1000 series, vfio passthrough of a Nvidia GPU has become a little more complicated. If, when starting the VM, you get a black screen, chances are you need to pass along a VBIOS file to the VM so the GPU can properly initialize.
This post is about passing through a Nvidia RTX 2070 Super GPU or any other modern Nvidia GPU to a Windows 10 guest.
I’ve already written a detailed tutorial on Windows 10 kvm VGA passthrough based on QEMU version 2.11. Years have passed and recent distributions like Ubuntu 22.04, Linux Mint 21, or Manjaro come with QEMU 6.0 or higher.
A lot has happened since version QEMU 2.11. QEMU 4.0 includes numerous changes and improvements such as trim support in the virtio-blk driver, pcie-root-port with PCIe 4.0 support (with Q35-4.0 machine type), as well as improved audio.
It wasn’t easy this time. Don’t get me wrong – the VFIO passthrough part, though challenging in some ways, went quite well. All in all I’m pleased now with the results. Here the Passmark 9.0 benchmark as uploaded onto their database (for more details, click the frame below):
I’ve been contemplating a PC upgrade for more than a year (see my post here). At first I considered staying with Intel and getting an i9-9900K CPU with integrated GPU on a Z390 motherboard.
Along came the AMD Ryzen 9 3900X that topped the benchmarks, including the Adobe Lightroom and Photoshop benchmarks (to be precise, it ranked #4 in the Adobe Lightroom benchmark, and a narrow #1 in the Adobe Photoshop benchmark). These good news about the AMD Ryzen 3900X were soon followed by reports about BIOS issues and VFIO incompatibility. At the very least, it looked like VGA passthrough was more challenging.
Then I read Bryan Steiner’s GPU passthrough tutorial for the AMD Ryzen 9 3900X and an Ubuntu-based Pop!_OS Linux host. Several users on the VFIO Reddit forum reported successful VFIO VGA passthrough with the AMD Ryzen 9.
A year ago I wrote about the 2D graphics performance impact of the Windows 10 (1803) update inside a virtual machine. As it turned out, the performance impact was related to the Spectre vulnerability patch that Microsoft had introduced. However, the same patch had practically no performance impact on a Windows 10 bare-metal installation.
Time has passed and I wanted to see if there has been any progress. Right now I’m running Windows 10 (1903) with Nvidia driver release 431.36. Windows 10 is up-to-date, Nvidia however already offers a newer version (431.60).
Update September 14, 2021: This is a complete revamp, adding new, more robust methods and dropping outdated ones.
Update November 17, 2022: Kernel 6 seems to break the grub method.
When running a VM with GPU passthrough, that GPU should be bound to the VFIO driver. To make this happen, we need to prevent the regular graphics driver from binding to the passthrough GPU and instead bind the vfio-pci driver.
In the past we used to blacklist the graphics driver. This worked in most cases, but what if you need the graphics driver for another GPU, e.g. the host GPU?
Before you get your hopes high, this post is not (yet?) a tutorial on creating a Windows 10 virtual machine using the Virtual Machine Manager (virt-manager) GUI. It should have been, though. I spent the better part of a week trying to configure and install a Windows 10 VM that delivers the performance that I’m used to.
As it turns out, it was a failure. Don’t get me wrong, I did manage to configure and run Windows using virt-manager and virsh. I even installed it multiple times, changing the configuration to what I hoped would improve performance. But whatever I tried, I never got even near the speed and snappiness that I achieve by following my tutorial using a start script.
Many users – myself included – rather prefer the comfort of a graphical user interface with check boxes and pull-down menus to select the various options. I’ve listed some tutorials using the virt-manager at the end, for those who came to find a solution.
Back in 2012 I built a PC around the Intel i7 3930K 6-core/12HT processor which I have been using ever since. While it’s still a strong PC, especially with the upgrades (GPU, SSD) I made, I’m starting to feel that editing photos isn’t as snappy as it used to be. I am also curious in how well the new generation of CPUs lend themselves to VGA passthrough. In short, I’m considering building a new PC.