Saturday, 7 Mar 2026

Fedora GPU Passthrough Guide for Windows VM Performance

Why GPU Passthrough Matters for Linux Users

If you need professional Windows applications like Adobe software while daily-driving Linux, GPU passthrough is your solution. After analyzing numerous failed attempts across different distros, I discovered Fedora provides the most reliable path to success. This guide combines hard-won experience with technical expertise to help you achieve near-native Windows VM performance without dual-booting.

The Core Challenge: Hardware Virtualization

AMD GPUs require specific configuration to function properly in virtualized environments. The key issues are:

  • Reset bugs causing system freezes when stopping VMs
  • Driver conflicts between host and guest systems
  • Display handoff problems resulting in black screens

Through extensive testing, I found that Fedora's updated kernel (6.5+) offers better AMD GPU support than Ubuntu-based distros. The solution requires precise BIOS settings, kernel parameters, and XML configuration - all detailed below.

Preparing Your System for Passthrough

Before installing Fedora, ensure your hardware meets these requirements:

  • AMD CPU with SVM support (Intel VT-d for Intel CPUs)
  • Dedicated GPU (AMD RX 7000 series tested)
  • Integrated GPU for host display output
  • UEFI motherboard with IOMMU support

BIOS Configuration Essentials

  1. Enable SVM Mode (AMD) or VT-d (Intel)
  2. Set primary display to integrated graphics
  3. Disable CSM (Compatibility Support Module)
  4. Enable Above 4G Decoding
  5. Save changes and reboot

Fedora Installation Steps

  1. Download Fedora KDE Plasma ISO
  2. Create bootable USB with Rufus (DD mode)
  3. Install with default settings, using entire disk
  4. Select "Minimal Installation" during setup
  5. Apply updates: sudo dnf update

Configuring GPU Passthrough

After installation, verify IOMMU groups:

sudo dnf install pciutils
for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU Group %s ' "$n"; lspci -nns "${d##*/}"; done

Kernel Parameter Setup

  1. Edit GRUB configuration:
sudo nano /etc/default/grub
  1. Add these parameters to GRUB_CMDLINE_LINUX:
amd_iommu=on iommu=pt video=efifb:off
  1. Update GRUB:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Isolating GPU for Passthrough

  1. Identify GPU IDs:
lspci -nn | grep -E 'VGA|Audio'
  1. Create VFIO config:
echo "options vfio-pci ids=1002:xxxx,1002:yyyy" | sudo tee /etc/modprobe.d/vfio.conf
  1. Rebuild initramfs:
sudo dracut -f --kver $(uname -r)

Creating the Windows VM

Install required virtualization packages:

sudo dnf install @virtualization virt-manager virt-viewer
sudo systemctl enable --now libvirtd

VM Configuration Steps

  1. Launch virt-manager and create new VM
  2. Select Windows ISO installation media
  3. Allocate resources:
    • CPUs: Half your physical cores
    • RAM: 50-75% of system memory
  4. Enable UEFI with OVMF firmware
  5. Add PCI host devices:
    • Your GPU (VGA controller)
    • Associated audio device

Critical XML Edits

Add these lines to your VM's XML configuration in virt-manager (Enable XML editing first):

<qemu:commandline>
  <qemu:arg value='-set'/>
  <qemu:arg value='device.hostdev0.x-igd-gms=1'/>
  <qemu:arg value='-set'/>
  <qemu:arg value='device.hostdev0.ramfb=on'/>
</qemu:commandline>

Solving Common Issues

Black Screen Fixes

  • Connect monitor to integrated GPU for host
  • Use dedicated GPU ports for VM output
  • Add this kernel parameter: video=vesafb:off,efifb:off

AMD Reset Bug Workaround

  1. Create GPU ROM dump:
echo 1 | sudo tee /sys/bus/pci/devices/0000:XX:XX.X/rom
sudo cat /sys/bus/pci/devices/0000:XX:XX.X/rom > vbios.rom
echo 0 | sudo tee /sys/bus/pci/devices/0000:XX:XX.X/rom
  1. Add ROM file to VM XML:
<rom file='/path/to/vbios.rom'/>

Performance Optimization

  • Use virtio drivers for storage and networking
  • Enable CPU pinning in virt-manager
  • Add hyperv enlightenments:
<hyperv>
  <relaxed state='on'/>
  <vapic state='on'/>
  <spinlocks state='on' retries='8191'/>
</hyperv>

Post-Installation Setup

Windows Configuration

  1. Install virtio-win drivers
  2. Download AMD Adrenalin drivers
  3. Disable Windows automatic driver updates
  4. Set power plan to High Performance

Input Device Management

For seamless control:

  • Use USB passthrough for dedicated mouse/keyboard
  • Consider barrier-kvm for clipboard sharing
  • Configure Looking Glass for single-monitor setup:
sudo dnf copr enable jonnius/looking-glass
sudo dnf install looking-glass

Essential Tools Checklist

  1. Rufus: USB creation tool
  2. virt-manager: GUI for KVM management
  3. Looking Glass: Low-latency display solution
  4. WinSCP: Transfer files between host/guest
  5. LibreOffice: Document alternative to MS Office

Final Thoughts and Next Steps

Achieving functional GPU passthrough requires patience but delivers unparalleled flexibility. After three days of troubleshooting, I successfully edited this video in Premiere Pro running in a Fedora-hosted Windows VM. The performance difference between basic virtualization and proper GPU passthrough is night and day - approximately 80% of native speed in benchmarks.

Which step are you most concerned about implementing? Share your setup details in the comments for personalized troubleshooting advice. For those attempting this, I strongly recommend:

  1. Creating full disk backups before starting
  2. Documenting every command and change
  3. Testing each configuration step individually

The Linux virtualization ecosystem continues improving, with Plasma 6 promising better Wayland support for future passthrough implementations. Until then, this guide provides the most reliable path to GPU acceleration in Windows VMs on AMD hardware.

PopWave
Youtube
blog