[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Windows 10 passthrough lag/micro-freeze issues during disk I/O
From: |
Th3R3al |
Subject: |
Re: Windows 10 passthrough lag/micro-freeze issues during disk I/O |
Date: |
Fri, 20 Mar 2020 20:50:49 +0100 |
Hello Jérôme,
just want to give a +1. But have the exact issue you described with
network i/o. If i try to transfer a big file from a samba share (at
around 40MB/s~) the VM is freezing. Nearly identical configuration to yours.
Greetings
Th3R3al
Am 20.03.20 um 20:46 schrieb Jérôme Poulin:
> Hi everyone,
>
> I have a VM right now that is setup as my gaming machine with video
> pass-through, it works perfectly except when there's I/O on the host.
>
> When there is I/O, the VM will have micro-freeze events where
> everything locks up for milliseconds up to a second at a time at
> frequent intervals, the host is on NVMe, CPUs are pinned with a
> dedicated core for emulator.
>
> Whatever I put, virtio, virtio-scsi, cache=none, cache=writeback,
> threads or native, as soon as there is I/O, I get the same problem, to
> the point where it causes disconnections on the virtual USB bus.
>
> VM is setup with hugepages, CPU pinning, I tried making qemu threads
> realtime with no success (even blue screens). I tried with dedicated
> cores (isolcpus), i440/q35, now I'm out of ideas. I do run a custom
> kernel to be able to use pcie_acs_override=downstream,multifunction in
> GRUB because I can't use passthrough otherwise.
>
> This problem has been following me from my old setup to my new setup
> Old setup:
> ASUS B150 PLUS USB3
> Core i7 6700K
> 16 GB DDR3
> SATA raw LVM volume for Windows
>
> New setup
> ASRock Z390 Taichi
> Core i7 9700K
> 48 GB DDR4
> NVMe raw LVM volume for Windows
>
> Any ideas would be appreciated.
>
> Here is the libvirt XML definition (I excluded the buses):
> <domain type='kvm'>
> <name>win10-jerome</name>
> <uuid>fc19f3c1-b8c6-4184-9b43-159157eff5b5</uuid>
> <memory unit='KiB'>15360000</memory>
> <currentMemory unit='KiB'>15360000</currentMemory>
> <memoryBacking>
> <hugepages/>
> <nosharepages/>
> <locked/>
> </memoryBacking>
> <vcpu placement='static'>4</vcpu>
> <cputune>
> <vcpupin vcpu='0' cpuset='0'/>
> <vcpupin vcpu='1' cpuset='1'/>
> <vcpupin vcpu='2' cpuset='2'/>
> <vcpupin vcpu='3' cpuset='3'/>
> <emulatorpin cpuset='7'/>
> </cputune>
> <resource>
> <partition>/machine</partition>
> </resource>
> <os>
> <type arch='x86_64' machine='pc-q35-4.0'>hvm</type>
> <boot dev='hd'/>
> <bootmenu enable='yes'/>
> </os>
> <features>
> <acpi/>
> <apic/>
> <hyperv>
> <relaxed state='on'/>
> <vapic state='on'/>
> <spinlocks state='on' retries='8191'/>
> <vpindex state='on'/>
> <runtime state='on'/>
> <synic state='on'/>
> <stimer state='on'/>
> <reset state='on'/>
> <frequencies state='on'/>
> </hyperv>
> <ioapic driver='kvm'/>
> </features>
> <cpu mode='host-passthrough' check='none'>
> <topology sockets='1' cores='4' threads='1'/>
> <feature policy='require' name='invtsc'/>
> </cpu>
> <clock offset='utc'>
> <timer name='hypervclock' present='yes'/>
> <timer name='hpet' present='yes'/>
> </clock>
> <devices>
> <emulator>/usr/bin/kvm-spice</emulator>
> <disk type='block' device='disk'>
> <driver name='qemu' type='raw' cache='none' io='native'/>
> <source dev='/dev/vgP4Root/win10jerome'/>
> <backingStore/>
> <target dev='sda' bus='sata'/>
> <address type='drive' controller='0' bus='0' target='0' unit='0'/>
> </disk>
> <disk type='block' device='disk'>
> <driver name='qemu' type='raw' cache='none' io='native'
> discard='ignore' detect_zeroes='off'/>
> <source dev='/dev/vgP4Root/win10data'/>
> <target dev='sdb' bus='scsi'/>
> <address type='drive' controller='0' bus='0' target='0' unit='1'/>
> </disk>
> <disk type='block' device='disk'>
> <driver name='qemu' type='raw' cache='none' io='native'
> discard='ignore' detect_zeroes='off'/>
> <source dev='/dev/vgP4Root/win10swap'/>
> <target dev='sdd' bus='scsi'/>
> <address type='drive' controller='0' bus='0' target='0' unit='3'/>
> </disk>
> <interface type='direct'>
> <mac address='52:54:00:31:1e:f9'/>
> <source dev='eth0' mode='bridge'/>
> <model type='virtio'/>
> <address type='pci' domain='0x0000' bus='0x04' slot='0x00'
> function='0x0'/>
> </interface>
> <input type='mouse' bus='ps2'/>
> <input type='keyboard' bus='ps2'/>
> <graphics type='spice' autoport='yes' listen='127.0.0.1'>
> <listen type='address' address='127.0.0.1'/>
> </graphics>
> <video>
> <model type='qxl' ram='65536' vram='16384' vgamem='16384'
> heads='1' primary='yes'/>
> <address type='pci' domain='0x00 <hostdev mode='subsystem'
> type='pci' managed='yes'>
> </video>
> <hostdev mode='subsystem' type='pci' managed='yes'>
> <source>
> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
> </source>
> <rom bar='on'/>
> <address type='pci' domain='0x0000' bus='0x02' slot='0x00'
> function='0x0' multifunction='on'/>
> </hostdev>
> <hostdev mode='subsystem' type='pci' managed='yes'>
> <source>
> <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
> </source>
> <rom bar='on'/>
> <address type='pci' domain='0x0000' bus='0x02' slot='0x00'
> function='0x1'/>
> </hostdev>
> 00' bus='0x00' slot='0x01' function='0x0'/>
> <rng model='virtio'>
> <backend model='random'>/dev/urandom</backend>
> <address type='pci' domain='0x0000' bus='0x07' slot='0x00'
> function='0x0'/>
> </rng>
> </devices>
> </domain>
>
> Generated command line:
> qemu-system-x86_64 -enable-kvm -name
> guest=win10-jerome,debug-threads=on -S -object
> secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-22-win10-jerome/master-key.aes
> -machine
> pc-q35-4.0,accel=kvm,usb=off,dump-guest-core=off,mem-merge=off,kernel_irqchip=on
> -cpu
> host,invtsc=on,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff,hv_vpindex,hv_runtime,hv_synic,hv_stimer,hv_reset,hv_frequencies
> -m 15000 -mem-prealloc -mem-path
> /dev/hugepages/libvirt/qemu/22-win10-jerome -overcommit mem-lock=on
> -smp 4,sockets=1,cores=4,threads=1 -uuid
> fc19f3c1-b8c6-4184-9b43-159157eff5b5 -no-user-config -nodefaults
> -chardev socket,id=charmonitor,fd=25,server,nowait -mon
> chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown
> -global ICH9-LPC.disable_s3=0 -global ICH9-LPC.disable_s4=0 -boot
> menu=on,strict=on -device
> pcie-root-port,port=0x10,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,addr=0x2
> -device
> pcie-root-port,port=0x11,chassis=2,id=pci.2,bus=pcie.0,addr=0x2.0x1
> -device
> pcie-root-port,port=0x12,chassis=3,id=pci.3,bus=pcie.0,addr=0x2.0x2
> -device
> pcie-root-port,port=0x13,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x3
> -device
> pcie-root-port,port=0x14,chassis=5,id=pci.5,bus=pcie.0,addr=0x2.0x4
> -device
> pcie-root-port,port=0x15,chassis=6,id=pci.6,bus=pcie.0,addr=0x2.0x5
> -device
> pcie-root-port,port=0x16,chassis=7,id=pci.7,bus=pcie.0,addr=0x2.0x6
> -device
> pcie-root-port,port=0x17,chassis=8,id=pci.8,bus=pcie.0,addr=0x2.0x7
> -device i82801b11-bridge,id=pci.9,bus=pcie.0,addr=0x1e -device
> pci-bridge,chassis_nr=10,id=pci.10,bus=pci.9,addr=0x0 -device
> ich9-usb-ehci1,id=usb,bus=pcie.0,addr=0x1d.0x7 -device
> ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pcie.0,multifunction=on,addr=0x1d
> -device
> ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pcie.0,addr=0x1d.0x1
> -device
> ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pcie.0,addr=0x1d.0x2
> -device virtio-scsi-pci,id=scsi0,bus=pci.5,addr=0x0 -device
> virtio-serial-pci,id=virtio-serial0,bus=pci.1,addr=0x0 -drive
> file=/dev/vgP4Root/win10jerome,format=raw,if=none,id=drive-sata0-0-0,cache=none,aio=native
> -device
> ide-hd,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0,bootindex=1,write-cache=on
> -drive
> file=/dev/vgP4Root/win10data,format=raw,if=none,id=drive-scsi0-0-0-1,cache=none,discard=ignore,detect-zeroes=off,aio=native
> -device
> scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=1,device_id=drive-scsi0-0-0-1,drive=drive-scsi0-0-0-1,id=scsi0-0-0-1,write-cache=on
> -drive
> file=/dev/vgP4Root/win10swap,format=raw,if=none,id=drive-scsi0-0-0-3,cache=none,discard=ignore,detect-zeroes=off,aio=native
> -device
> scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=3,device_id=drive-scsi0-0-0-3,drive=drive-scsi0-0-0-3,id=scsi0-0-0-3,write-cache=on
> -netdev tap,fd=27,id=hostnet0,vhost=on,vhostfd=28 -device
> virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:31:1e:f9,bus=pci.4,addr=0x0
> -spice
> port=5901,addr=127.0.0.1,disable-ticketing,seamless-migration=on
> -device
> qxl-vga,id=video0,ram_size=67108864,vram_size=16777216,vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pcie.0,addr=0x1
> -chardev spicevmc,id=charredir0,name=usbredir -device
> usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2 -chardev
> spicevmc,id=charredir1,name=usbredir -device
> usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3 -device
> vfio-pci,host=02:00.0,id=hostdev0,bus=pci.2,multifunction=on,addr=0x0,rombar=1
> -device
> vfio-pci,host=02:00.1,id=hostdev1,bus=pci.2,addr=0x0.0x1,rombar=1
> -device usb-host,hostbus=1,hostaddr=7,id=hostdev2,bus=usb.0,port=5
> -device usb-host,hostbus=1,hostaddr=56,id=hostdev3,bus=usb.0,port=1
> -device usb-host,hostbus=1,hostaddr=25,id=hostdev4,bus=usb.0,port=4
> -device virtio-balloon-pci,id=balloon0,bus=pci.3,addr=0x0 -object
> rng-random,id=objrng0,filename=/dev/urandom -device
> virtio-rng-pci,rng=objrng0,id=rng0,bus=pci.7,addr=0x0 -sandbox
> on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny
> -msg timestamp=on