Anecdote time, I was in the same boat when I reinstalled a year and a bit ago.
TL;DR
- I could not get AMD drivers beyond Catalyst 18.5.1 working on i440fx based Windows 10 VMs, but worked fine under Q35.
- Watch out for new installs if your Q35 machine type is version ‘4.0’ and running Nvidia, use
<ioapic driver='kvm'/>if you’re stuck, but this should be resolved in recent point-releases of QEMU. - There’s evidence to suggest that drivers program the GPU differently if the card is detected as a legacy endpoint (PCI/i440fx) or a native PCIe endpoint (Q35).
- You may need to manually define the PCIe link speed and width in your libvirt definition or QEMU command line if you’re getting undesirable results on Q35. This tweak is a new feature in QEMU 4.0+.
In my circumstance back then I was still passing through an R9 290 to the Windows 10 VM and had been finding that drivers beyond Catalyst 18.5.1 would no longer play nice with the ioh3420 bridge to get them installed. In test VMs I’d discovered that later drivers worked fine with Q35 so that cemented the decision to switch the next time I was going to reinstall the VM.
Fast forward a few months later (when QEMU 4.0 came out) I acquired a GTX 1080 and decided to reinstall, sticking to the Q35 decision despite no longer having the affected card. I promptly came across this bug:
https://bugs.launchpad.net/qemu/+bug/1826422
This should be rectified now for new installs but something to keep in mind if you have an older distro.
Simultaneously on finding that bugzilla report I’d found @gnif’s thread here:
Post 125 on wards has more relevant info with regards to QEMU 4.0.
As an aside for this, the benchmark I’ve been using is the CUDA-based concBandwidthTest tool to verify PCIe link speeds which is linked in the thread from @PetebLazar
https://forums.evga.com/PCIE-bandwidth-test-cuda-m1972266.aspx
What I’d found at the time was that ‘out of the box’ my QEMU 4.0 PCIe negotiated link speed was woeful, equivalent to Gen 3 x1. Applying the XML changes in the thread to force it to Gen 3 x8 which is what it is in hardware (motherboard split x8 x8) brought it back up to expected levels. This was crossed checked with a bare-metal Windows install of the GTX 1080 in both x8 and x16 configurations. While not identical, it was in the order of a few hundred MB/s either side rather than GB/s off. The tool gives noisy results, but it is a general indicator. As a yard stick, Gen 3 x8 for my GTX 1080 is ~10-11GB/s bidirectional bandwidth as reported by the tool.
In effect, i440fx, bare metal and Q35 were close-enough in measured bandwidth for me to not look into it any deeper given that Q35 has been otherwise trouble free for me.
A note on GPU-Z, the Bus Interface tab isn’t always correct. If you have an Nvidia card check the Nvidia control panel, in particular the System Information section and scroll to the bottom to verify bus parameters.
From my perspective, I’ll be sticking with Q35 form now on because of driver compatibility and that I’ve not seen any regressions compared to i440fx post-link negotiation fix.