[libvirt] [PATCH 0/2] support qemu drive cache.* parameters

Nikolay Shirokovskiy (2): conf: add disk cache tuning parameters after qemu qemu: support <cachetune> in domain disk xml .gnulib | 2 +- docs/schemas/domaincommon.rng | 22 ++++++ src/conf/domain_conf.c | 90 ++++++++++++++++++++++ src/conf/domain_conf.h | 7 ++ src/qemu/qemu_capabilities.c | 12 ++- src/qemu/qemu_capabilities.h | 3 + src/qemu/qemu_command.c | 30 ++++++++ tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml | 3 + tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml | 3 + tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml | 3 + tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml | 3 + tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 3 + .../caps_2.6.0-gicv2.aarch64.xml | 3 + .../caps_2.6.0-gicv3.aarch64.xml | 3 + tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 3 + tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 3 + tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 3 + 17 files changed, 194 insertions(+), 2 deletions(-) -- 1.8.3.1

xml example: <disk ...> <cachetune writeback='on' direct='off' no_flush='on'/> </disk> Parameters semantics match corresponding qemu 'cache.*' parameters. -- I wonder should we use flush or sync name instead of qemu no_flush? --- docs/schemas/domaincommon.rng | 22 +++++++++++ src/conf/domain_conf.c | 90 +++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 7 ++++ 3 files changed, 119 insertions(+) diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 95c7882..17e4ac9 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1208,6 +1208,9 @@ <ref name="geometry"/> </optional> <optional> + <ref name="cachetune"/> + </optional> + <optional> <ref name="diskBlockIo"/> </optional> <optional> @@ -1597,6 +1600,25 @@ </optional> </element> </define> + <define name="cachetune"> + <element name="cachetune"> + <optional> + <attribute name="writeback"> + <ref name="virOnOff"/> + </attribute> + </optional> + <optional> + <attribute name="direct"> + <ref name="virOnOff"/> + </attribute> + </optional> + <optional> + <attribute name="no_flush"> + <ref name="virOnOff"/> + </attribute> + </optional> + </element> + </define> <define name="geometry"> <element name="geometry"> <attribute name="cyls"> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index dd34cec..092696c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7405,6 +7405,52 @@ virDomainDiskDefParseValidate(const virDomainDiskDef *def) return 0; } +static int +virDomainDiskCachetuneDefFormat(virBufferPtr buf, + virDomainDiskDefPtr def) +{ + const char *writeback = virTristateSwitchTypeToString(def->cachetune.writeback); + const char *direct = virTristateSwitchTypeToString(def->cachetune.direct); + const char *no_flush = virTristateSwitchTypeToString(def->cachetune.no_flush); + + if (!writeback) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unexpected disk cachetune writeback mode %d"), + def->cachetune.writeback); + return -1; + } + + if (!direct) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unexpected disk cachetune direct mode %d"), + def->cachetune.direct); + return -1; + } + + if (!no_flush) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("unexpected disk cachetune no_flush mode %d"), + def->cachetune.no_flush); + return -1; + } + + if (def->cachetune.writeback || + def->cachetune.direct || + def->cachetune.no_flush) { + virBufferAddLit(buf, "<cachetune"); + + if (def->cachetune.writeback) + virBufferAsprintf(buf, " writeback='%s'", writeback); + if (def->cachetune.direct) + virBufferAsprintf(buf, " direct='%s'", direct); + if (def->cachetune.no_flush) + virBufferAsprintf(buf, " no_flush='%s'", no_flush); + + virBufferAddLit(buf, "/>\n"); + } + + return 0; +} static int virDomainDiskDefDriverParseXML(virDomainDiskDefPtr def, @@ -7521,6 +7567,45 @@ virDomainDiskDefDriverParseXML(virDomainDiskDefPtr def, return ret; } +static int +virDomainDiskDefCachetuneParse(virDomainDiskDefPtr def, + xmlNodePtr cur, + xmlXPathContextPtr ctxt ATTRIBUTE_UNUSED) +{ + char *tmp = NULL; + int ret = -1; + + if ((tmp = virXMLPropString(cur, "writeback")) && + (def->cachetune.writeback = virTristateSwitchTypeFromString(tmp)) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown disk cache writeback setting '%s'"), tmp); + goto cleanup; + } + VIR_FREE(tmp); + + if ((tmp = virXMLPropString(cur, "direct")) && + (def->cachetune.direct = virTristateSwitchTypeFromString(tmp)) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown disk cache direct setting '%s'"), tmp); + goto cleanup; + } + VIR_FREE(tmp); + + if ((tmp = virXMLPropString(cur, "no_flush")) && + (def->cachetune.no_flush = virTristateSwitchTypeFromString(tmp)) < 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unknown disk cache no_flush setting '%s'"), tmp); + goto cleanup; + } + VIR_FREE(tmp); + + ret = 0; + + cleanup: + VIR_FREE(tmp); + + return ret; +} #define VENDOR_LEN 8 #define PRODUCT_LEN 16 @@ -7738,6 +7823,9 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt, } } else if (xmlStrEqual(cur->name, BAD_CAST "boot")) { /* boot is parsed as part of virDomainDeviceInfoParseXML */ + } else if (xmlStrEqual(cur->name, BAD_CAST "cachetune")) { + if (virDomainDiskDefCachetuneParse(def, cur, ctxt) < 0) + goto error; } } @@ -20182,6 +20270,8 @@ virDomainDiskDefFormat(virBufferPtr buf, virDomainDiskGeometryDefFormat(buf, def); virDomainDiskBlockIoDefFormat(buf, def); + if (virDomainDiskCachetuneDefFormat(buf, def) < 0) + return -1; /* For now, mirroring is currently output-only: we only output it * for live domains, therefore we ignore it on input except for diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ce90c27..2cc85e6 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -597,6 +597,13 @@ struct _virDomainDiskDef { char *vendor; char *product; int cachemode; /* enum virDomainDiskCache */ + + struct { + int writeback; /* enum virTristateSwitch */ + int direct; /* enum virTristateSwitch */ + int no_flush; /* enum virTristateSwitch */ + } cachetune; + int error_policy; /* enum virDomainDiskErrorPolicy */ int rerror_policy; /* enum virDomainDiskErrorPolicy */ int iomode; /* enum virDomainDiskIo */ -- 1.8.3.1

On Mon, Sep 26, 2016 at 11:43:58 +0300, Nikolay Shirokovskiy wrote:
xml example:
<disk ...> <cachetune writeback='on' direct='off' no_flush='on'/>
Aren't writeback and direct mutually exclusive?
</disk>
What's wrong with <disk ...> <driver ... cache=''>? See https://libvirt.org/formatdomain.html#elementsDisks This commit message really does not describe your motivation for the addition.
Parameters semantics match corresponding qemu 'cache.*' parameters.
--
I wonder should we use flush or sync name instead of qemu no_flush? --- docs/schemas/domaincommon.rng | 22 +++++++++++ src/conf/domain_conf.c | 90 +++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 7 ++++ 3 files changed, 119 insertions(+)
Peter

On 26.09.2016 12:01, Peter Krempa wrote:
On Mon, Sep 26, 2016 at 11:43:58 +0300, Nikolay Shirokovskiy wrote:
xml example:
<disk ...> <cachetune writeback='on' direct='off' no_flush='on'/>
Aren't writeback and direct mutually exclusive?
</disk>
What's wrong with
<disk ...> <driver ... cache=''>?
See https://libvirt.org/formatdomain.html#elementsDisks
This commit message really does not describe your motivation for the addition.
Sorry, I forget to write down the motivation. Internally qemu uses 3 orthogonal flags to configure disk cache. They are exposed in interface too quite long time ago (29c4e2b). All-in-one cache parameter that libvirt uses now do not provide all possible values (5 vs 8). For example absent combination of direct + no flush (no sync) is useful to speed up tests. So I decided to provide new possibilities just as qemu does - keep old parameter and use new ones to tune over.

On Mon, Sep 26, 2016 at 12:15:42 +0300, Nikolay Shirokovskiy wrote:
On 26.09.2016 12:01, Peter Krempa wrote:
[...]
Sorry, I forget to write down the motivation.
Internally qemu uses 3 orthogonal flags to configure disk cache. They are exposed in interface too quite long time ago (29c4e2b). All-in-one cache parameter that libvirt uses now do not provide all possible values (5 vs 8). For example absent combination of direct + no flush (no sync) is useful to speed up tests.
Well, if there are useful combinations we can add them to the existing cache setting.
So I decided to provide new possibilities just as qemu does - keep old parameter and use new ones to tune over.
I don't think this is a good idea at all. It's very qemu specific and can be mapped to existing elements. Peter

On 26.09.2016 13:04, Peter Krempa wrote:
On Mon, Sep 26, 2016 at 12:15:42 +0300, Nikolay Shirokovskiy wrote:
On 26.09.2016 12:01, Peter Krempa wrote:
[...]
Sorry, I forget to write down the motivation.
Internally qemu uses 3 orthogonal flags to configure disk cache. They are exposed in interface too quite long time ago (29c4e2b). All-in-one cache parameter that libvirt uses now do not provide all possible values (5 vs 8). For example absent combination of direct + no flush (no sync) is useful to speed up tests.
Well, if there are useful combinations we can add them to the existing cache setting.
So I decided to provide new possibilities just as qemu does - keep old parameter and use new ones to tune over.
I don't think this is a good idea at all. It's very qemu specific and can be mapped to existing elements.
Peter
Well up until now libvirt cache settings are exactly the same as the qemu ones. I thought it would be inconsistent to intordocuce new name and then map internallly to qemu. Another point is that these 3 parameters are probably not that qemu specific. Nikolay

adding cc On 26.09.2016 13:36, Nikolay Shirokovskiy wrote:
On 26.09.2016 13:04, Peter Krempa wrote:
On Mon, Sep 26, 2016 at 12:15:42 +0300, Nikolay Shirokovskiy wrote:
On 26.09.2016 12:01, Peter Krempa wrote:
[...]
Sorry, I forget to write down the motivation.
Internally qemu uses 3 orthogonal flags to configure disk cache. They are exposed in interface too quite long time ago (29c4e2b). All-in-one cache parameter that libvirt uses now do not provide all possible values (5 vs 8). For example absent combination of direct + no flush (no sync) is useful to speed up tests.
Well, if there are useful combinations we can add them to the existing cache setting.
So I decided to provide new possibilities just as qemu does - keep old parameter and use new ones to tune over.
I don't think this is a good idea at all. It's very qemu specific and can be mapped to existing elements.
Peter
Well up until now libvirt cache settings are exactly the same as the qemu ones. I thought it would be inconsistent to intordocuce new name and then map internallly to qemu. Another point is that these 3 parameters are probably not that qemu specific.
Nikolay
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list

adding cc
On 26.09.2016 13:36, Nikolay Shirokovskiy wrote:
On 26.09.2016 13:04, Peter Krempa wrote:
On Mon, Sep 26, 2016 at 12:15:42 +0300, Nikolay Shirokovskiy wrote:
On 26.09.2016 12:01, Peter Krempa wrote: [...]
Sorry, I forget to write down the motivation.
Internally qemu uses 3 orthogonal flags to configure disk cache. They are exposed in interface too quite long time ago (29c4e2b). All-in-one cache parameter that libvirt uses now do not provide all possible values (5 vs 8). For example absent combination of direct + no flush (no sync) is useful to speed up tests. Well, if there are useful combinations we can add them to the existing cache setting.
So I decided to provide new possibilities just as qemu does - keep old parameter and use new ones to tune over. I don't think this is a good idea at all. It's very qemu specific and can be mapped to existing elements.
Peter
Well up until now libvirt cache settings are exactly the same as the qemu ones. I thought it would be inconsistent to intordocuce new name and then map internallly to qemu. Another point is that these 3 parameters are probably not that qemu specific.
Nikolay
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 10/05/2016 10:43 AM, Nikolay Shirokovskiy wrote: the problem is that current modes are a little bit adhoc. The describe non-trivial combination of 3 parameters, which could be tuned on/off independently. That is why it would be more clear to use the approach with separate flags. Den

Qemu supports cache.* parameters since 1.6 version. However introspection for their presence is available in later versions only. --- I don't bothered to figuring out from what version introspection is possible thus don't touch tests/qemucapabilitiesdata/caps_*.replies. Hoever it would be nice to know this version. In this case version checking can have upper bound and can be eventually dropped from the code when libvirt drops support of this version. --- .gnulib | 2 +- src/qemu/qemu_capabilities.c | 12 ++++++++- src/qemu/qemu_capabilities.h | 3 +++ src/qemu/qemu_command.c | 30 ++++++++++++++++++++++ tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml | 3 +++ tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml | 3 +++ tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml | 3 +++ tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml | 3 +++ tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 3 +++ .../caps_2.6.0-gicv2.aarch64.xml | 3 +++ .../caps_2.6.0-gicv3.aarch64.xml | 3 +++ tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml | 3 +++ tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 3 +++ tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 3 +++ 14 files changed, 75 insertions(+), 2 deletions(-) diff --git a/.gnulib b/.gnulib index e89b4a7..a2a3943 160000 --- a/.gnulib +++ b/.gnulib @@ -1 +1 @@ -Subproject commit e89b4a7aefce9cb02963920712ba7cdd13641644 +Subproject commit a2a39436b65f329630df4a93ec4e30aeae403c54 diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 4d859c4..8e54f99 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -344,6 +344,9 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, "query-hotpluggable-cpus", "virtio-net.rx_queue_size", /* 235 */ + "drive-cache.writeback", + "drive-cache.direct", + "drive-cache.no_flush", ); @@ -2836,6 +2839,9 @@ static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = { { "machine", "vmport", QEMU_CAPS_MACHINE_VMPORT_OPT }, { "drive", "discard", QEMU_CAPS_DRIVE_DISCARD }, { "drive", "detect-zeroes", QEMU_CAPS_DRIVE_DETECT_ZEROES }, + { "drive", "cache.writeback", QEMU_CAPS_DRIVE_CACHE_WRITEBACK }, + { "drive", "cache.direct", QEMU_CAPS_DRIVE_CACHE_DIRECT }, + { "drive", "cache.no-flush", QEMU_CAPS_DRIVE_CACHE_NO_FLUSH }, { "realtime", "mlock", QEMU_CAPS_REALTIME_MLOCK }, { "boot-opts", "strict", QEMU_CAPS_BOOT_STRICT }, { "boot-opts", "reboot-timeout", QEMU_CAPS_REBOOT_TIMEOUT }, @@ -3756,8 +3762,12 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps, if (qemuCaps->version >= 1005000) virQEMUCapsSet(qemuCaps, QEMU_CAPS_CHARDEV_SPICEPORT); - if (qemuCaps->version >= 1006000) + if (qemuCaps->version >= 1006000) { virQEMUCapsSet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_WRITEBACK); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_DIRECT); + virQEMUCapsSet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_NO_FLUSH); + } /* vmport option is supported v2.2.0 onwards */ if (qemuCaps->version >= 2002000) diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index ba0ef48..01d37a9 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -378,6 +378,9 @@ typedef enum { /* 235 */ QEMU_CAPS_VIRTIO_NET_RX_QUEUE_SIZE, /* virtio-net-*.rx_queue_size */ + QEMU_CAPS_DRIVE_CACHE_WRITEBACK, /* cache.writeback */ + QEMU_CAPS_DRIVE_CACHE_DIRECT, /* cache.direct */ + QEMU_CAPS_DRIVE_CACHE_NO_FLUSH, /* cache.no-flush */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f24a98b..347f902 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1635,6 +1635,36 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, virBufferAddLit(&opt, ",cache=none"); } + if (disk->cachetune.writeback > 0) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_WRITEBACK)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk cache writeback parameter is not " + "supported by this QEMU")); + } + virBufferAsprintf(&opt, ",cache.writeback=%s", + virTristateSwitchTypeToString(disk->cachetune.writeback)); + } + + if (disk->cachetune.direct > 0) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_DIRECT)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk cache direct parameter is not " + "supported by this QEMU")); + } + virBufferAsprintf(&opt, ",cache.direct=%s", + virTristateSwitchTypeToString(disk->cachetune.direct)); + } + + if (disk->cachetune.no_flush > 0) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_CACHE_NO_FLUSH)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("disk cache no_flush parameter is not " + "supported by this QEMU")); + } + virBufferAsprintf(&opt, ",cache.no-flush=%s", + virTristateSwitchTypeToString(disk->cachetune.no_flush)); + } + if (disk->copy_on_read) { if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DRIVE_COPY_ON_READ)) { virBufferAsprintf(&opt, ",copy-on-read=%s", diff --git a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml index a6d4561..5a98598 100644 --- a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml @@ -148,6 +148,9 @@ <flag name='device-tray-moved-event'/> <flag name='nec-usb-xhci-ports'/> <flag name='display'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>1006000</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml index f756a41..af2a4d4 100644 --- a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml @@ -150,6 +150,9 @@ <flag name='device-tray-moved-event'/> <flag name='nec-usb-xhci-ports'/> <flag name='display'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>1007000</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml index a77ad9e..6508343 100644 --- a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml @@ -165,6 +165,9 @@ <flag name='name-guest'/> <flag name='drive-detect-zeroes'/> <flag name='display'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2001001</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml index db778ef..4c0c7a4 100644 --- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml @@ -185,6 +185,9 @@ <flag name='intel-iommu'/> <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2004000</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml index fc915ad..5071351 100644 --- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml @@ -190,6 +190,9 @@ <flag name='intel-iommu'/> <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2005000</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml index fd14665..c049320 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml @@ -159,6 +159,9 @@ <flag name='display'/> <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2005094</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml index eb708f8..d8a9ad2 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml @@ -159,6 +159,9 @@ <flag name='display'/> <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2005094</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml index 482b384..d2bd423 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml @@ -153,6 +153,9 @@ <flag name='display'/> <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2005094</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml index 60f1fcf..e88f2a0 100644 --- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml @@ -196,6 +196,9 @@ <flag name='intel-iommu'/> <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2006000</version> <kvmVersion>0</kvmVersion> <package></package> diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml index 98f3762..a572ea2 100644 --- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml @@ -197,6 +197,9 @@ <flag name='smm'/> <flag name='virtio-pci-disable-legacy'/> <flag name='query-hotpluggable-cpus'/> + <flag name='drive-cache.writeback'/> + <flag name='drive-cache.direct'/> + <flag name='drive-cache.no_flush'/> <version>2007000</version> <kvmVersion>0</kvmVersion> <package> (v2.7.0)</package> -- 1.8.3.1
participants (3)
-
Denis V. Lunev
-
Nikolay Shirokovskiy
-
Peter Krempa