CentOS 8.x KVM Creating Windows VMs with fast disk input output (io)

From Notes_Wiki

Home > CentOS > CentOS 8.x > Virtualization > KVM > Creating Windows VMs with fast disk input output (io)

While creating Windows VM use following recommendations along with mentioned references


It would also make sense to change NIC from e1000 to virtio and install related network drivers from the virtio iso linked above.


Noted benchmark speeds with a few configuration options

Using ATTO Disk benchmark version 4.01.0f1 observed:

Cache-no, IO-native, OS-windows10, Disk-virtio raw
Max write:67.29 MB/s, Max read:121.01 MB/s for 48MB block.
Cache-writeback, IO-threads, OS-windows10, Disk-ide raw
Max write: 577.88 MB/s, Max read: 602.35MB/s for 32 MB block
Cache-writeback, IO-threads, OS-windows10, Disk-virtio raw
Max write: 3.83 GB/s, Max read: 6.08GB/s for 512KB block
Cache-writeback, IO-threads, OS-windows-server-2016, Disk-virtio raw
Max write: 2.29GB/s, Max read:2.89GB/s for 48MB block

Note in a few cases higher read values were available for different block size. The values above are chosen for max write speed for given configuration.


Proxmox ps command output including kvm VM parameters

Since Windows VMs on proxmox seem to work satisfactorily, we can refer disk configuration of proxmox VMs using ps output:

root@pve3:/etc/pve/nodes/pve3/qemu-server# ps eaux | grep kvm
root     10682  5.6 11.6 5101516 3815164 ?     Sl   Jan13 4113:18 /usr/bin/kvm -id 125 -name Email-Gateway -chardev socket,id=qmp,path=/var/run/qemu-server/125.qmp,server,nowait -mon chardev=qmp,mode=control -chardev socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5 -mon chardev=qmp-event,mode=control -pidfile /var/run/qemu-server/125.pid -daemonize -smbios type=1,uuid=b44cc125-90a0-42aa-8290-898542c21e9d -smp 2,sockets=1,cores=2,maxcpus=2 -nodefaults -boot menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg -vnc unix:/var/run/qemu-server/125.vnc,password -cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,enforce -m 4096 -device pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e -device pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f -device vmgenid,guid=b1a83f6d-61fa-4c5a-a7d3-f149c9a7c7e0 -device piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2 -device usb-tablet,id=tablet,bus=uhci.0,port=1 -device VGA,id=vga,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -iscsi initiator-name=iqn.1993-08.org.debian:01:a75d96656848 -drive file=/mnt/pve/iso-containers/template/iso/proxmox-mailgateway_6.1-1.iso,if=none,id=drive-ide2,media=cdrom,aio=threads -device ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200 -device virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5 -drive file=/mnt/pve/A1/images/125/vm-125-disk-0.qcow2,if=none,id=drive-scsi0,format=qcow2,cache=none,aio=native,detect-zeroes=on -device scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100 -netdev type=tap,id=net0,ifname=tap125i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on -device virtio-net-pci,mac=AE:4C:F3:3D:61:12,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300 -machine type=pc+pve1 LANG=en_US.UTF-8 PATH=/sbin:/bin:/usr/sbin:/usr/bin INVOCATION_ID=aa2e3079e06841dc9c375cb9975a073c JOURNAL_STREAM=9:26421 PVE_DAEMON_LOCK_FD=4 PVE_DAEMON_SOCKET_85=6 LC_ALL=C LVM_SUPPRESS_FD_WARNINGS=1
root     10686  0.0  0.0      0     0 ?        S    Jan13   0:03 [kvm-nx-lpage-re]
root     10731  0.0  0.0      0     0 ?        S    Jan13   0:00 [kvm-pit/10682]
root     24142 27.0 12.9 4814820 4225148 ?     Sl   13:54   1:17 /usr/bin/kvm -id 100 -name windows16-shared -chardev socket,id=qmp,path=/var/run/qemu-server/100.qmp,server,nowait -mon chardev=qmp,mode=control -chardev socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5 -mon chardev=qmp-event,mode=control -pidfile /var/run/qemu-server/100.pid -daemonize -smbios type=1,uuid=30b63868-5460-4497-a988-3b254627a975 -smp 2,sockets=1,cores=2,maxcpus=2 -nodefaults -boot menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg -vnc unix:/var/run/qemu-server/100.vnc,password -no-hpet -cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,hv_spinlocks=0x1fff,hv_vapic,hv_time,hv_reset,hv_vpindex,hv_runtime,hv_relaxed,hv_synic,hv_stimer,hv_ipi,enforce -m 4096 -device pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e -device pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f -device vmgenid,guid=fd9ffbeb-8a50-4950-b824-491dd0a235fd -device piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2 -device usb-tablet,id=tablet,bus=uhci.0,port=1 -device VGA,id=vga,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -iscsi initiator-name=iqn.1993-08.org.debian:01:a75d96656848 -drive file=/mnt/pve/A1/images/100/vm-100-disk-0.qcow2,if=none,id=drive-ide0,format=qcow2,cache=none,aio=native,detect-zeroes=on -device ide-hd,bus=ide.0,unit=0,drive=drive-ide0,id=ide0,bootindex=100 -drive if=none,id=drive-ide2,media=cdrom,aio=threads -device ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200 -netdev type=tap,id=net0,ifname=tap100i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown -device e1000,mac=8E:31:32:63:40:27,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300 -rtc driftfix=slew,base=localtime -machine type=pc+pve1 -global kvm-pit.lost_tick_policy=discard LANG=en_US.UTF-8 PATH=/sbin:/bin:/usr/sbin:/usr/bin INVOCATION_ID=aa2e3079e06841dc9c375cb9975a073c JOURNAL_STREAM=9:26421 PVE_DAEMON_LOCK_FD=4 PVE_DAEMON_SOCKET_85=6 LC_ALL=C LVM_SUPPRESS_FD_WARNINGS=1
root     24146  0.0  0.0      0     0 ?        S    13:54   0:00 [kvm-nx-lpage-re]
root     24189  0.0  0.0      0     0 ?        S    13:54   0:00 [kvm-pit/24142]
root     27653  0.0  0.0   6072   892 pts/4    S+   13:59   0:00 grep kvm SHELL=/bin/bash PWD=/etc/pve/nodes/pve3/qemu-server LOGNAME=root XDG_SESSION_TYPE=tty HOME=/root LANG=en_US.UTF-8 SSH_CONNECTION=172.31.1.253 47490 172.31.1.172 22 XDG_SESSION_CLASS=user TERM=xterm-256color USER=root SHLVL=0 XDG_SESSION_ID=1337 XDG_RUNTIME_DIR=/run/user/0 SSH_CLIENT=172.31.1.253 47490 22 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin MAIL=/var/mail/root SSH_TTY=/dev/pts/4 OLDPWD=/etc/pve/nodes/pve3 _=/usr/bin/grep
root     29354  0.1  1.1 2690668 367376 ?      Sl   Jan08 134:12 /usr/bin/kvm -id 101 -name centos7-shared -chardev socket,id=qmp,path=/var/run/qemu-server/101.qmp,server,nowait -mon chardev=qmp,mode=control -chardev socket,id=qmp-event,path=/var/run/qmeventd.sock,reconnect=5 -mon chardev=qmp-event,mode=control -pidfile /var/run/qemu-server/101.pid -daemonize -smbios type=1,uuid=38baec15-ec56-4e25-9833-30de75ad9579 -smp 2,sockets=1,cores=2,maxcpus=2 -nodefaults -boot menu=on,strict=on,reboot-timeout=1000,splash=/usr/share/qemu-server/bootsplash.jpg -vnc unix:/var/run/qemu-server/101.vnc,password -cpu kvm64,+lahf_lm,+sep,+kvm_pv_unhalt,+kvm_pv_eoi,enforce -m 2048 -device pci-bridge,id=pci.1,chassis_nr=1,bus=pci.0,addr=0x1e -device pci-bridge,id=pci.2,chassis_nr=2,bus=pci.0,addr=0x1f -device vmgenid,guid=f2c0d5d1-8ae5-406f-b4e9-c4f13209a455 -device piix3-usb-uhci,id=uhci,bus=pci.0,addr=0x1.0x2 -device usb-tablet,id=tablet,bus=uhci.0,port=1 -device VGA,id=vga,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -iscsi initiator-name=iqn.1993-08.org.debian:01:a75d96656848 -drive if=none,id=drive-ide2,media=cdrom,aio=threads -device ide-cd,bus=ide.1,unit=0,drive=drive-ide2,id=ide2,bootindex=200 -device virtio-scsi-pci,id=scsihw0,bus=pci.0,addr=0x5 -drive file=/mnt/pve/A1/images/101/vm-101-disk-0.qcow2,if=none,id=drive-scsi0,format=qcow2,cache=none,aio=native,detect-zeroes=on -device scsi-hd,bus=scsihw0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0,id=scsi0,bootindex=100 -netdev type=tap,id=net0,ifname=tap101i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on -device virtio-net-pci,mac=92:44:3E:17:77:FE,netdev=net0,bus=pci.0,addr=0x12,id=net0,bootindex=300 -machine type=pc+pve1 SHELL=/bin/bash PWD=/mnt/backup LOGNAME=root XDG_SESSION_TYPE=tty HOME=/root LANG=en_US.UTF-8 SSH_CONNECTION=172.31.1.253 48852 172.31.1.172 22 XDG_SESSION_CLASS=user TERM=xterm-256color USER=root SHLVL=1 XDG_SESSION_ID=44 XDG_RUNTIME_DIR=/run/user/0 SSH_CLIENT=172.31.1.253 48852 22 PATH=/sbin:/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SSH_TTY=/dev/pts/4 OLDPWD=/root _=/usr/sbin/qm LC_ALL=C LVM_SUPPRESS_FD_WARNINGS=1
root     29358  0.0  0.0      0     0 ?        S    Jan08   0:03 [kvm-nx-lpage-re]
root     29403  0.0  0.0      0     0 ?        S    Jan08   0:00 [kvm-pit/29354]

Here, we can see that proxmox is creating both Windows and Linux VMs with qcow2 format with cache none and IO native. It is interestingly setting detect-zeroes to on for all disks.


Refer:


Home > CentOS > CentOS 8.x > Virtualization > KVM > Creating Windows VMs with fast disk input output (io)