Jump to content

[SOLVED] Windows VM micro freezes/stuttering


w0den

Recommended Posts

Hi,

Note, I edited this post. Originally I thought the main issue was audio, but it has become clear that the guest VM freezes about once every 30 seconds for a very short time (100 ms - 500 ms).

 

 

My build is as fallows:

Mother Board: Asrock Z370 Taichi

CPU: Intel I7-8700K

Memory: G.Skill Ripjav V 32 GB DDR4 3000

HD for VM: Samsun 960EVO (this is stubbed out and passed through)

PCiE USB card: Inateck KT4001 (I passed the entire card through)

PCIe Sata Controller: LSI SAS 9207-8i (though this is just being used for the unraid disks)

GPU: NVidia GTX 760 (passed through to the VM)

 

Other notes:

- Enable PCIe ACS Overide = Yes  (all my pcie devices were in the same iommu group, and I wanted to pass through one of the onboard USB controllers).

- I pinned 6 of the 12 cores to my VMRacerX.xml

- I have attached my KVM xml file

- I have all the virtualization stuff set up in the system bios

- I have tried everything that I can find in the post about CPU pinning

- I have used the tips and tweeks plugin to

      - disable nic flow control and offloading

      - set vm.dirty_background_ratio to 2

       - set vm.dirty_ratio to 3

- I have run the LatencyMon, and I get a message about latency, however, it always seems to be in different parts of the system.

 

 

 

Any help would be greatly appreciated. I am happy to provide any other information .

 

My KVM XML:

<domain type='kvm'>
  <name>RacerX</name>
  <uuid>cc25b8b3-78ab-1b1b-8f69-1c997ababc10</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'>4</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='4'/>
    <vcpupin vcpu='1' cpuset='10'/>
    <vcpupin vcpu='2' cpuset='5'/>
    <vcpupin vcpu='3' cpuset='11'/>
    <emulatorpin cpuset='0,6'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.11'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/cc25b8b3-78ab-1b1b-8f69-1c997ababc10_VARS-pure-efi.fd</nvram>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <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'>
    <topology sockets='1' cores='2' threads='2'/>
  </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.141-1.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='qemu-xhci'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:5e:4c:be'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target type='isa-serial' port='0'>
        <model name='isa-serial'/>
      </target>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='unix'>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      </source>
      <rom file='/mnt/user/domains/vbios/GK104-uefi.rom'/>
      <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='0x00' slot='0x17' function='0x0'/>
      </source>
      <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>
      <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='0x05' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x0d' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </hostdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
    </memballoon>
  </devices>
</domain>

 

My syslinux configuration:

 

default menu.c32
menu title Lime Technology, Inc.
prompt 0
timeout 100
label unRAID OS
  menu default
  kernel /bzimage

                                                 nvme,    pci-USB,  Intel Sata, onboard USB
  append isolcpus=4,5,10,11 pcie_acs_override=downstream vfio-pci.ids=144d:a804,1b73:1100,8086:2822,1b21:2142  initrd=/bzroot
label unRAID OS GUI Mode
  kernel /bzimage
  append pcie_acs_override=downstream initrd=/bzroot,/bzroot-gui
label unRAID OS Safe Mode (no plugins, no GUI)
  kernel /bzimage
  append pcie_acs_override=downstream initrd=/bzroot unraidsafemode
label unRAID OS GUI Safe Mode (no plugins)
  kernel /bzimage
  append pcie_acs_override=downstream initrd=/bzroot,/bzroot-gui unraidsafemode
label Memtest86+
  kernel /memtest

 

Thanks,

w0den

 

Link to comment

I finally figured it out! I noticed that every time their was a pause there was a small spike in CPU on vCPU 0. I then watched the Task Manager very closely and saw that a program called Corsair Link was using 2% - 5% of my CPU, and jumping during those spikes. Cosair Link is a program that interfaces via USB with my cooler and gives stats on fanspeed, cpu speed, etc. and gives you control over LED color and fan speed (my cooler is Corsair H80i V2). My cooler is plugged into one of the USB devices that is not passed through to my host (I am not sure if that matters). Removed Corsair Link, and vioala everything works, no stuttering video or short freezes! At some point I will try plugging the cooler into a passed through usb controller, but I suspect the issue is that it is trying to get stats on virtualized hardware.

 

Hope this helps someone else.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...