Red Hat Bugzilla – Bug 865337
RFE: add aio=native (or threads) based on the storage where the images are stored
Last modified: 2016-06-29 17:48:03 EDT
Description of problem:
On file-based storage, aio=threads should be used, on block-based storage, aio=native should be used in the -drive command line of QEMU, for improved IO performance.
Version-Release number of selected component (if applicable):
Steps to Reproduce:
This seems to be an issue of adding io=thread or io=native to the driver subnode of the disk node in libvirt xml when starting instances/attaching volumes. (also see https://bugzilla.redhat.com/show_bug.cgi?id=591703 for more background)
I will move this to 3.0 Grizzly release as does not seem to be a critical fix.
Also it would be good to have some more details on the actual benefits of fixing this upstream so adding a needinfo flag.
We need the info on why each mode is better for block vs file, so we can figure out what Nova needs todo for network based storage. We also need to be able to backup our assertion that these modes are better with real facts when submitting the change upstream.
*** Bug 1029596 has been marked as a duplicate of this bug. ***
Cisco is seeing significant performance difference with aio=native compared to aio=thread on RHEL 7.
(In reply to Fam Zheng from comment #13)
> Cisco is seeing significant performance difference with aio=native compared
> to aio=thread on RHEL 7.
As Dan touches on in comment # 3 just saying "native" works better or "threads" works better isn't particularly useful in guiding us to a resolution without more information on whether it's file or block access, whether it's network storage, if so which protocol, and the measurable performance gap.
We know that native won't be better in all circumstances (and conversely that threads won't be better in all circumstances).
This is local file based image. The details are in bug 1175440.
My impression is that native is likely better than threads whenever it is available, but unfortunately we default to threads. Is it even configurable in nova? How do we enable native?
(In reply to Fam Zheng from comment #15)
> This is local file based image. The details are in bug 1175440.
> My impression is that native is likely better than threads whenever it is
> available, but unfortunately we default to threads. Is it even configurable
> in nova? How do we enable native?
We don't expose it as a configurable option to users because it is a low level hypervisor detail that is inappropriate to expose in a cloud model. We need to be able to have Nova set the appropriate setting automatically, but we cannot do that based on gut feeling / intuition. When we propose a particular setting upstream we need to have actual data to backup our assertion that it has better performance
Comment 0 does not tell the whole story. At least for ext4 io=threads is a huge loss (bug 1059744) and for XFS it is a moderate loss. We need to test again NFS but I suspect that with recent-enough QEMU io=native is always a win.
Related upstream spec: https://review.openstack.org/#/c/232514/