I’ve been tweaking my configuration for my needs and it performs very well. As a reference, I’m posting my:
- hardware configuration
- Linux distro, kernel, etc.
- Windows VM configuration (XML)
Hardware
- AMD Ryzen 9 3900X CPU
- Gigabyte X570 Aorus Pro motherboard, upgraded to latest BIOS F12e
- 64 GB RAM
- Samsung SSD 970 EVO Plus 1TB NVMe drive for guests, set up as LVM drive
- Samsung SSD 970 EVO Plus 500 GB NVMe drive for the host
- Gigabyte Nvidia Geforce GTX 970 GPU for the guest
- PNY Nvidia Quadro 2000 card for the host, updated to support UEFI
- A bunch of HDD drives using LVM – around 11 TB internal storage
- Asus Xonar Essence STX PCIe sound card
Host
- Manjaro Linux, Xfce 4.14.2
- Kernel 5.4.43-1-MANJARO
- QEMU 5.0.0-6
- libvirt 6.4.0-1
Windows 10 VM Configuration
Warning: Don’t just copy/paste the xml file below – it needs to be edited to match your system / hardware configuration!
<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm"> <name>win10</name> <uuid>d32abe99-3f96-4aa5-a12b-123456abcdef</uuid> <title>Windows 10 Pro</title> <metadata> <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0"> <libosinfo:os id="http://microsoft.com/win/10"/> </libosinfo:libosinfo> </metadata> <memory unit="KiB">50331648</memory> <currentMemory unit="KiB">50331648</currentMemory> <memoryBacking> <hugepages/> </memoryBacking> <vcpu placement="static">24</vcpu> <cputune> <vcpupin vcpu="0" cpuset="0"/> <vcpupin vcpu="1" cpuset="12"/> <vcpupin vcpu="2" cpuset="1"/> <vcpupin vcpu="3" cpuset="13"/> <vcpupin vcpu="4" cpuset="2"/> <vcpupin vcpu="5" cpuset="14"/> <vcpupin vcpu="6" cpuset="3"/> <vcpupin vcpu="7" cpuset="15"/> <vcpupin vcpu="8" cpuset="4"/> <vcpupin vcpu="9" cpuset="16"/> <vcpupin vcpu="10" cpuset="5"/> <vcpupin vcpu="11" cpuset="17"/> <vcpupin vcpu="12" cpuset="6"/> <vcpupin vcpu="13" cpuset="18"/> <vcpupin vcpu="14" cpuset="7"/> <vcpupin vcpu="15" cpuset="19"/> <vcpupin vcpu="16" cpuset="8"/> <vcpupin vcpu="17" cpuset="20"/> <vcpupin vcpu="18" cpuset="9"/> <vcpupin vcpu="19" cpuset="21"/> <vcpupin vcpu="20" cpuset="10"/> <vcpupin vcpu="21" cpuset="22"/> <vcpupin vcpu="22" cpuset="11"/> <vcpupin vcpu="23" cpuset="23"/> </cputune> <os> <type arch="x86_64" machine="pc-q35-5.0">hvm</type> <loader readonly="yes" type="pflash">/usr/share/OVMF/x64/OVMF_CODE.fd</loader> <nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram> <boot dev="hd"/> <bootmenu enable="no"/> </os> <features> <acpi/> <apic/> <hyperv> <relaxed state="on"/> <vapic state="on"/> <spinlocks state="on" retries="8191"/> <vpindex state="on"/> <synic state="on"/> <stimer state="on"/> <reset state="on"/> <vendor_id state="on" value="AuthenticAMD"/> <frequencies state="on"/> </hyperv> <kvm> <hidden state="on"/> </kvm> <vmport state="off"/> </features> <cpu mode="custom" match="exact" check="none"> <model fallback="allow">EPYC-IBPB</model> <topology sockets="1" cores="12" threads="2"/> <feature policy="require" name="svm"/> <feature policy="require" name="apic"/> <feature policy="require" name="invtsc"/> <feature policy="require" name="hypervisor"/> <feature policy="require" name="topoext"/> <feature policy="require" name="ibpb"/> <feature policy="require" name="ssbd"/> <feature policy="require" name="virt-ssbd"/> </cpu> <clock offset="localtime"> <timer name="rtc" present="no" tickpolicy="catchup"/> <timer name="pit" present="no" tickpolicy="delay"/> <timer name="hpet" present="no"/> <timer name="kvmclock" present="no"/> <timer name="hypervclock" present="yes"/> <timer name="tsc" present="yes" mode="native"/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled="no"/> <suspend-to-disk enabled="no"/> </pm> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type="block" device="disk"> <driver name="qemu" type="raw" cache="none" io="native" discard="unmap" detect_zeroes="on"/> <source dev="/dev/vmvg/win10"/> <target dev="vda" bus="virtio"/> <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/> </disk> <disk type="block" device="disk"> <driver name="qemu" type="raw" cache="none" io="native" discard="ignore"/> <source dev="/dev/photos/photo_stripe"/> <target dev="vdb" bus="virtio"/> <address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/> </disk> <disk type="block" device="disk"> <driver name="qemu" type="raw" cache="none" io="native" discard="ignore"/> <source dev="/dev/media/photo_raw"/> <target dev="vdc" bus="virtio"/> <address type="pci" domain="0x0000" bus="0x0a" slot="0x00" function="0x0"/> </disk> <disk type="block" device="disk"> <driver name="qemu" type="raw" cache="none" io="native" discard="unmap" detect_zeroes="unmap"/> <source dev="/dev/vmvg/workdrive"/> <target dev="vdd" bus="virtio"/> <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/> </disk> <controller type="usb" index="0" model="qemu-xhci" ports="15"> <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/> </controller> <controller type="pci" index="0" model="pcie-root"/> <controller type="pci" index="1" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="1" port="0x8"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0" multifunction="on"/> </controller> <controller type="pci" index="2" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="2" port="0x9"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/> </controller> <controller type="pci" index="3" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="3" port="0xa"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/> </controller> <controller type="pci" index="4" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="4" port="0xb"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x3"/> </controller> <controller type="pci" index="5" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="5" port="0xc"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x4"/> </controller> <controller type="pci" index="6" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="6" port="0xd"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x5"/> </controller> <controller type="pci" index="7" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="7" port="0xe"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x6"/> </controller> <controller type="pci" index="8" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="8" port="0xf"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x7"/> </controller> <controller type="pci" index="9" model="pcie-to-pci-bridge"> <model name="pcie-pci-bridge"/> <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/> </controller> <controller type="pci" index="10" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="10" port="0x10"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/> </controller> <controller type="pci" index="11" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="11" port="0x11"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1"/> </controller> <controller type="pci" index="12" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="12" port="0x12"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2"/> </controller> <controller type="pci" index="13" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="13" port="0x13"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3"/> </controller> <controller type="pci" index="14" model="pcie-root-port"> <model name="pcie-root-port"/> <target chassis="14" port="0x14"/> <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/> </controller> <controller type="sata" index="0"> <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/> </controller> <interface type="bridge"> <mac address="52:54:00:e1:01:07"/> <source bridge="bridge0"/> <model type="virtio"/> <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/> </interface> <input type="mouse" bus="ps2"/> <input type="keyboard" bus="ps2"/> <hostdev mode="subsystem" type="pci" managed="yes"> <source> <address domain="0x0000" bus="0x08" slot="0x00" function="0x0"/> </source> <address type="pci" domain="0x0000" bus="0x0b" slot="0x00" function="0x0"/> </hostdev> <hostdev mode="subsystem" type="pci" managed="yes"> <source> <address domain="0x0000" bus="0x08" slot="0x00" function="0x1"/> </source> <address type="pci" domain="0x0000" bus="0x0c" slot="0x00" function="0x0"/> </hostdev> <hostdev mode="subsystem" type="pci" managed="yes"> <source> <address domain="0x0000" bus="0x08" slot="0x00" function="0x3"/> </source> <address type="pci" domain="0x0000" bus="0x0d" slot="0x00" function="0x0"/> </hostdev> <hostdev mode="subsystem" type="pci" managed="yes"> <source> <address domain="0x0000" bus="0x0b" slot="0x00" function="0x0"/> </source> <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/> </hostdev> <hostdev mode="subsystem" type="pci" managed="yes"> <source> <address domain="0x0000" bus="0x0b" slot="0x00" function="0x1"/> </source> <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/> </hostdev> <memballoon model="none"/> <rng model="virtio"> <backend model="random">/dev/urandom</backend> <address type="pci" domain="0x0000" bus="0x0e" slot="0x00" function="0x0"/> </rng> <panic model="hyperv"/> </devices> <qemu:commandline> <qemu:arg value="-device"/> <qemu:arg value="ich9-intel-hda,bus=pcie.0,addr=0x1b"/> <qemu:arg value="-device"/> <qemu:arg value="hda-micro,audiodev=hda"/> <qemu:arg value="-audiodev"/> <qemu:arg value="pa,id=hda,server=/run/user/1000/pulse/native"/> </qemu:commandline> </domain>
If this post has been helpful, click the “Like” button below. Don’t forget to share this page with your friends.