On 7/10/23 1:30 PM, Michal Prívozník wrote:
On 7/5/23 08:20, Boris Fiuczynski wrote:Asynchronous teardown can be specified if the QEMU binary supports it by adding in the domain XML <features> ... <async-teardown enabled='yes|no'/> ... </features> By default this new feature is disabled. Signed-off-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx> Reviewed-by: Thomas Huth <thuth@xxxxxxxxxx> --- docs/formatdomain.rst | 6 +++ src/conf/domain_conf.c | 22 ++++++++++ src/conf/domain_conf.h | 1 + src/conf/schemas/domaincommon.rng | 9 ++++ src/qemu/qemu_command.c | 20 +++++++++ src/qemu/qemu_validate.c | 9 ++++ .../async-teardown.x86_64-latest.args | 37 ++++++++++++++++ tests/qemuxml2argvdata/async-teardown.xml | 31 +++++++++++++ ...0-async-teardown-disabled.s390x-6.0.0.args | 35 +++++++++++++++ ...-async-teardown-disabled.s390x-latest.args | 36 +++++++++++++++ .../s390-async-teardown-disabled.xml | 24 ++++++++++ ...async-teardown-no-attrib.s390x-latest.args | 36 +++++++++++++++ .../s390-async-teardown-no-attrib.xml | 24 ++++++++++ .../s390-async-teardown.s390x-6.0.0.err | 1 + .../s390-async-teardown.s390x-latest.args | 36 +++++++++++++++ .../qemuxml2argvdata/s390-async-teardown.xml | 24 ++++++++++ tests/qemuxml2argvtest.c | 7 +++ .../async-teardown.x86_64-latest.xml | 44 +++++++++++++++++++ ...90-async-teardown-disabled.s390x-6.0.0.xml | 36 +++++++++++++++ ...0-async-teardown-disabled.s390x-latest.xml | 36 +++++++++++++++ ...-async-teardown-no-attrib.s390x-latest.xml | 36 +++++++++++++++ .../s390-async-teardown.s390x-latest.xml | 36 +++++++++++++++ tests/qemuxml2xmltest.c | 6 +++ 23 files changed, 552 insertions(+) create mode 100644 tests/qemuxml2argvdata/async-teardown.x86_64-latest.args create mode 100644 tests/qemuxml2argvdata/async-teardown.xml create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-6.0.0.args create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-disabled.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-disabled.xml create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-no-attrib.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-async-teardown-no-attrib.xml create mode 100644 tests/qemuxml2argvdata/s390-async-teardown.s390x-6.0.0.err create mode 100644 tests/qemuxml2argvdata/s390-async-teardown.s390x-latest.args create mode 100644 tests/qemuxml2argvdata/s390-async-teardown.xml create mode 100644 tests/qemuxml2xmloutdata/async-teardown.x86_64-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-6.0.0.xml create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown-disabled.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown-no-attrib.s390x-latest.xml create mode 100644 tests/qemuxml2xmloutdata/s390-async-teardown.s390x-latest.xml diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index f29449f749..98273c87ad 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -2000,6 +2000,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off. <tcg> <tb-cache unit='MiB'>128</tb-cache> </tcg> + <async-teardown enabled='yes'/> </features> ...@@ -2230,6 +2231,11 @@ are:tb-cache The size of translation block cache size an integer (a multiple of MiB) :since:`8.0.0` =========== ============================================== =================================================== ==============+``async-teardown``+ Depending on the ``enabled`` attribute (values ``yes``, ``no``) enable or + disable QEMU asynchronous teardown to improve memory reclaiming on a guest. + :since:`Since 9.5.0` (QEMU only)Unfortunately, this has missed 9.5.0 timeframe.
I missed that before sending v3. Thanks for catching and fixing it.
+ Time keeping ------------diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.cindex 4121b6a054..5ac5c0b771 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -181,6 +181,7 @@ VIR_ENUM_IMPL(virDomainFeature, "sbbc", "ibs", "tcg", + "async-teardown", );VIR_ENUM_IMPL(virDomainCapabilitiesPolicy,@@ -16689,6 +16690,20 @@ virDomainFeaturesDefParse(virDomainDef *def, return -1; break;+ case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN: {+ virTristateBool enabled; + + if (virXMLPropTristateBool(nodes[i], "enabled", + VIR_XML_PROP_NONE, &enabled) < 0) + return -1; + + if (enabled == VIR_TRISTATE_BOOL_ABSENT) + enabled = VIR_TRISTATE_BOOL_YES; + + def->features[val] = enabled; + break; + } + case VIR_DOMAIN_FEATURE_LAST: break; } @@ -20628,6 +20643,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,case VIR_DOMAIN_FEATURE_MSRS:case VIR_DOMAIN_FEATURE_TCG: + case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN: case VIR_DOMAIN_FEATURE_LAST: break; } @@ -27340,6 +27356,12 @@ virDomainDefFormatFeatures(virBuffer *buf, virDomainFeatureTCGFormat(&childBuf, def); break;+ case VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN:+ if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT) + virBufferAsprintf(&childBuf, "<async-teardown enabled='%s'/>\n", + virTristateBoolTypeToString(def->features[i])); + break; + case VIR_DOMAIN_FEATURE_LAST: break; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index cddaa3824d..c857ba556f 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2170,6 +2170,7 @@ typedef enum { VIR_DOMAIN_FEATURE_SBBC, VIR_DOMAIN_FEATURE_IBS, VIR_DOMAIN_FEATURE_TCG, + VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN,VIR_DOMAIN_FEATURE_LAST} virDomainFeature; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index fcf9e00600..c2f56b0490 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -6660,6 +6660,15 @@ <optional> <ref name="tcgfeatures"/> </optional> + <optional> + <element name="async-teardown"> + <optional> + <attribute name="enabled"> + <ref name="virYesNo"/> + </attribute> + </optional> + </element> + </optional> </interleave> </element> </optional> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index cde6ab4dde..3d386e1738 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10175,6 +10175,23 @@ qemuBuildCryptoCommandLine(virCommand *cmd, }+static int+qemuBuildAsyncTeardownCommandLine(virCommand *cmd, + const virDomainDef *def, + virQEMUCaps *qemuCaps) +{ + g_autofree char *async = NULL; + + if (def->features[VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN] != VIR_TRISTATE_BOOL_ABSENT &&For this ^^+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_RUN_WITH_ASYNC_TEARDOWN)) { + async = g_strdup_printf("async-teardown=%s", + virTristateSwitchTypeToString(def->features[VIR_DOMAIN_FEATURE_ASYNC_TEARDOWN]));and this ^^ let me use a variable. It's going to be more readable that way.
Ok, that shortens the lines a bit. Thanks.
+ virCommandAddArgList(cmd, "-run-with", async, NULL); + } + return 0; +}Michal
Thanks, Michal -- Mit freundlichen Grüßen/Kind regards Boris Fiuczynski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Gregor Pillen Geschäftsführung: David Faller Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294