[libvirt-users] Windows Guest I/O performance issues (already using virtio) (Matt Schumacher)

Allence 15700157322 at 163.com
Thu Aug 9 03:53:15 UTC 2018


I think performance is not just about your xml, the host system will have a bigger impact. Maybe you can see this link:
 Https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html-single/virtualization_tuning_and_optimization_guide/index

>Date: Wed, 8 Aug 2018 17:35:11 +0000
>From: Matt Schumacher <matt.s at aptalaska.com>
>To: "libvirt-users at redhat.com" <libvirt-users at redhat.com>
>Subject: [libvirt-users] Windows Guest I/O performance issues (already
>	using	virtio)
>Message-ID: <30EE4896-CF82-4E23-82D5-0C56B38F5E09 at aptalaska.com>
>Content-Type: text/plain; charset="utf-8"
>
>List,
>
>I have a number of Windows 2016 servers I am deploying, but I?m having some I/O performance issues.  I have done all of the obvious things like virtio drivers, but am finding there is more performance to be found with hyper-v extensions, how we virtualize the hardware clock, and iothreads.  I?m using ZVOLs to back the VM, and I?m using 4k block sizes, which seems to offer the best 4k random read/write performance (mail and database workloads), but maybe I?m missing something at this layer too.
>
>Questions:
>
>
>  1.  Does my VM config look reasonable for the latest releases of windows?  Are there features I should be using that will help performance?
>  2.  Why does the hypervclock timer make so much performance difference in windows VMs?
>  3.  Does my virtualized CPU model make sense?  I defined Haswell-noTSX-IBRS and libvirt added the features.
>  4.  Which kernel branch offers the best stability and performance?
>  5.  Are there performance gains in using UEFI booting the windows guest and defining ?<blockio logical_block_size='4096' physical_block_size='4096'/>??  Perhaps better block size consistency through to the zvol?
>
>
>Here is my setup:
>
>48 core Haswell CPU
>192G Ram
>Linux 4.14.61 or 4.9.114 (testing both)
>ZFS file system on optane SSD drive or ZFS file system on dumb HBA with 8 spindles of 15k disks (testing both)
>4k block size zvol for virtual machines
>32G arc cache
>
>Here is my VM:
>
><domain type='kvm' id='12'>
>  <name>testvm</name>
>  <memory unit='KiB'>33554432</memory>
>  <currentMemory unit='KiB'>33554432</currentMemory>
>  <vcpu placement='static'>12</vcpu>
>  <iothreads>1</iothreads>
>  <os>
>    <type arch='x86_64' machine='pc-i440fx-2.12'>hvm</type>
>    <boot dev='cdrom'/>
>    <boot dev='hd'/>
>  </os>
>  <features>
>    <acpi/>
>    <hyperv>
>      <relaxed state='on'/>
>      <vapic state='on'/>
>      <spinlocks state='on' retries='8191'/>
>      <vpindex state='on'/>
>      <runtime state='on'/>
>      <synic state='on'/>
>      <reset state='on'/>
>      <vendor_id state='on' value='KVM Hv'/>
>    </hyperv>
>  </features>
>  <cpu mode='custom' match='exact' check='full'>
>    <model fallback='forbid'>Haswell-noTSX-IBRS</model>
>    <topology sockets='1' cores='6' threads='2'/>
>    <feature policy='require' name='vme'/>
>    <feature policy='require' name='f16c'/>
>    <feature policy='require' name='rdrand'/>
>    <feature policy='require' name='hypervisor'/>
>    <feature policy='require' name='arat'/>
>    <feature policy='disable' name='spec-ctrl'/>
>    <feature policy='require' name='xsaveopt'/>
>    <feature policy='require' name='abm'/>
>  </cpu>
>  <clock offset='localtime'>
>   <timer name='rtc' tickpolicy='catchup'/>
>    <timer name='pit' tickpolicy='delay'/>
>    <timer name='hpet' present='yes'/>
>    <timer name='hypervclock' present='yes'/>
>  </clock>
>  <on_poweroff>destroy</on_poweroff>
>  <on_reboot>restart</on_reboot>
>  <on_crash>destroy</on_crash>
>  <devices>
>    <emulator>/usr/bin/qemu-system-x86_64</emulator>
>    <disk type='block' device='disk'>
>      <driver name='qemu' type='raw' cache='none' io='native' ioeventfd='on' iothread='1'/>
>      <source dev='/dev/zvol/datastore/vm/testvm-vda'/>
>      <backingStore/>
>      <target dev='vda' bus='virtio'/>
>      <alias name='virtio-disk0'/>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
>    </disk>
>    <disk type='file' device='cdrom'>
>      <driver name='qemu'/>
>      <target dev='hdc' bus='ide'/>
>      <readonly/>
>      <alias name='ide0-1-0'/>
>      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
>    </disk>
>    <controller type='ide' index='0'>
>      <alias name='ide'/>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
>    </controller>
>    <controller type='usb' index='0' model='piix3-uhci'>
>      <alias name='usb'/>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
>    </controller>
>    <controller type='pci' index='0' model='pci-root'>
>      <alias name='pci.0'/>
>    </controller>
>    <controller type='virtio-serial' index='0'>
>      <alias name='virtio-serial0'/>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
>    </controller>
>    <interface type='bridge'>
>      <source bridge='lan'/>
>      <target dev='vnet0'/>
>      <model type='virtio'/>
>      <alias name='net0'/>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
>    </interface>
>    <channel type='unix'>
>      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-12-testvm/org.qemu.guest_agent.0'/>
>      <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
>      <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>
>    <graphics type='vnc' port='5901' autoport='no' listen='0.0.0.0'>
>      <listen type='address' address='0.0.0.0'/>
>    </graphics>
>    <video>
>      <model type='cirrus' vram='16384' heads='1' primary='yes'/>
>      <alias name='video0'/>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
>    </video>
>    <memballoon model='none'/>
>  </devices>
>  <seclabel type='dynamic' model='dac' relabel='yes'>
>    <label>+0:+100</label>
>    <imagelabel>+0:+100</imagelabel>
>  </seclabel>
></domain>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvirt-users/attachments/20180809/a0f85bc1/attachment.htm>


More information about the libvirt-users mailing list