Play games in Windows on Linux! PCI passthrough quick guide

Is your suspend-to-mem and suspend-to-disk working with a GPU?

Yes it is. :) As long as I suspend/hibernate the VM before I put the host to sleep (I don't shut down often) I can just start it back up. I even pass through my USB 3.1 controller so I can use my KVM display port switch and when I hibernate the VM since it "shuts off" the USB controller gets passed back to the host. When I sleep/suspend to mem the VM goes into suspend mode in virt-manager, but I can't recall if it breaks after I put the host to sleep or not, I think it still turns on fine. To wake it back up from sleep/suspend to mem I have to use dompmwakeup from a virsh terminal.

@lessaj Awesome, thanks for the info. I've been trying to figure that out for a while.

Now, I'm having some issues with a recently acquired fury that I'm trying to pass through in place of my 970. libvirt keeps giving me device in use errors when I try to start the VM and when it passes through, I'm able to use it as long as I don't have the AMD drivers installed.

I went through the whole vfio-pci attachment process again, and I'm sitting here scratching my head. I even created a new domain in libvirt.

For the record, I'm using the arch-vfio kernel and I had more luck with an nvidia card than an amd one. My host card is a r9 380, I'm wondering if amdgpu is causing issues trying to bind to the fury, even after we attached vfio-pci to it.

I'm considering swapping in my 970 as the host device for now, but I hate nvidia cards in Linux with a passion. Any advice would be awesome. I've been scratching my head on this one for a while, and I'd rather not nuke and pave.

You can't have the Nvidia or AMD drivers loaded on the host. The drivers will interfere with vfio. Look up blacklisting modules for specific pci devices, as well as the XEN pci stub module. One of those might help.

yeah. damn. Up until today, I always had one of each vendor, so handling driver fencing was cake.

Guess I'll be learnin' me some new stuffs today.

I was not able to get audio properly working no matter what I tried and just decided to pass the onboard sound to the VM using virt manager (black listing not required). This worked without issues to my surprise and I was able to install my onboard sound drivers to the VM and get the full 5.1 audio. Of course when the VM is running there is no sound to the host but as soon as the VM is shutdown the host regains audio with no problems. I would have liked to have audio working on both at the same time but I can live with it, as the VM's only usage is for gaming.

The other option would have been to get a second sound card and pass that through to the VM but this would require the use of some sort of audio mixer as I would now have to connect 2 sound cards to one set of speakers. This was just further complicating the setup and adding cost so I gave up on this option for now.

I noticed that on my "passed through" GPU the fans stay on permanently until the windows VM is first started. The fans then stay off after the windows VM is shut down. Is there a way to remedy this or is this just how it works at the moment?

Also AMD 8350 users who have this setup working properly, please share your CPU topology:-). I have been testing out different socket and thread combinations on virt manager but I have gotten horrible performance on my VM with all the combinations I tried so far. I haven't looked into CPU pinning yet, if that is what is required to get this working properly.

Since the GPU doesn't have a driver controlling it until the VM boots it will do weird things.

And AMD doesn't have very good virtualization acceleration, so it's probably that.

I would pin your cpu, set up 1 socket, 4 (or 2) cores, 1 thread. Pin it to CPU 4,5,6,7. (assuming 0 indexed)

Also, I'm not sure if you're using windows 10, but I've heard that 8350's don't do so hot with windows 10. #justamdthings

Fury cards have a peculiar "reset" bug that makes them even worse for passthrough than nVidia cards, which just need to be tricked in Windows.

I would try Fury on the host & passthrough the 380. It's not the best for games but I bet it works easily.

The 380 had the reset bug as well, that's one reason I got the fury. I'd heard that the fury didn't suffer from this ailment.

Sorry, I didn't realize it was any other than the Fury line. I guess passthrough the 970 is your least bad option for now.

yep. I spent about 3 months working on the 380's issue. I might just throw a heatsink on my 3770 and stick the fury in there. Just need it for windows stuff anyways, not like it needs to be on 24/7.

@GrayBoltWolf Total Linux Noob here. Can this be done in Linux Mint aswell?

Yes it can be done in Linux Mint but there might be some complication involve there been some people who had succès with Ubuntu and Mint is a fork of Ubuntu. You can give it a go but just be aware of some complication with it. You can go with Debian stretch and install the cinnamon DE instead of gnome 3.

Hope it helps

1 Like

I will just make a thread when my new computer is in sight...

I tried pinning it exactly as suggested and it shows up as 4 logical cores on win8 task manager and 4 cores, 4 threads on CPUZ.
Performance is still horrible even with this setup. If I add and pin all 8 cores to the VM, the performance becomes just acceptable. I am not sure what I am missing here. One step forward, two steps back...lol

Are you sure you have virtualization acceleration enabled in your BIOS/system?

Yep, it's enabled. It's listed as SVM on the BIOS.

I forgot to mention that I am using a non activated win8.1 at the moment. This was downloaded from MS site and is currently under the 90 days trial. I am not sure if maybe there is some sort of limitation with running a non activated win8 on VM?