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 20.04, Linux Mint 20, or Manjaro come with QEMU 4.0, 4.2 or 5.1.
A lot has happened since version 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):
Qemu/kvm provides you with a plethora of ways to configure your storage devices. Yet no other type of device shows such a variance in its performance, with disk I/O throughput anywhere from stellar to abysmal using the very same hardware.
Problem: bad 2D performance in Windows VM versus Windows on bare metal
For the past few months I noticed sluggish 2D graphics in my Windows 10 VM, something that hadn’t happened before. Below are the Passmark 8 results and comparisons between different configurations/releases:
I’m running Linux Mint 18.3 which is based on Ubuntu 16.04 Xenial. Until yesterday I used the Personal Packet Archive ppa:jacob/virtualisation to get more up-to-date releases of Qemu, libvirt, and virt-manager.
Ubuntu and Linux Mint recently released security updates for their official (but old) qemu and libvirt packages to address the Meltdown and Spectre vulnerabilities. Unfortunately the Ubuntu 16.04 releases in the ppa:jacob/virtualisation archive have not been updated, judging from the upload date.