Very poor performance on Windows 10 VM


iJumbo

Recommended Posts

Hi, im running a VM with Windows 10 on it, the overall performance of the machine is not bad but when i try, for example, resizing a window or navigate through folders "explorer" starts lagging but not the mouse and everything else.

Im running on a test machine with one NVME disk only on the array no cache disks.

CPU: Threadripper 1950x
GPU: R9 290

DISK: (nvme0n1) xfs

If you got any idea please let me know.

Thanks

 

VM:

<?xml version='1.0' encoding='UTF-8'?>
<domain type='kvm' id='1'>
  <name>Windows</name>
  <uuid>46fa2a2b-2cd6-25eb-cab6-6e82e079b731</uuid>
  <metadata>
    <vmtemplate xmlns="unraid" name="Windows 10" icon="windows.png" os="windows10"/>
  </metadata>
  <memory unit='KiB'>20971520</memory>
  <currentMemory unit='KiB'>20971520</currentMemory>
  <memoryBacking>
    <nosharepages/>
  </memoryBacking>
  <vcpu placement='static'>28</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='2'/>
    <vcpupin vcpu='1' cpuset='18'/>
    <vcpupin vcpu='2' cpuset='3'/>
    <vcpupin vcpu='3' cpuset='19'/>
    <vcpupin vcpu='4' cpuset='4'/>
    <vcpupin vcpu='5' cpuset='20'/>
    <vcpupin vcpu='6' cpuset='5'/>
    <vcpupin vcpu='7' cpuset='21'/>
    <vcpupin vcpu='8' cpuset='6'/>
    <vcpupin vcpu='9' cpuset='22'/>
    <vcpupin vcpu='10' cpuset='7'/>
    <vcpupin vcpu='11' cpuset='23'/>
    <vcpupin vcpu='12' cpuset='8'/>
    <vcpupin vcpu='13' cpuset='24'/>
    <vcpupin vcpu='14' cpuset='9'/>
    <vcpupin vcpu='15' cpuset='25'/>
    <vcpupin vcpu='16' cpuset='10'/>
    <vcpupin vcpu='17' cpuset='26'/>
    <vcpupin vcpu='18' cpuset='11'/>
    <vcpupin vcpu='19' cpuset='27'/>
    <vcpupin vcpu='20' cpuset='12'/>
    <vcpupin vcpu='21' cpuset='28'/>
    <vcpupin vcpu='22' cpuset='13'/>
    <vcpupin vcpu='23' cpuset='29'/>
    <vcpupin vcpu='24' cpuset='14'/>
    <vcpupin vcpu='25' cpuset='30'/>
    <vcpupin vcpu='26' cpuset='15'/>
    <vcpupin vcpu='27' cpuset='31'/>
  </cputune>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-i440fx-4.0'>hvm</type>
    <loader readonly='yes' type='pflash'>/usr/share/qemu/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
    <nvram>/etc/libvirt/qemu/nvram/46fa2a2b-2cd6-25eb-cab6-6e82e079b731_VARS-pure-efi.fd</nvram>
  </os>
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='none'/>
    </hyperv>
    <kvm>
      <hidden state='on'/>
    </kvm>
  </features>
  <cpu mode='host-passthrough' check='none'>
    <topology sockets='1' cores='28' threads='1'/>
    <feature policy='disable' name='hypervisor'/>
  </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='disk'>
      <driver name='qemu' type='qcow2' cache='writeback'/>
      <source file='/mnt/user/domains/Windows/vdisk1.img'/>
      <backingStore/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <alias name='virtio-disk2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/disks/172.16.10.1_isos/Windows 10/Windows10_InsiderPreview_x64_it-it_16299.iso'/>
      <backingStore/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <boot order='2'/>
      <alias name='ide0-0-0'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/isos/virtio-win-0.1.160-1.iso'/>
      <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='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>
    <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>
    <interface type='bridge'>
      <mac address='52:54:00:9d:64:89'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <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-1-Windows/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>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x0b' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <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='0x0b' slot='0x00' function='0x1'/>
      </source>
      <alias name='hostdev1'/>
      <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='0x0d' slot='0x00' function='0x3'/>
      </source>
      <alias name='hostdev2'/>
      <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='0x0c' slot='0x00' function='0x3'/>
      </source>
      <alias name='hostdev3'/>
      <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='0x42' slot='0x00' function='0x3'/>
      </source>
      <alias name='hostdev4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
    </hostdev>
    <memballoon model='none'/>
  </devices>
  <seclabel type='dynamic' model='dac' relabel='yes'>
    <label>+0:+100</label>
    <imagelabel>+0:+100</imagelabel>
  </seclabel>
</domain>

 

Link to comment

A few things that come to mind:

  • Do you have Global C State Control turned off? If so, go to your BIOS and turn it back on. It is not required to be off for Threadripper.
    • I also found turning it off negatively affects my NVMe random performance (60% drop!), which could explain your lag when accessing Explorer.
  • SSD in the array isn't trimmed so perhaps that could be the cause but I doubt it since you seem to describe read lag and not write lag.
  • Your 2 iso images buses are "IDE" which is incredibly out of date by now. Change it to SATA.

Also your core assignment isn't ideal.

The 1950X has 2 chiplets, each chiplet has 2 CCX, each CCX has 4 cores.

I have found uneven load spreading across CCX can "waste" as much as a core of performance (so 7 uneven cores perform about as well as 6 cores evenly spread).

So I would suggest you try something like: 1-3,5-7,9-11,13-15 + hyperthreading sisters for a total of 24.

Bench that out vs your current 28 cores - I have a feeling you may be surprised as to how similar the performance is.

Link to comment

Thanks, i will try to check if C State is on or off.

I tested with CrystalDiskMark on windows and the perfomance is like 40MB/s on the 4KiB Q8T8 (read and write) and almost 3GB/s on the Seq
so something is wrong.

 

38 minutes ago, testdasi said:

SSD in the array isn't trimmed so perhaps that could be the cause but I doubt it since you seem to describe read lag and not write lag.

I don't think you can trim XFS format, correct me if im wrong

 

 

38 minutes ago, testdasi said:

So I would suggest you try something like: 1-3,5-7,9-11,13-15 + hyperthreading sisters for a total of 24.

I will try this too

Link to comment
1 hour ago, testdasi said:

A few things that come to mind:

  • Do you have Global C State Control turned off? If so, go to your BIOS and turn it back on. It is not required to be off for Threadripper.
    • I also found turning it off negatively affects my NVMe random performance (60% drop!), which could explain your lag when accessing Explorer.
  • SSD in the array isn't trimmed so perhaps that could be the cause but I doubt it since you seem to describe read lag and not write lag.
  • Your 2 iso images buses are "IDE" which is incredibly out of date by now. Change it to SATA.

Also your core assignment isn't ideal.

The 1950X has 2 chiplets, each chiplet has 2 CCX, each CCX has 4 cores.

I have found uneven load spreading across CCX can "waste" as much as a core of performance (so 7 uneven cores perform about as well as 6 cores evenly spread).

So I would suggest you try something like: 1-3,5-7,9-11,13-15 + hyperthreading sisters for a total of 24.

Bench that out vs your current 28 cores - I have a feeling you may be surprised as to how similar the performance is.

Hi,

C State is now Enabled and was on Auto

Changed the cores and IDE to SATA

But performance is still the same.

Link to comment

I just noticed you have this:

<feature policy='disable' name='hypervisor'/>

Any particular reason for that? HyperV can also help with performance so perhaps try removing that line.

 

Failing that, maybe try the path to the disk from 

/mnt/user/domains/Windows/vdisk1.img

to

/mnt/disk1/domains/Windows/vdisk1.img

That would bypass shfs and hopefully improve performance.

 

Failing that, start a new template and pick Q35-4.0.1 as machine type.

 

Other than that, I'm at lost as to what else could cause performance issue.

Link to comment
  • 1 year later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.