Hi everyone, I'm still very new to unraid (still in my trial) but I am having some issues. My windows gaming VM is having some serious performance issues and is significantly worse compared to what I've replicated with baremetal windows, I recently downgraded my Ryzen 5950x to a Ryzen 5500, I had no issues with a comparable VM on the 5950x but ever since changing the CPU, I cannot get any reliable performance in any VM configuration I set up. (Unraid + Dockers work flawlessly on this system apart from the VMs)
I am trying to have 4 out of 6 cores isolated and used for the VM, passing through 2 NVME drives (one for boot and one for games/data) and using a GTX980ti passed through as well.
-I've been using CS:GO as the main game to test what's working/not working. On baremetal with 2 cores turned off, the system can easily get 200+ fps, however in the VM it can't consistently make over 60fps and sometimes dips to as low as >20fps with similar behaviour on other games and emulators as well.
-Cinebench also shows significant differences with multi core scores 1000 - 2000 less on the VM (with the same amount of cores/threads enabled)
-Windows is also very slow to load at times, with file explorer for example sometimes taking up to 10 seconds to open a window
The troubleshooting steps I've tried so far with no luck so far are:
- Resetting bios and updating to latest version
- ensuring bios has virtualisation features enabled
- completely reinstalling VM + OS on freshly formatted NVME drive
- lowering/changing VM cores / ram
- isolating CPU cores for VM
- setting CPU governor to performance
- testing VM with both windows 10 + 11
- Testing VM with both i440fx & Q35 (current and past versions)
- enabling/disabling hyperV in both unraid VM settings and Windows
- testing with both seabios & OVMF
- testing VM on array & cache drive Vdisk as opposed to the passed through NVME
- disabling audio controllers
- disabling all passed through USB controllers
- Disabling passed through GPU (issue persists on cinebench with VNC)
- Testing VM directly plugged into monitor (instead of remote desktop like I normally access the VM)
- MSI utility to try and fix latency issues
- Monitored with latencymon to check for issues there
Latencymon gave me the biggest indication that there is a problem (see attached) but so far I've been unable to figure out a solution and to be honest, I don't know enough about latency issues to tell whether this would cause such dramatic performance issues, or the issue is being caused something else entirely, these latency issues occur regardless of whether the GPU is enabled or not, and as soon as you fix one driver issue, it's just as if another will take its place in being problematic.
If anyone is able to help me I'd really appreciate it, I am running out of ideas on what could be the problem and how to fix it. If there's any other info that would be helpful to provide let me know!
Latencymon Results
CONCLUSION
_________________________________________________________________________________________________________
Your system appears to be having trouble handling real-time audio and other tasks. You are likely to experience buffer underruns appearing as drop outs, clicks or pops. One or more DPC routines that belong to a driver running in your system appear to be executing for too long. One problem may be related to power management, disable CPU throttling settings in Control Panel and BIOS setup. Check for BIOS updates.
LatencyMon has been analyzing your system for 0:51:03 (h:mm:ss) on all processors.
_________________________________________________________________________________________________________
SYSTEM INFORMATION
_________________________________________________________________________________________________________
Computer name: DESKTOP-6ODQ0HV
OS version: Windows 10, 10.0, version 2009, build: 19044 (x64)
Hardware: Standard PC (i440FX + PIIX, 1996), QEMU
BIOS: 0.0.0
CPU: AuthenticAMD AMD Ryzen 5 5500
Logical processors: 8
Processor groups: 1
Processor group size: 8
RAM: 8188 MB total
_________________________________________________________________________________________________________
CPU SPEED
_________________________________________________________________________________________________________
Reported CPU speed (WMI): 3593 MHz
Reported CPU speed (registry): 3593 MHz
Note: reported execution times may be calculated based on a fixed reported CPU speed. Disable variable speed settings like Intel Speed Step and AMD Cool N Quiet in the BIOS setup for more accurate results.
_________________________________________________________________________________________________________
MEASURED INTERRUPT TO USER PROCESS LATENCIES
_________________________________________________________________________________________________________
The interrupt to process latency reflects the measured interval that a usermode process needed to respond to a hardware request from the moment the interrupt service routine started execution. This includes the scheduling and execution of a DPC routine, the signaling of an event and the waking up of a usermode thread from an idle wait state in response to that event.
Highest measured interrupt to process latency (µs): 2562.40
Average measured interrupt to process latency (µs): 61.726958
Highest measured interrupt to DPC latency (µs): 788.20
Average measured interrupt to DPC latency (µs): 16.833774
_________________________________________________________________________________________________________
REPORTED ISRs
_________________________________________________________________________________________________________
Interrupt service routines are routines installed by the OS and device drivers that execute in response to a hardware interrupt signal.
Highest ISR routine execution time (µs): 778.613972
Driver with highest ISR routine execution time: dxgkrnl.sys - DirectX Graphics Kernel, Microsoft Corporation
Highest reported total ISR routine time (%): 0.008228
Driver with highest ISR total time: dxgkrnl.sys - DirectX Graphics Kernel, Microsoft Corporation
Total time spent in ISRs (%) 0.008568
ISR count (execution time <250 µs): 39130
ISR count (execution time 250-500 µs): 0
ISR count (execution time 500-1000 µs): 14
ISR count (execution time 1000-2000 µs): 0
ISR count (execution time 2000-4000 µs): 0
ISR count (execution time >=4000 µs): 0
_________________________________________________________________________________________________________
REPORTED DPCs
_________________________________________________________________________________________________________
DPC routines are part of the interrupt servicing dispatch mechanism and disable the possibility for a process to utilize the CPU while it is interrupted until the DPC has finished execution.
Highest DPC routine execution time (µs): 1222.236571
Driver with highest DPC routine execution time: dxgkrnl.sys - DirectX Graphics Kernel, Microsoft Corporation
Highest reported total DPC routine time (%): 0.091009
Driver with highest DPC total execution time: rspLLL64.sys - Resplendence Latency Monitoring and Auxiliary Kernel Library, Resplendence Software Projects Sp.
Total time spent in DPCs (%) 0.109178
DPC count (execution time <250 µs): 1213444
DPC count (execution time 250-500 µs): 0
DPC count (execution time 500-10000 µs): 646
DPC count (execution time 1000-2000 µs): 2
DPC count (execution time 2000-4000 µs): 0
DPC count (execution time >=4000 µs): 0
_________________________________________________________________________________________________________
REPORTED HARD PAGEFAULTS
_________________________________________________________________________________________________________
Hard pagefaults are events that get triggered by making use of virtual memory that is not resident in RAM but backed by a memory mapped file on disk. The process of resolving the hard pagefault requires reading in the memory from disk while the process is interrupted and blocked from execution.
NOTE: some processes were hit by hard pagefaults. If these were programs producing audio, they are likely to interrupt the audio stream resulting in dropouts, clicks and pops. Check the Processes tab to see which programs were hit.
Process with highest pagefault count: nvidia web helper.exe
Total number of hard pagefaults 2107
Hard pagefault count of hardest hit process: 564
Number of processes hit: 61
_________________________________________________________________________________________________________
PER CPU DATA
_________________________________________________________________________________________________________
CPU 0 Interrupt cycle time (s): 547.618506
CPU 0 ISR highest execution time (µs): 379.897579
CPU 0 ISR total execution time (s): 0.079771
CPU 0 ISR count: 1907
CPU 0 DPC highest execution time (µs): 737.502087
CPU 0 DPC total execution time (s): 24.251948
CPU 0 DPC count: 1114607
_________________________________________________________________________________________________________
CPU 1 Interrupt cycle time (s): 33.657436
CPU 1 ISR highest execution time (µs): 117.618703
CPU 1 ISR total execution time (s): 0.003682
CPU 1 ISR count: 344
CPU 1 DPC highest execution time (µs): 142.537156
CPU 1 DPC total execution time (s): 0.027365
CPU 1 DPC count: 1723
_________________________________________________________________________________________________________
CPU 2 Interrupt cycle time (s): 38.084832
CPU 2 ISR highest execution time (µs): 778.613972
CPU 2 ISR total execution time (s): 2.016367
CPU 2 ISR count: 36893
CPU 2 DPC highest execution time (µs): 1222.236571
CPU 2 DPC total execution time (s): 2.027896
CPU 2 DPC count: 82932
_________________________________________________________________________________________________________
CPU 3 Interrupt cycle time (s): 26.906929
CPU 3 ISR highest execution time (µs): 0.0
CPU 3 ISR total execution time (s): 0.0
CPU 3 ISR count: 0
CPU 3 DPC highest execution time (µs): 138.178681
CPU 3 DPC total execution time (s): 0.010950
CPU 3 DPC count: 690
_________________________________________________________________________________________________________
CPU 4 Interrupt cycle time (s): 25.354602
CPU 4 ISR highest execution time (µs): 0.0
CPU 4 ISR total execution time (s): 0.0
CPU 4 ISR count: 0
CPU 4 DPC highest execution time (µs): 486.516003
CPU 4 DPC total execution time (s): 0.173811
CPU 4 DPC count: 6422
_________________________________________________________________________________________________________
CPU 5 Interrupt cycle time (s): 22.808875
CPU 5 ISR highest execution time (µs): 0.0
CPU 5 ISR total execution time (s): 0.0
CPU 5 ISR count: 0
CPU 5 DPC highest execution time (µs): 126.766490
CPU 5 DPC total execution time (s): 0.042964
CPU 5 DPC count: 1979
_________________________________________________________________________________________________________
CPU 6 Interrupt cycle time (s): 22.730824
CPU 6 ISR highest execution time (µs): 0.0
CPU 6 ISR total execution time (s): 0.0
CPU 6 ISR count: 0
CPU 6 DPC highest execution time (µs): 1080.260507
CPU 6 DPC total execution time (s): 0.216739
CPU 6 DPC count: 5468
_________________________________________________________________________________________________________
CPU 7 Interrupt cycle time (s): 18.460586
CPU 7 ISR highest execution time (µs): 0.0
CPU 7 ISR total execution time (s): 0.0
CPU 7 ISR count: 0
CPU 7 DPC highest execution time (µs): 97.459505
CPU 7 DPC total execution time (s): 0.004186
CPU 7 DPC count: 271
_______________________________________________________________________________
VM XML
<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm' id='10'>
<name>Windows 10 NEW</name>
<uuid>ac4048a6-b9b5-de9e-d262-88d2ffc5e7e7</uuid>
<metadata>
<vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
</metadata>
<memory unit='KiB'>8388608</memory>
<currentMemory unit='KiB'>8388608</currentMemory>
<memoryBacking>
<nosharepages/>
</memoryBacking>
<vcpu placement='static'>8</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='2'/>
<vcpupin vcpu='1' cpuset='8'/>
<vcpupin vcpu='2' cpuset='3'/>
<vcpupin vcpu='3' cpuset='9'/>
<vcpupin vcpu='4' cpuset='4'/>
<vcpupin vcpu='5' cpuset='10'/>
<vcpupin vcpu='6' cpuset='5'/>
<vcpupin vcpu='7' cpuset='11'/>
</cputune>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-6.2'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
<nvram>/etc/libvirt/qemu/nvram/ac4048a6-b9b5-de9e-d262-88d2ffc5e7e7_VARS-pure-efi.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<hyperv mode='custom'>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vendor_id state='on' value='none'/>
</hyperv>
</features>
<cpu mode='host-passthrough' check='none' migratable='on'>
<topology sockets='1' dies='1' cores='4' threads='2'/>
<cache mode='passthrough'/>
<feature policy='require' name='topoext'/>
</cpu>
<clock offset='localtime'>
<timer name='hypervclock' present='yes'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/local/sbin/qemu</emulator>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/mnt/user/isos/virtio-win-0.1.221-1.iso' index='1'/>
<backingStore/>
<target dev='hdb' bus='ide'/>
<readonly/>
<alias name='ide0-0-1'/>
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<alias name='usb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<alias name='usb'/>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<alias name='usb'/>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<alias name='usb'/>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'>
<alias name='pci.0'/>
</controller>
<controller type='ide' index='0'>
<alias name='ide'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<alias name='virtio-serial0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:63:c0:89'/>
<source bridge='br0'/>
<target dev='vnet9'/>
<model type='virtio-net'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/0'/>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/0'>
<source path='/dev/pts/0'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-10-Windows 10 NEW/org.qemu.guest_agent.0'/>
<target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
<alias name='channel0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='tablet' bus='usb'>
<alias name='input0'/>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'>
<alias name='input1'/>
</input>
<input type='keyboard' bus='ps2'>
<alias name='input2'/>
</input>
<audio id='1' type='none'/>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev0'/>
<rom file='/mnt/user/isos/FIXEDGTX980TI.dump'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x09' slot='0x00' function='0x1'/>
</source>
<alias name='hostdev1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev3'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</hostdev>
<memballoon model='none'/>
</devices>
<seclabel type='dynamic' model='dac' relabel='yes'>
<label>+0:+100</label>
<imagelabel>+0:+100</imagelabel>
</seclabel>
</domain>
tower-diagnostics-20220727-1752.zip