Hey,

Couple of important follow up questions about your setup:

- do you have os_type=windows defined for the flavor/image? As this enables multiple important hyper v enlightenments in qemu:
https://www.qemu.org/docs/master/system/i386/hyperv.html

- do you use q35 machine type? As this also known to boost windows performance: https://docs.openstack.org/nova/yoga/admin/hw-machine-type.html

- windows virtio-blk drivers does not support multi threading, so to get anywhere decent performance, you kinda have to use virtio-scsi.
So make sure that passed device is indeed a SCSI one

- there's a really good improvement merged this cycle, which enables iothreads in nova:
https://review.opendev.org/c/openstack/nova/+/939254
This patch itself had some side-effects, which were covered with a couple of follow-ups required to cover them. So you might want to do some cherry-picking and test things with iothreads enabled.

On Wed, 25 Mar 2026, 07:07 Joel McLean, <joel.mclean@micron21.com> wrote:
G'day Openstackers.

I've found myself down a rabbit hole that I think will get me nowhere; but I wanted to query the list to see whether people are seeing the same, or whether what I'm experiencing can be mitigated, if someone here has seen this behaviour.

We are running an Openstack (caracal 2024.1) with Libvirt/qemu as the guest agent. Storage is all cinder volumes on a stand-alone storage platform - an NVMe Ceph (reef) Cluster provided to Openstack via Cinder.

For Windows virtual machines, we are installing VirtIO drivers ( https://docs.openstack.org/image-guide/create-images-manually-example-windows-image.html ) and have tried a variety of driver versions (0.1.285-1, 0.1.271-1, 0.1.262-2, 0.1.248-1) and while they all work, we have noticed significant different in performance between throughput and IO operations compared to virtual machines running on Ubuntu. The performance differences are most notable in a real-world workload test using
- a MySQL 8 database
- same CPU and Memory Configuration Flavor, same volume_type
- same MySQL configuration
- we run a query that checks for missing indexes, then creates ~500K missing indexes.
On the Ubuntu 24 instance the task completes in ~17 minutes, On the Windows 2025 instance, the task completes in ~29 minutes.

Testing to compare against a Hyper-V compute host, with the same performance drives, except as locally attached NVMe drives, performance for the same task in Windows 2025 is ~17 minutes.

Testing the windows instance with different VirtIO (vioscsi, or viostor) didn't significantly impact the task completion time; it averaged between 29 and 35 minutes depending on which driver was in use.
In Ceph, there's no errors to speak of, all logs are nominal in Ceph when comparing RBD claims (i.e. Linux vs Windows)

So, we're pretty sure the issue is how Windows Instances consume storage. This behaviour is consistent with the performance problems described in this issue: https://github.com/virtio-win/kvm-guest-drivers-windows/issues/1482

Has anyone else experienced this issue, or found a way to work around it? Let me know if there's any more information that I could provide that might give some insight into the matter.

Kind Regards,
 
Joel McLean
https://www.micron21.com/

  1300 769 972
  03 9751 7618
  0407 888 429
  joel.mclean@micron21.com

Follow us on Twitter and https://m21status.com for important service and system updates.

This message is intended for the addressee named above. It may contain privileged or confidential information. If you are not the intended recipient of this message you must not use, copy, distribute or disclose it to anyone other than the addressee. If you have received this message in error please return the message to the sender by replying to it and then delete the message from your computer.