[PATCH v2 0/5] qemu: spport AIO interface io_uring

Changes from v1: - Separate the news XML patch from the docs patch - More details in the descrition of news XML - Change bus type of unit tests XML from ide to virtio - Fix missing spaces in docs patch - Reorder the sequence of patches git repo: https://github.com/qiankehan/libvirt/tree/io_uring-v2 v1: https://www.redhat.com/archives/libvir-list/2020-April/msg00883.html Han Han (5): qemu_capabilities: Introduce QEMU_CAPS_AIO_IO_URING qemu: Implement the aio mode io_uring docs: Docs and rng schemas for io_uring tests: Tests for io mode io_uring news: qemu: support async IO mode 'io_uring' docs/formatdomain.html.in | 3 +- docs/news.xml | 11 ++++ docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 1 + src/conf/domain_conf.h | 1 + src/qemu/qemu_capabilities.c | 2 + src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 8 +++ tests/qemublocktest.c | 1 + ...le-backing_basic-aio_io_uring-srconly.json | 44 +++++++++++++ .../file-backing_basic-aio_io_uring.json | 66 +++++++++++++++++++ .../file-backing_basic-aio_io_uring.xml | 47 +++++++++++++ .../caps_5.0.0.aarch64.replies | 3 +- .../caps_5.0.0.aarch64.xml | 1 + .../caps_5.0.0.ppc64.replies | 3 +- .../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + .../caps_5.0.0.x86_64.replies | 3 +- .../caps_5.0.0.x86_64.xml | 1 + .../disk-aio-io_uring.x86_64-latest.args | 41 ++++++++++++ tests/qemuxml2argvdata/disk-aio-io_uring.xml | 30 +++++++++ tests/qemuxml2argvtest.c | 1 + .../disk-aio-io_uring.x86_64-latest.xml | 39 +++++++++++ tests/qemuxml2xmltest.c | 1 + 23 files changed, 306 insertions(+), 4 deletions(-) create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml create mode 100644 tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/disk-aio-io_uring.xml create mode 100644 tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml -- 2.25.0

Add io_uring value to capability replies. The capability QEMU_CAPS_AIO_IO_URING will be used for io_uring aio mode, introduced from QEMU 5.0, linux 5.1. Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + 8 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index fe311048..f6b3c96a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -573,6 +573,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "fsdev.multidevs", "virtio.packed", "pcie-root-port.hotplug", + "aio.io_uring", ); @@ -1461,6 +1462,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = { { "blockdev-add/arg-type/+nvme", QEMU_CAPS_DRIVE_NVME }, { "query-named-block-nodes/arg-type/flat", QEMU_CAPS_QMP_QUERY_NAMED_BLOCK_NODES_FLAT }, { "blockdev-snapshot/$allow-write-only-overlay", QEMU_CAPS_BLOCKDEV_SNAPSHOT_ALLOW_WRITE_ONLY }, + { "blockdev-add/arg-type/+file/aio/^io_uring", QEMU_CAPS_AIO_IO_URING }, }; typedef struct _virQEMUCapsObjectTypeProps virQEMUCapsObjectTypeProps; diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 1681fc79..0e9a161f 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -554,6 +554,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_FSDEV_MULTIDEVS, /* fsdev.multidevs */ QEMU_CAPS_VIRTIO_PACKED_QUEUES, /* virtio.packed */ QEMU_CAPS_PCIE_ROOT_PORT_HOTPLUG, /* pcie-root-port.hotplug */ + QEMU_CAPS_AIO_IO_URING, /* -blockdev {...,"aio":"io_uring",...} */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies index 067cbb7e..3baa49b2 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies @@ -19327,7 +19327,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring" ] }, { diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml index 3876d08c..9e3fe87e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml @@ -184,6 +184,7 @@ <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> + <flag name='aio.io_uring'/> <version>4002050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>61700241</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies index 8e754bfb..491bf754 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies @@ -20845,7 +20845,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring" ] }, { diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml index b0891613..fe77d3b7 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml @@ -192,6 +192,7 @@ <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> + <flag name='aio.io_uring'/> <version>4002050</version> <kvmVersion>0</kvmVersion> <microcodeVersion>42900241</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies index af2299a4..970e483e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies @@ -22244,7 +22244,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring" ] }, { diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml index 496d0e90..9bbc3c96 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml @@ -230,6 +230,7 @@ <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> <flag name='pcie-root-port.hotplug'/> + <flag name='aio.io_uring'/> <version>4002091</version> <kvmVersion>0</kvmVersion> <microcodeVersion>43100241</microcodeVersion> -- 2.25.0

On Tue, Apr 21, 2020 at 20:19:34 +0800, Han Han wrote:
Add io_uring value to capability replies.
The capability QEMU_CAPS_AIO_IO_URING will be used for io_uring aio mode, introduced from QEMU 5.0, linux 5.1.
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + 8 files changed, 12 insertions(+), 3 deletions(-)
[...]
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies index af2299a4..970e483e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies @@ -22244,7 +22244,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring"
Did you patch this manually?
] }, {
I'll update the 5.0.0 qemu caps first so that we can push it without manual intervetntion.

On Wed, Apr 22, 2020 at 4:14 PM Peter Krempa <pkrempa@redhat.com> wrote:
On Tue, Apr 21, 2020 at 20:19:34 +0800, Han Han wrote:
Add io_uring value to capability replies.
The capability QEMU_CAPS_AIO_IO_URING will be used for io_uring aio mode, introduced from QEMU 5.0, linux 5.1.
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + 8 files changed, 12 insertions(+), 3 deletions(-)
[...]
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies index af2299a4..970e483e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies @@ -22244,7 +22244,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring"
Did you patch this manually?
Yes
] }, {
I'll update the 5.0.0 qemu caps first so that we can push it without manual intervetntion.
OK. Wait for your caps patch :)
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333

On Wed, Apr 22, 2020 at 16:28:06 +0800, Han Han wrote:
On Wed, Apr 22, 2020 at 4:14 PM Peter Krempa <pkrempa@redhat.com> wrote:
On Tue, Apr 21, 2020 at 20:19:34 +0800, Han Han wrote:
Add io_uring value to capability replies.
The capability QEMU_CAPS_AIO_IO_URING will be used for io_uring aio mode, introduced from QEMU 5.0, linux 5.1.
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + 8 files changed, 12 insertions(+), 3 deletions(-)
[...]
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies index af2299a4..970e483e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies @@ -22244,7 +22244,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring"
Did you patch this manually?
Yes
Okay, please don't do that in the future. The idea of the 'replies' files is that they are captured from real qemu. I've currently modified my qemu install to contain liburing so I'll post the updated ones. I'll also drop any other hunks related to 'replies' in this patch when I'll be pushing this.

OK. Get it On Wed, Apr 22, 2020 at 4:49 PM Peter Krempa <pkrempa@redhat.com> wrote:
On Wed, Apr 22, 2020 at 16:28:06 +0800, Han Han wrote:
On Wed, Apr 22, 2020 at 4:14 PM Peter Krempa <pkrempa@redhat.com> wrote:
On Tue, Apr 21, 2020 at 20:19:34 +0800, Han Han wrote:
Add io_uring value to capability replies.
The capability QEMU_CAPS_AIO_IO_URING will be used for io_uring aio mode, introduced from QEMU 5.0, linux 5.1.
Signed-off-by: Han Han <hhan@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies | 3 ++- tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + 8 files changed, 12 insertions(+), 3 deletions(-)
[...]
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies index af2299a4..970e483e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.replies @@ -22244,7 +22244,8 @@ "meta-type": "enum", "values": [ "threads", - "native" + "native", + "io_uring"
Did you patch this manually?
Yes
Okay, please don't do that in the future. The idea of the 'replies' files is that they are captured from real qemu. I've currently modified my qemu install to contain liburing so I'll post the updated ones.
I'll also drop any other hunks related to 'replies' in this patch when I'll be pushing this.
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333

This aio mode was added since Linux 5.1[1], QEMU 5.0.0[2], which will deliever faster and more efficient I/O operations for the file, host_device, host_cdrom backends. Reference: [1]: https://lwn.net/Articles/810414/ [2]: https://lists.gnu.org/archive/html/qemu-devel/2020-01/msg07686.html Signed-off-by: Han Han <hhan@redhat.com> --- src/conf/domain_conf.c | 1 + src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 8700d567..bcaed3ef 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -361,6 +361,7 @@ VIR_ENUM_IMPL(virDomainDiskIo, "default", "native", "threads", + "io_uring", ); VIR_ENUM_IMPL(virDomainDeviceSGIO, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index aad3f82d..9f36d3d9 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -421,6 +421,7 @@ typedef enum { VIR_DOMAIN_DISK_IO_DEFAULT = 0, VIR_DOMAIN_DISK_IO_NATIVE, VIR_DOMAIN_DISK_IO_THREADS, + VIR_DOMAIN_DISK_IO_URING, VIR_DOMAIN_DISK_IO_LAST } virDomainDiskIo; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 95402fc4..45dd8307 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1435,6 +1435,14 @@ qemuCheckDiskConfig(virDomainDiskDefPtr disk, _("detect_zeroes is not supported by this QEMU binary")); return -1; } + + if (disk->iomode == VIR_DOMAIN_DISK_IO_URING) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AIO_IO_URING)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("io uring is not supported by this QEMU binary")); + return -1; + } + } } if (disk->serial && -- 2.25.0

Signed-off-by: Han Han <hhan@redhat.com> --- docs/formatdomain.html.in | 3 ++- docs/schemas/domaincommon.rng | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 00776668..b2f87e8a 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3747,7 +3747,8 @@ <li> The optional <code>io</code> attribute controls specific policies on I/O; qemu guests support "threads" and - "native". <span class="since">Since 0.8.8</span> + "native" <span class="since">Since 0.8.8</span>, io_uring + <span class="since">Since 6.3.0 (QEMU 5.0)</span>. </li> <li> The optional <code>ioeventfd</code> attribute allows users to diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 65d65804..6109be0b 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -2278,6 +2278,7 @@ <choice> <value>threads</value> <value>native</value> + <value>io_uring</value> </choice> </attribute> </define> -- 2.25.0

Signed-off-by: Han Han <hhan@redhat.com> --- tests/qemublocktest.c | 1 + ...le-backing_basic-aio_io_uring-srconly.json | 44 +++++++++++++ .../file-backing_basic-aio_io_uring.json | 66 +++++++++++++++++++ .../file-backing_basic-aio_io_uring.xml | 47 +++++++++++++ .../disk-aio-io_uring.x86_64-latest.args | 41 ++++++++++++ tests/qemuxml2argvdata/disk-aio-io_uring.xml | 30 +++++++++ tests/qemuxml2argvtest.c | 1 + .../disk-aio-io_uring.x86_64-latest.xml | 39 +++++++++++ tests/qemuxml2xmltest.c | 1 + 9 files changed, 270 insertions(+) create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json create mode 100644 tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml create mode 100644 tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/disk-aio-io_uring.xml create mode 100644 tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c index f9fbfc98..80018075 100644 --- a/tests/qemublocktest.c +++ b/tests/qemublocktest.c @@ -1199,6 +1199,7 @@ mymain(void) TEST_DISK_TO_JSON("dir-fat-floppy"); TEST_DISK_TO_JSON("file-raw-aio_native"); TEST_DISK_TO_JSON("file-backing_basic-aio_threads"); + TEST_DISK_TO_JSON("file-backing_basic-aio_io_uring"); TEST_DISK_TO_JSON("file-raw-luks"); TEST_DISK_TO_JSON("file-qcow2-backing-chain-noopts"); TEST_DISK_TO_JSON("file-qcow2-backing-chain-unterminated"); diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json new file mode 100644 index 00000000..65a3773b --- /dev/null +++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring-srconly.json @@ -0,0 +1,44 @@ +( + source only properties: + { + "driver": "file", + "filename": "/var/lib/libvirt/images/a" + } + backing store string: + /var/lib/libvirt/images/a +) +( + source only properties: + { + "driver": "file", + "filename": "/var/lib/libvirt/images/b" + } + backing store string: + /var/lib/libvirt/images/b +) +( + source only properties: + { + "driver": "gluster", + "volume": "images", + "path": "c", + "server": [ + { + "type": "inet", + "host": "test.org", + "port": "24007" + } + ] + } + backing store string: + gluster://test.org:24007/images/c +) +( + source only properties: + { + "driver": "file", + "filename": "/var/lib/libvirt/images/d" + } + backing store string: + /var/lib/libvirt/images/d +) diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json new file mode 100644 index 00000000..f510c43e --- /dev/null +++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.json @@ -0,0 +1,66 @@ +{ + "node-name": "node-a-f", + "read-only": false, + "driver": "qcow", + "file": "node-a-s", + "backing": "node-b-f" +} +{ + "driver": "file", + "filename": "/var/lib/libvirt/images/a", + "aio": "io_uring", + "node-name": "node-a-s", + "auto-read-only": true, + "discard": "unmap" +} +{ + "node-name": "node-b-f", + "read-only": true, + "driver": "qed", + "file": "node-b-s", + "backing": "node-c-f" +} +{ + "driver": "file", + "filename": "/var/lib/libvirt/images/b", + "aio": "io_uring", + "node-name": "node-b-s", + "auto-read-only": true, + "discard": "unmap" +} +{ + "node-name": "node-c-f", + "read-only": true, + "driver": "vmdk", + "file": "node-c-s", + "backing": "node-d-f" +} +{ + "driver": "gluster", + "volume": "images", + "path": "c", + "server": [ + { + "type": "inet", + "host": "test.org", + "port": "24007" + } + ], + "node-name": "node-c-s", + "auto-read-only": true, + "discard": "unmap" +} +{ + "node-name": "node-d-f", + "read-only": true, + "driver": "raw", + "file": "node-d-s" +} +{ + "driver": "file", + "filename": "/var/lib/libvirt/images/d", + "aio": "io_uring", + "node-name": "node-d-s", + "auto-read-only": true, + "discard": "unmap" +} diff --git a/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml new file mode 100644 index 00000000..610c091f --- /dev/null +++ b/tests/qemublocktestdata/xml2json/file-backing_basic-aio_io_uring.xml @@ -0,0 +1,47 @@ +<disk type='file' device='disk'> + <driver name='qemu' type='qcow' io='io_uring'/> + <source file='/var/lib/libvirt/images/a'> + <privateData> + <nodenames> + <nodename type='storage' name='node-a-s'/> + <nodename type='format' name='node-a-f'/> + </nodenames> + </privateData> + </source> + <backingStore type='file' index='1'> + <format type='qed'/> + <source file='/var/lib/libvirt/images/b'> + <privateData> + <nodenames> + <nodename type='storage' name='node-b-s'/> + <nodename type='format' name='node-b-f'/> + </nodenames> + </privateData> + </source> + <backingStore type='network' index='2'> + <format type='vmdk'/> + <source protocol='gluster' name='images/c'> + <host name='test.org'/> + <privateData> + <nodenames> + <nodename type='storage' name='node-c-s'/> + <nodename type='format' name='node-c-f'/> + </nodenames> + </privateData> + </source> + <backingStore type='file' index='3'> + <format type='raw'/> + <source file='/var/lib/libvirt/images/d'> + <privateData> + <nodenames> + <nodename type='storage' name='node-d-s'/> + <nodename type='format' name='node-d-f'/> + </nodenames> + </privateData> + </source> + <backingStore/> + </backingStore> + </backingStore> + </backingStore> + <target dev='vda'/> +</disk> diff --git a/tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args b/tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args new file mode 100644 index 00000000..0bcf8f5a --- /dev/null +++ b/tests/qemuxml2argvdata/disk-aio-io_uring.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/tmp/lib/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object secret,id=masterKey0,format=raw,\ +file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \ +-machine pc,accel=tcg,usb=off,dump-guest-core=off \ +-cpu qemu64 \ +-m 214 \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-no-acpi \ +-boot strict=on \ +-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1",\ +"aio":"io_uring","node-name":"libvirt-1-storage","auto-read-only":true,\ +"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2",\ +"file":"libvirt-1-storage"}' \ +-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x9,drive=libvirt-1-format,\ +id=virtio-disk0,bootindex=1 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\ +resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/disk-aio-io_uring.xml b/tests/qemuxml2argvdata/disk-aio-io_uring.xml new file mode 100644 index 00000000..9e6ea622 --- /dev/null +++ b/tests/qemuxml2argvdata/disk-aio-io_uring.xml @@ -0,0 +1,30 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <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='qcow2' io='io_uring'/> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> + </disk> + <controller type='usb' index='0'/> + <controller type='ide' index='0'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 66472a5e..1a1b9026 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1127,6 +1127,7 @@ mymain(void) DO_TEST("disk-aio", NONE); DO_TEST_CAPS_VER("disk-aio", "2.12.0"); DO_TEST_CAPS_LATEST("disk-aio"); + DO_TEST_CAPS_LATEST("disk-aio-io_uring"); DO_TEST("disk-source-pool", NONE); DO_TEST("disk-source-pool-mode", NONE); DO_TEST("disk-ioeventfd", diff --git a/tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml b/tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml new file mode 100644 index 00000000..5b691e1c --- /dev/null +++ b/tests/qemuxml2xmloutdata/disk-aio-io_uring.x86_64-latest.xml @@ -0,0 +1,39 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <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='qcow2' io='io_uring'/> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> + </disk> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='ide' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index cf5abeac..4e43fa6f 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -312,6 +312,7 @@ mymain(void) DO_TEST("migrate", NONE); DO_TEST("qemu-ns-no-env", NONE); DO_TEST("disk-aio", NONE); + DO_TEST_CAPS_LATEST("disk-aio-io_uring"); DO_TEST("disk-cdrom", NONE); DO_TEST_CAPS_LATEST("disk-cdrom-empty-network-invalid"); DO_TEST("disk-cdrom-bus-other", NONE); -- 2.25.0

Signed-off-by: Han Han <hhan@redhat.com> --- docs/news.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 4d0efd42..2b00a5ae 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -56,6 +56,17 @@ hotplug/unplug attempts, but this is often undesireable). </description> </change> + <change> + <summary> + qemu: support async IO mode 'io_uring' + </summary> + <description> + Linux 5.1 introduces a fast and efficient async IO interface + io_uring, then qemu implements that in version 5.0. It could be used + in file, host device and host cdrom backend by + <code>io='io_uring'</code> of disk XML. + </description> + </change> </section> <section title="Improvements"> </section> -- 2.25.0

On Tue, Apr 21, 2020 at 08:19:33PM +0800, Han Han wrote:
Changes from v1: - Separate the news XML patch from the docs patch - More details in the descrition of news XML - Change bus type of unit tests XML from ide to virtio - Fix missing spaces in docs patch - Reorder the sequence of patches
git repo: https://github.com/qiankehan/libvirt/tree/io_uring-v2 v1: https://www.redhat.com/archives/libvir-list/2020-April/msg00883.html
Han Han (5): qemu_capabilities: Introduce QEMU_CAPS_AIO_IO_URING qemu: Implement the aio mode io_uring docs: Docs and rng schemas for io_uring tests: Tests for io mode io_uring news: qemu: support async IO mode 'io_uring'
This series does pretty much what's requested by https://bugzilla.redhat.com/show_bug.cgi?id=1769598 am I right? Thanks, pvl

On Fri, Apr 24, 2020 at 9:58 PM Pavel Mores <pmores@redhat.com> wrote:
On Tue, Apr 21, 2020 at 08:19:33PM +0800, Han Han wrote:
Changes from v1: - Separate the news XML patch from the docs patch - More details in the descrition of news XML - Change bus type of unit tests XML from ide to virtio - Fix missing spaces in docs patch - Reorder the sequence of patches
git repo: https://github.com/qiankehan/libvirt/tree/io_uring-v2 v1: https://www.redhat.com/archives/libvir-list/2020-April/msg00883.html
Han Han (5): qemu_capabilities: Introduce QEMU_CAPS_AIO_IO_URING qemu: Implement the aio mode io_uring docs: Docs and rng schemas for io_uring tests: Tests for io mode io_uring news: qemu: support async IO mode 'io_uring'
This series does pretty much what's requested by
https://bugzilla.redhat.com/show_bug.cgi?id=1769598
am I right?
Yeah. I forgot to mention the bug in the commit msg :)..
Thanks,
pvl
-- Best regards, ----------------------------------- Han Han Quality Engineer Redhat. Email: hhan@redhat.com Phone: +861065339333
participants (3)
-
Han Han
-
Pavel Mores
-
Peter Krempa