Vga Passthrough Using kvm
VGA Passthrough is one of the things you can do when you have more then one gpus. In my case I have one HD 7750 and GTX 770.
System config
| Hardware | Model |
|---|---|
| Processor | AMD FX-8350 |
| Motherboard | Asus M5a97 R2.0 (Ubuntu) / Asus M5a99FX R2.0 (Arch) |
| Ram | 4x 8GB Corsair Vengeance |
| SSD | 128G Corsair force GS |
| Primary GPU | Nvidia GTX 770 ( Ubuntu/Arch ) |
| Secondary GPU | AMD/ATI Radeon HD 7750 |
| Software | Version |
|---|---|
| Ubuntu | 14.04 Gnome |
| Kernel | 3.13.0 - generic |
| Qemu | 2.0.0 |
Make sure your processor supports VT-d, motherboard supports IOMMU and also enable it. Note : I have seen few posts regarding some motherboards having lousy support for IOMMU.
Working settings for me
1. First thing to disable radeon drivers
blacklist radeon
2. Assigning it to pci_stub
pci_stub ids=1002:683f,1002:aab0
3. Set flags for KVM
options kvm allow_unsafe_assigned_interrupts=1 ignore_msrs=1
then execute
sudo update-initramfs
then reboot
4. Create script
qemu-system-x86_64 -enable-kvm \
-m 4096 \
-hda win7.img -cdrom /path/to/iso \
-cpu host
-smp cores=8,threads=1,sockets=1 \
-net nic -net tap \
-vga cirrus \
-device pci-assign,host=06:00.0 \
-device pci-assign,host=06:00.1 \
-soundhw hda
Video
Update : Benchmark
Bare metal - GTX 770

Bare metal - HD 7750
Novabench says GTX 770, but its HD 7750 (runnig on secondary).

VGA Passthrough - HD 7750 - Take 1

VGA Passthrough - HD 7750 - Take 2
Using
echo "options kvm-amd npt=0" > /etc/modprobe.d/kvm-amd.conf</code>
Refer : https://bbs.archlinux.org/viewtopic.php?pid=1270311#p1270311

VGA Passthrough - HD 7750 - Archlinux

Assigning GTX 770
I wasn’t able to assign GTX 770 as passthrough device, few notes about it.
- No reset option available under sysfs for device so even blacklisting nouveau and being used by pci_stub it was still giving output (blank) on screen.
- Couln’t find way to reset via setpci
- Haven’t tried on secondary pci slot, it should work on it. ( Update : Doesn’t work )
Update : Using VFIO in Archlinux
VGA Passthrough with VFIO works in Archlinux on my new upgraded motherboard
Asus M5A99FX R2.0. Here are configurations for that.
System configuration

version 2.4.0.1
1. Add vfio modules to initial ramdisk
MODULES="vfio vfio_iommu_type1 vfio_pci vfio_virqfd"
2. Run mkinitcpio -p linux
3. Add pci addresses to vfio options
options vfio-pci ids=1002:683f,1002:aab0
4. Qemu command
qemu-system-x86_64 -m 4096 -enable-kvm \
-drive file=/path/to/disk/disk.img,format=raw \
-device vfio-pci,host=03:00.0 -device vfio-pci,host=03:00.1 -cpu host -smp cores=8,threads=1,sockets=1 \
-net nic -net bridge,br=bridge0 \
-vga cirrus \
-soundhw hda