[PATCH Libvirt 0/3] support discard and write-zeroes options for virtio-blk device

DISCARD and WRITE_ZEROES commands has been implemented in virtio-blk protocol since qemu >= 4.2.0, may be it's time to introduce discard and write-zeroes options for virtio-blk device in libvirt so that the upper layer can enable this feature at disk granularity. To distinguish the discard option in block drive layer, use the 'virtio' prefix to indicate that these attributes are specific for virtio-blk disk. To try this out, three things has done in this patchset: 1. introduce capabilities of discard and write-zeroes for virtio-blk 2. add virtio_discard and virtio_write_zeroes attributes of driver in disk xml element 3. generate cmd line when launching vm Please review, any comments and suggestions are very appreciated, thanks! Yong Hyman Huang(黄勇) (3): qemu_capabilities: Introduce virtio-blk DISCARD and WRITE_ZEROES capabilities conf: Add 'virtio_discard' and 'virtio_write_zeroes' attributes qemu_command: Generate cmd line for discard and write-zeroes properties docs/formatdomain.rst | 8 +++ src/conf/domain_conf.c | 16 ++++++ src/conf/domain_conf.h | 2 + src/conf/schemas/domaincommon.rng | 10 ++++ src/qemu/qemu_capabilities.c | 4 ++ src/qemu/qemu_capabilities.h | 2 + src/qemu/qemu_command.c | 2 + src/qemu/qemu_validate.c | 14 +++++ .../caps_4.2.0_aarch64.xml | 2 + .../qemucapabilitiesdata/caps_4.2.0_ppc64.xml | 2 + .../qemucapabilitiesdata/caps_4.2.0_s390x.xml | 2 + .../caps_4.2.0_x86_64.xml | 2 + .../caps_5.0.0_aarch64.xml | 2 + .../qemucapabilitiesdata/caps_5.0.0_ppc64.xml | 2 + .../caps_5.0.0_riscv64.xml | 2 + .../caps_5.0.0_x86_64.xml | 2 + .../caps_5.1.0_x86_64.xml | 2 + .../caps_5.2.0_aarch64.xml | 2 + .../qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 2 + .../caps_5.2.0_riscv64.xml | 2 + .../qemucapabilitiesdata/caps_5.2.0_s390x.xml | 2 + .../caps_5.2.0_x86_64.xml | 2 + .../caps_6.0.0_aarch64.xml | 2 + .../qemucapabilitiesdata/caps_6.0.0_s390x.xml | 2 + .../caps_6.0.0_x86_64.xml | 2 + .../caps_6.1.0_x86_64.xml | 2 + .../caps_6.2.0_aarch64.xml | 2 + .../qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 2 + .../caps_6.2.0_x86_64.xml | 2 + .../caps_7.0.0_aarch64+hvf.xml | 2 + .../caps_7.0.0_aarch64.xml | 2 + .../qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 2 + .../caps_7.0.0_x86_64.xml | 2 + .../qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 2 + .../caps_7.1.0_x86_64.xml | 2 + tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 2 + .../caps_7.2.0_x86_64+hvf.xml | 2 + .../caps_7.2.0_x86_64.xml | 2 + .../caps_8.0.0_riscv64.xml | 2 + .../caps_8.0.0_x86_64.xml | 2 + .../qemucapabilitiesdata/caps_8.1.0_s390x.xml | 2 + .../caps_8.1.0_x86_64.xml | 2 + .../disk-virtio-discard.x86_64-latest.args | 44 +++++++++++++++ .../qemuxml2argvdata/disk-virtio-discard.xml | 56 +++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 45 files changed, 227 insertions(+) create mode 100644 tests/qemuxml2argvdata/disk-virtio-discard.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/disk-virtio-discard.xml -- 2.38.5

From: Hyman Huang(黄勇) <yong.huang@smartx.com> DISCARD and WRITE_ZEROES commands has been implemented in virtio-blk protocol since qemu >= 4.2.0. Introduce QEMU_CAPS_VIRTIO_BLK_DISCARD and QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES capability definitions. Signed-off-by: Hyman Huang(黄勇) <yong.huang@smartx.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 2 ++ 36 files changed, 74 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c9f4b17208..b11bac95e6 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -697,6 +697,8 @@ VIR_ENUM_IMPL(virQEMUCaps, /* 450 */ "run-with.async-teardown", /* QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN */ + "virtio-blk.discard", /* QEMU_CAPS_VIRTIO_BLK_DISCARD */ + "virtio-blk.write-zeroes", /* QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES */ ); @@ -1422,6 +1424,8 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioBlk[] = { { "scsi", QEMU_CAPS_VIRTIO_BLK_SCSI, virQEMUCapsDevicePropsVirtioBlkSCSIDefault }, { "queue-size", QEMU_CAPS_VIRTIO_BLK_QUEUE_SIZE, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "discard", QEMU_CAPS_VIRTIO_BLK_DISCARD, NULL }, + { "write-zeroes", QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES, NULL }, }; static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioNet[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 2460fa7fa0..bcf0aaa0a5 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -676,6 +676,8 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 450 */ QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN, /* asynchronous teardown -run-with async-teardown=on|off */ + QEMU_CAPS_VIRTIO_BLK_DISCARD, /* virtio-blk-*.discard */ + QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES, /* virtio-blk-*.write-zeroes */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml index 6a7f33e3c6..3823eb7994 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml @@ -111,6 +111,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>61700242</microcodeVersion> <package>v4.1.0-2221-g36609b4fa3</package> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml index 2064f07c9c..0760733c7b 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml @@ -110,6 +110,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>42900242</microcodeVersion> <package>v4.1.0-2198-g9e583f2</package> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml index b440d9d538..8a0c687cb6 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml @@ -75,6 +75,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>39100242</microcodeVersion> <package>qemu-4.2.0-20200115.0.1e4aa2da.fc31</package> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml index b45d4a6293..782adba95e 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml @@ -153,6 +153,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>43100242</microcodeVersion> <package>v4.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml index a2b7214b8a..e9f8e51575 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml @@ -123,6 +123,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>61700241</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml index 16333ba499..7d59efba65 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml @@ -125,6 +125,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>42900241</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml index 09a71875ef..6bceb233ba 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml @@ -118,6 +118,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>0</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml index 5331cf0113..815d9c2dd9 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml @@ -162,6 +162,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>43100241</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml index 1c3d3ea2a9..9633013da0 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml @@ -166,6 +166,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5001000</version> <microcodeVersion>43100242</microcodeVersion> <package>v5.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml index b1c5c21abb..33ca4417e7 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml @@ -130,6 +130,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>61700243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml index 9db85dafef..449f29bcb1 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml @@ -130,6 +130,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>42900243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml index 4d03004fa1..ad5e839c34 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml @@ -123,6 +123,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>0</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml index 38a3f70a5e..0551691fd5 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml @@ -86,6 +86,8 @@ <flag name='virtio-iommu-pci'/> <flag name='virtio-net.rss'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>39100243</microcodeVersion> <package>qemu-5.2.0-20201215.0.ba93e22c.fc32</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index 654fec58fe..4ec76f6b96 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -170,6 +170,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>43100243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml index 6faf407a97..2e91b53f9d 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml @@ -140,6 +140,8 @@ <flag name='migration.blocked-reasons'/> <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6000000</version> <microcodeVersion>61700242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml b/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml index a63263e7e5..3563ff6384 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml @@ -95,6 +95,8 @@ <flag name='virtio-net.rss'/> <flag name='migration.blocked-reasons'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6000000</version> <microcodeVersion>39100242</microcodeVersion> <package>qemu-6.0.0-20210517.1.4ff77070.fc33</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index b1bf3caecf..12d6f27dc8 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -181,6 +181,8 @@ <flag name='migration.blocked-reasons'/> <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6000000</version> <microcodeVersion>43100242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index 13d909e382..ab00c9d5b4 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -187,6 +187,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6001000</version> <microcodeVersion>43100243</microcodeVersion> <package>v6.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml index e312801b89..7576a264b2 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml @@ -153,6 +153,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6001050</version> <microcodeVersion>61700244</microcodeVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml index e6b0bc03f4..45603b5524 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml @@ -143,6 +143,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002000</version> <microcodeVersion>42900244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index e1758396b0..e9cc950482 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -189,6 +189,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002000</version> <microcodeVersion>43100244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml index 3517e81d15..27e1787c07 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002092</version> <microcodeVersion>61700243</microcodeVersion> <package>v7.0.0-rc2</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml index 58db75d1d7..eadd9ea74a 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002092</version> <microcodeVersion>61700243</microcodeVersion> <package>v7.0.0-rc2</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml index 40130f180f..7c7cad17ba 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7000000</version> <microcodeVersion>42900243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index b7446435a6..4da26727e4 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -195,6 +195,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7000000</version> <microcodeVersion>43100243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml index 6bc39b85f7..f04fabf02d 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7001000</version> <microcodeVersion>42900244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index 6492695705..4e6a7a62bf 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -198,6 +198,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7001000</version> <microcodeVersion>43100244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml index f190be552a..5caff5c357 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -156,6 +156,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002000</version> <microcodeVersion>0</microcodeVersion> <package>qemu-7.2.0-6.fc37</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index c08a99e734..3411580ee9 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -202,6 +202,8 @@ <flag name='cryptodev-backend-lkcf'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index 37933c0848..f29f0d256a 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -202,6 +202,8 @@ <flag name='cryptodev-backend-lkcf'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml index 4c5e72ba56..2cf4d08ab5 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml @@ -143,6 +143,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002050</version> <microcodeVersion>0</microcodeVersion> <package>v7.2.0-333-g222059a0fc</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index cd5341f4fa..3c0301b489 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -206,6 +206,8 @@ <flag name='virtio-gpu.blob'/> <flag name='rbd-encryption-layering'/> <flag name='rbd-encryption-luks-any'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>8000000</version> <microcodeVersion>43100244</microcodeVersion> <package>v8.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml index 88c7ac89db..d473b47c80 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml @@ -115,6 +115,8 @@ <flag name='rbd-encryption-layering'/> <flag name='rbd-encryption-luks-any'/> <flag name='run-with.async-teardown'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>8000050</version> <microcodeVersion>39100245</microcodeVersion> <package>v8.0.0-1270-g1c12355b</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index 475496a8c8..45485b4086 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -207,6 +207,8 @@ <flag name='rbd-encryption-luks-any'/> <flag name='qcow2-discard-no-unref'/> <flag name='run-with.async-teardown'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>8000050</version> <microcodeVersion>43100245</microcodeVersion> <package>v8.0.0-1739-g5f9dd6a8ce</package> -- 2.38.5

I believe that qemu 4.2.0 is the oldest version of qemu that we still support, so I don't think that a new capability would actually be necessary for this. Jonathon On 7/16/23 8:41 AM, ~hyman wrote:
From: Hyman Huang(黄勇) <yong.huang@smartx.com>
DISCARD and WRITE_ZEROES commands has been implemented in virtio-blk protocol since qemu >= 4.2.0. Introduce QEMU_CAPS_VIRTIO_BLK_DISCARD and QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES capability definitions.
Signed-off-by: Hyman Huang(黄勇) <yong.huang@smartx.com> --- src/qemu/qemu_capabilities.c | 4 ++++ src/qemu/qemu_capabilities.h | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml | 2 ++ tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml | 2 ++ tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml | 2 ++ 36 files changed, 74 insertions(+)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c9f4b17208..b11bac95e6 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -697,6 +697,8 @@ VIR_ENUM_IMPL(virQEMUCaps,
/* 450 */ "run-with.async-teardown", /* QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN */ + "virtio-blk.discard", /* QEMU_CAPS_VIRTIO_BLK_DISCARD */ + "virtio-blk.write-zeroes", /* QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES */ );
@@ -1422,6 +1424,8 @@ static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioBlk[] = { { "scsi", QEMU_CAPS_VIRTIO_BLK_SCSI, virQEMUCapsDevicePropsVirtioBlkSCSIDefault }, { "queue-size", QEMU_CAPS_VIRTIO_BLK_QUEUE_SIZE, NULL }, { "acpi-index", QEMU_CAPS_ACPI_INDEX, NULL }, + { "discard", QEMU_CAPS_VIRTIO_BLK_DISCARD, NULL }, + { "write-zeroes", QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES, NULL }, };
static struct virQEMUCapsDevicePropsFlags virQEMUCapsDevicePropsVirtioNet[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 2460fa7fa0..bcf0aaa0a5 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -676,6 +676,8 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
/* 450 */ QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN, /* asynchronous teardown -run-with async-teardown=on|off */ + QEMU_CAPS_VIRTIO_BLK_DISCARD, /* virtio-blk-*.discard */ + QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES, /* virtio-blk-*.write-zeroes */
QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml index 6a7f33e3c6..3823eb7994 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_aarch64.xml @@ -111,6 +111,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>61700242</microcodeVersion> <package>v4.1.0-2221-g36609b4fa3</package> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml index 2064f07c9c..0760733c7b 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_ppc64.xml @@ -110,6 +110,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>42900242</microcodeVersion> <package>v4.1.0-2198-g9e583f2</package> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml index b440d9d538..8a0c687cb6 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_s390x.xml @@ -75,6 +75,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>39100242</microcodeVersion> <package>qemu-4.2.0-20200115.0.1e4aa2da.fc31</package> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml index b45d4a6293..782adba95e 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0_x86_64.xml @@ -153,6 +153,8 @@ <flag name='virtio-blk.queue-size'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>4002000</version> <microcodeVersion>43100242</microcodeVersion> <package>v4.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml index a2b7214b8a..e9f8e51575 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_aarch64.xml @@ -123,6 +123,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>61700241</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml index 16333ba499..7d59efba65 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_ppc64.xml @@ -125,6 +125,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>42900241</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml index 09a71875ef..6bceb233ba 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_riscv64.xml @@ -118,6 +118,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>0</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml index 5331cf0113..815d9c2dd9 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0_x86_64.xml @@ -162,6 +162,8 @@ <flag name='virtio-iommu-pci'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5000000</version> <microcodeVersion>43100241</microcodeVersion> <package>v5.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml index 1c3d3ea2a9..9633013da0 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0_x86_64.xml @@ -166,6 +166,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5001000</version> <microcodeVersion>43100242</microcodeVersion> <package>v5.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml index b1c5c21abb..33ca4417e7 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_aarch64.xml @@ -130,6 +130,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>61700243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml index 9db85dafef..449f29bcb1 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_ppc64.xml @@ -130,6 +130,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>42900243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml index 4d03004fa1..ad5e839c34 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_riscv64.xml @@ -123,6 +123,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>0</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml b/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml index 38a3f70a5e..0551691fd5 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_s390x.xml @@ -86,6 +86,8 @@ <flag name='virtio-iommu-pci'/> <flag name='virtio-net.rss'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>39100243</microcodeVersion> <package>qemu-5.2.0-20201215.0.ba93e22c.fc32</package> diff --git a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml index 654fec58fe..4ec76f6b96 100644 --- a/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.2.0_x86_64.xml @@ -170,6 +170,8 @@ <flag name='virtio-net.rss'/> <flag name='usb-host.guest-resets-all'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>5002000</version> <microcodeVersion>43100243</microcodeVersion> <package>v5.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml index 6faf407a97..2e91b53f9d 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_aarch64.xml @@ -140,6 +140,8 @@ <flag name='migration.blocked-reasons'/> <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6000000</version> <microcodeVersion>61700242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml b/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml index a63263e7e5..3563ff6384 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_s390x.xml @@ -95,6 +95,8 @@ <flag name='virtio-net.rss'/> <flag name='migration.blocked-reasons'/> <flag name='virtio-crypto'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6000000</version> <microcodeVersion>39100242</microcodeVersion> <package>qemu-6.0.0-20210517.1.4ff77070.fc33</package> diff --git a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml index b1bf3caecf..12d6f27dc8 100644 --- a/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.0.0_x86_64.xml @@ -181,6 +181,8 @@ <flag name='migration.blocked-reasons'/> <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6000000</version> <microcodeVersion>43100242</microcodeVersion> <package>v6.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml index 13d909e382..ab00c9d5b4 100644 --- a/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.1.0_x86_64.xml @@ -187,6 +187,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6001000</version> <microcodeVersion>43100243</microcodeVersion> <package>v6.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml index e312801b89..7576a264b2 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_aarch64.xml @@ -153,6 +153,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6001050</version> <microcodeVersion>61700244</microcodeVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml index e6b0bc03f4..45603b5524 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_ppc64.xml @@ -143,6 +143,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002000</version> <microcodeVersion>42900244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml index e1758396b0..e9cc950482 100644 --- a/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_6.2.0_x86_64.xml @@ -189,6 +189,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002000</version> <microcodeVersion>43100244</microcodeVersion> <package>v6.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml index 3517e81d15..27e1787c07 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64+hvf.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002092</version> <microcodeVersion>61700243</microcodeVersion> <package>v7.0.0-rc2</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml index 58db75d1d7..eadd9ea74a 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_aarch64.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>6002092</version> <microcodeVersion>61700243</microcodeVersion> <package>v7.0.0-rc2</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml index 40130f180f..7c7cad17ba 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_ppc64.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7000000</version> <microcodeVersion>42900243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml index b7446435a6..4da26727e4 100644 --- a/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.0.0_x86_64.xml @@ -195,6 +195,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7000000</version> <microcodeVersion>43100243</microcodeVersion> <package>v7.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml index 6bc39b85f7..f04fabf02d 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_ppc64.xml @@ -161,6 +161,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7001000</version> <microcodeVersion>42900244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml index 6492695705..4e6a7a62bf 100644 --- a/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.1.0_x86_64.xml @@ -198,6 +198,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7001000</version> <microcodeVersion>43100244</microcodeVersion> <package>v7.1.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml index f190be552a..5caff5c357 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_ppc.xml @@ -156,6 +156,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002000</version> <microcodeVersion>0</microcodeVersion> <package>qemu-7.2.0-6.fc37</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml index c08a99e734..3411580ee9 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64+hvf.xml @@ -202,6 +202,8 @@ <flag name='cryptodev-backend-lkcf'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml index 37933c0848..f29f0d256a 100644 --- a/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_7.2.0_x86_64.xml @@ -202,6 +202,8 @@ <flag name='cryptodev-backend-lkcf'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002000</version> <microcodeVersion>43100245</microcodeVersion> <package>v7.2.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml index 4c5e72ba56..2cf4d08ab5 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_riscv64.xml @@ -143,6 +143,8 @@ <flag name='virtio-crypto'/> <flag name='pvpanic-pci'/> <flag name='virtio-gpu.blob'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>7002050</version> <microcodeVersion>0</microcodeVersion> <package>v7.2.0-333-g222059a0fc</package> diff --git a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml index cd5341f4fa..3c0301b489 100644 --- a/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.0.0_x86_64.xml @@ -206,6 +206,8 @@ <flag name='virtio-gpu.blob'/> <flag name='rbd-encryption-layering'/> <flag name='rbd-encryption-luks-any'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>8000000</version> <microcodeVersion>43100244</microcodeVersion> <package>v8.0.0</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml index 88c7ac89db..d473b47c80 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_s390x.xml @@ -115,6 +115,8 @@ <flag name='rbd-encryption-layering'/> <flag name='rbd-encryption-luks-any'/> <flag name='run-with.async-teardown'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>8000050</version> <microcodeVersion>39100245</microcodeVersion> <package>v8.0.0-1270-g1c12355b</package> diff --git a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml index 475496a8c8..45485b4086 100644 --- a/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_8.1.0_x86_64.xml @@ -207,6 +207,8 @@ <flag name='rbd-encryption-luks-any'/> <flag name='qcow2-discard-no-unref'/> <flag name='run-with.async-teardown'/> + <flag name='virtio-blk.discard'/> + <flag name='virtio-blk.write-zeroes'/> <version>8000050</version> <microcodeVersion>43100245</microcodeVersion> <package>v8.0.0-1739-g5f9dd6a8ce</package>

On 7/17/23 21:43, Jonathon Jongsma wrote:
I believe that qemu 4.2.0 is the oldest version of qemu that we still support, so I don't think that a new capability would actually be necessary for this.
Just for completeness, since Hyman is new contributor: this fact Jonathon mentions is necessary but not sufficient. If a capability depends on compile time/runtime configuration then we still want to have capability. For instance, we have QEMU_CAPS_SPICE which tells whether QEMU was built with SPICE support. Now, SPICE was introduced to QEMU somewhere in 0.14 (according to [1]) which is way older than 4.2.0 (~8 years difference), and yet we still have a capability for it, because QEMU can be built without SPICE support. But this is not the case for '.discard' and '.write-zeroes' attributes you are introducing as they are declared unconditionally in QEMU code: hw/block/virtio-blk.c=1706=static Property virtio_blk_properties[] = { -- hw/block/virtio-blk.c-1725- DEFINE_PROP_BIT64("discard", VirtIOBlock, host_features, hw/block/virtio-blk.c-1726- VIRTIO_BLK_F_DISCARD, true), hw/block/virtio-blk.c-1727- DEFINE_PROP_BOOL("report-discard-granularity", VirtIOBlock, hw/block/virtio-blk.c-1728- conf.report_discard_granularity, true), hw/block/virtio-blk.c:1729: DEFINE_PROP_BIT64("write-zeroes", VirtIOBlock, host_features, hw/block/virtio-blk.c-1730- VIRTIO_BLK_F_WRITE_ZEROES, true), and both were introduced in QEMU commit v4.0.0-rc0~80^2~7. IOW, this capability would be always set and thus is redundant. BTW: to check the minimal version required by libvirt you can use plain grep: libvirt.git $ grep QEMU_MIN_ src/qemu/qemu_capabilities.c #define QEMU_MIN_MAJOR 4 #define QEMU_MIN_MINOR 2 #define QEMU_MIN_MICRO 0 1: https://wiki.qemu.org/ChangeLog/0.14 Michal

From: Hyman Huang(黄勇) <yong.huang@smartx.com> Add 'virtio_discard' and 'virtio_write_zeroes' attribute to control whether discard and write-zeroes requests are handled by the virtio-blk device. To distinguish the attributes in block drive layer, use the 'virtio' prefix to indicate that these attributes are specific for virtio-blk. Signed-off-by: Hyman Huang(黄勇) <yong.huang@smartx.com> --- docs/formatdomain.rst | 8 ++++++++ src/conf/domain_conf.c | 16 ++++++++++++++++ src/conf/domain_conf.h | 2 ++ src/conf/schemas/domaincommon.rng | 10 ++++++++++ 4 files changed, 36 insertions(+) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 4af0b82569..7be12ff08e 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -3259,6 +3259,14 @@ paravirtualized driver is specified via the ``disk`` element. value can be either "unmap" (allow the discard request to be passed) or "ignore" (ignore the discard request). :since:`Since 1.0.6 (QEMU and KVM only)` + - The optional ``virtio_discard`` and ``virtio_write_zeroes`` are attributes + that control whether discard and write-zeroes requests are handled by the + virtio-blk device. The feature is based on DISCARD and WRITE_ZEROES + commands introduced in virtio-blk protocol to improve performance when + using SSD backend. The value can be either 'on' or 'off'. Note that + ``discard`` and ``write_zeroes`` implementations in the block drive layer + are parts of the feature logically and should be turned on when enabling + the feature. :since:`Since 9.6.0 (QEMU and KVM only)` - The optional ``detect_zeroes`` attribute controls whether to detect zero write requests. The value can be "off", "on" or "unmap". First two values turn the detection off and on, respectively. The third value ("unmap") diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 5ac5c0b771..0f82b489f4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7813,6 +7813,14 @@ virDomainDiskDefDriverParseXML(virDomainDiskDef *def, VIR_XML_PROP_NONZERO, &def->discard) < 0) return -1; + if (virXMLPropTristateSwitch(cur, "virtio_discard", VIR_XML_PROP_NONE, + &def->virtio_discard) < 0) + return -1; + + if (virXMLPropTristateSwitch(cur, "virtio_write_zeroes", VIR_XML_PROP_NONE, + &def->virtio_write_zeroes) < 0) + return -1; + if (virXMLPropUInt(cur, "iothread", 10, VIR_XML_PROP_NONZERO, &def->iothread) < 0) return -1; @@ -22514,6 +22522,14 @@ virDomainDiskDefFormatDriver(virBuffer *buf, virBufferAsprintf(&attrBuf, " discard='%s'", virDomainDiskDiscardTypeToString(disk->discard)); + if (disk->virtio_discard) + virBufferAsprintf(&attrBuf, " virtio_discard='%s'", + virTristateSwitchTypeToString(disk->virtio_discard)); + + if (disk->virtio_write_zeroes) + virBufferAsprintf(&attrBuf, " virtio_write_zeroes='%s'", + virTristateSwitchTypeToString(disk->virtio_write_zeroes)); + if (disk->iothread) virBufferAsprintf(&attrBuf, " iothread='%u'", disk->iothread); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c857ba556f..b73b1241ad 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -604,6 +604,8 @@ struct _virDomainDiskDef { virTristateBool rawio; virDomainDeviceSGIO sgio; virDomainDiskDiscard discard; + virTristateSwitch virtio_discard; + virTristateSwitch virtio_write_zeroes; unsigned int iothread; /* unused = 0, > 0 specific thread # */ virDomainDiskDetectZeroes detect_zeroes; virTristateSwitch discard_no_unref; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index c2f56b0490..c3a59aeb15 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -2510,6 +2510,16 @@ <optional> <ref name="discard"/> </optional> + <optional> + <attribute name="virtio_discard"> + <ref name="virOnOff"/> + </attribute> + </optional> + <optional> + <attribute name="virtio_write_zeroes"> + <ref name="virOnOff"/> + </attribute> + </optional> <optional> <ref name="driverIOThread"/> </optional> -- 2.38.5

From: Hyman Huang(黄勇) <yong.huang@smartx.com> Generate cmd line for virtio-blk.discard and virtio-blk.write-zeroes properties. Also, validate that the requested feature is supported by QEMU. Signed-off-by: Hyman Huang(黄勇) <yong.huang@smartx.com> --- src/qemu/qemu_command.c | 2 + src/qemu/qemu_validate.c | 14 +++++ .../disk-virtio-discard.x86_64-latest.args | 44 +++++++++++++++ .../qemuxml2argvdata/disk-virtio-discard.xml | 56 +++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 5 files changed, 117 insertions(+) create mode 100644 tests/qemuxml2argvdata/disk-virtio-discard.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/disk-virtio-discard.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ad224571f3..6954fc5d75 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1834,6 +1834,8 @@ qemuBuildDiskDeviceProps(const virDomainDef *def, "T:scsi", scsi, "p:num-queues", disk->queues, "p:queue-size", disk->queue_size, + "T:discard", disk->virtio_discard, + "T:write-zeroes", disk->virtio_write_zeroes, NULL) < 0) return NULL; } diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 7e09e2c52f..5abe82e1a5 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2989,6 +2989,20 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk, _("queue-size property isn't supported by this QEMU binary")); return -1; } + if (disk->virtio_discard && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_BLK_DISCARD)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("discard property for virtio-blk device isn't supported " + "by this QEMU binary")); + return -1; + } + if (disk->virtio_write_zeroes && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_VIRTIO_BLK_WRITE_ZEROES)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("write_zeroes property for virtio-blk device isn't " + "supported by this QEMU binary")); + return -1; + } break; case VIR_DOMAIN_DISK_BUS_USB: diff --git a/tests/qemuxml2argvdata/disk-virtio-discard.x86_64-latest.args b/tests/qemuxml2argvdata/disk-virtio-discard.x86_64-latest.args new file mode 100644 index 0000000000..30596a57a5 --- /dev/null +++ b/tests/qemuxml2argvdata/disk-virtio-discard.x86_64-latest.args @@ -0,0 +1,44 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-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=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-blockdev '{"driver":"file","filename":"/tmp/data.img","node-name":"libvirt-4-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-4-format","read-only":false,"driver":"raw","file":"libvirt-4-storage"}' \ +-device '{"driver":"virtio-blk-pci","discard":true,"write-zeroes":true,"bus":"pci.0","addr":"0x3","drive":"libvirt-4-format","id":"virtio-disk0","bootindex":1}' \ +-blockdev '{"driver":"file","filename":"/tmp/data1.img","node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-3-format","read-only":false,"driver":"raw","file":"libvirt-3-storage"}' \ +-device '{"driver":"virtio-blk-pci","discard":true,"write-zeroes":false,"bus":"pci.0","addr":"0x4","drive":"libvirt-3-format","id":"virtio-disk1"}' \ +-blockdev '{"driver":"file","filename":"/tmp/data2.img","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-2-format","read-only":false,"driver":"raw","file":"libvirt-2-storage"}' \ +-device '{"driver":"virtio-blk-pci","discard":false,"write-zeroes":true,"bus":"pci.0","addr":"0x5","drive":"libvirt-2-format","id":"virtio-disk2"}' \ +-blockdev '{"driver":"file","filename":"/tmp/data3.img","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw","file":"libvirt-1-storage"}' \ +-device '{"driver":"virtio-blk-pci","discard":false,"write-zeroes":false,"bus":"pci.0","addr":"0x6","drive":"libvirt-1-format","id":"virtio-disk3"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxml2argvdata/disk-virtio-discard.xml b/tests/qemuxml2argvdata/disk-virtio-discard.xml new file mode 100644 index 0000000000..54d2a56d18 --- /dev/null +++ b/tests/qemuxml2argvdata/disk-virtio-discard.xml @@ -0,0 +1,56 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</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='file' device='disk'> + <driver name='qemu' type='raw' virtio_discard='on' virtio_write_zeroes='on'/> + <source file='/tmp/data.img'/> + <target dev='vda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> + </disk> + <disk type='file' device='disk'> + <driver name='qemu' type='raw' virtio_discard='on' virtio_write_zeroes='off'/> + <source file='/tmp/data1.img'/> + <target dev='vdb' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> + </disk> + <disk type='file' device='disk'> + <driver name='qemu' type='raw' virtio_discard='off' virtio_write_zeroes='on'/> + <source file='/tmp/data2.img'/> + <target dev='vdc' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </disk> + <disk type='file' device='disk'> + <driver name='qemu' type='raw' virtio_discard='off' virtio_write_zeroes='off'/> + <source file='/tmp/data3.img'/> + <target dev='vdd' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x06' 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'/> + <audio id='1' type='none'/> + <memballoon model='none'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 534eb9e699..9c7ff63ff1 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1420,6 +1420,7 @@ mymain(void) DO_TEST_CAPS_LATEST("net-vdpa"); DO_TEST_CAPS_LATEST("net-vdpa-multiqueue"); DO_TEST_CAPS_LATEST("net-virtio-rss"); + DO_TEST_CAPS_LATEST("disk-virtio-discard"); DO_TEST("hostdev-pci-multifunction", QEMU_CAPS_KVM, -- 2.38.5
participants (3)
-
Jonathon Jongsma
-
Michal Prívozník
-
~hyman