AMD GPU passthrough on 2950x

Hi guys
I’m starting research and tests to configure a gaming VM on my Linux host.
I’ve got 2 AMD GPUs 570 and 590 and a 2950x. I found several ryzen guides that look pretty reliable but is there anything special about Threadripper that I should be aware of? I’m not a real Linux noob but it’s my first really high-end build and my first attempt at GPU passthrough so any advice will be appreciated and valued!

Amd dev site has several guides
Look at iommu under system programing guide and at virtualization chapters
See guide for your cpu and gpu too as the landing page for guides lists just a small sample of the library available
And invest in advil and coffee as guides tend to be 100+pages

1 Like

This thread for VFIO performance is good to follow. You need to use real-time schedulers for the libvirt pinned CPU cores / iothreads. This helped my latency a lot.

For Threadripper you will also need to take into account numa tuning to reduce latency.

For audio I found the best latency was from passing through the motherboard builtin audio to the Windows 10 VM & adding a 2nd pcie soundcard for Linux. The cheap soundcards on Amazon / Ebay which are “for Windows XP” work fine in Linux (drivers = CMI873x or CMI876x) - but not in Windows 10.

For a high end VFIO audio solution with the mic & sound shared between the host & vm have a look at the 3rd option for “Seamless Audio Setup”. This will cost around 100 GBP & avoids 2 sets of headphones.

I found the Arch Wiki on VFIO very helpful. When you setup the VM in Virt Manager use the OVMF (UEFI) BIOS & also the Q35 chipset (Q35 is PCIE aware - the default i440fx chipset is not).

I get good performance with a host running Manjaro XFCE minimal + linux-hardened kernel (currently 4.20.xxx) - the kernel always has the latest features & gives me better performance than the current LTS kernel (4.14.xxx). Manjaro has been rock solid stable for me & avoids the bleeding edge breakage normally associated with Arch Linux. I also use this setup with zfs-dkms-git for a zfs encrypted $HOME mirror. With zfs you can get good vm disk performance with zfs block devices.

For better disk performance I run the Windows Guest VM from a small passthrough SSD & also passthrough an entire Hard Drive with my Steam libraries.

You may also want to apply this Threadripper patch. Running an Arch system makes it simple to run a custom kernel.

With a powerful Threadripper system you could experiment with Virtual Super Resolution.

Settings for good performance on AMD GPU’s:

In Windows 10 guest:

In Radeon settings:

  • override tesselation to x8
  • override anti aliasing to x4
  • enable Enhanced Sync

In games:

  • disable anti aliasing
  • disable vsync (although some games may run better with it enabled)

Other considerations:

  • Use a freesync monitor with 2 or more inputs (I plug the host Rx560 into the monitor HDMI & plug the passthrough Rx 570 GPU into the Displayport as it only gives Freesync over Displayport). I also plug the host Rx 560 into a 2nd monitor with DVI-D.

  • With some monitors the input source can be changed at the command line using ddcutil - see vfio-tools. Mine doesn’t so I just switch the inputs using the monitor button.

  • Get a cheap KVM switch to share a mouse / keyboard between the host & guest.

  • Give the Windows Guest 12GB of RAM.

  • Passthrough a whole USB 3.0 controller to the Windows Guest (which gives you 2 ports) & for extra ports plug a 4 port USB 3.0 hub into it. I attach a KVM switch / printer / gamepad / gaming wheel to the hub (& still have one passed through USB 3.0 slot free). Passing through a USB 2 controller will give you 4 slots. I tried passing a USB 2.0 controller on an AM3+ 970 motherboard but all USB 2.0 slots got passed through. USB 3.0 + hub seems a better solution.

5 Likes