From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
dirty ring feature was introduced in qemu-6.1, this patch add
corresponding feature named 'dirty-ring', which enable
dirty ring feature when starting vm.
to enable the feature, libvirt add "-accel dirty-ring-size=xxx"
to QEMU command line, the following XML needs to be added to
the guest's domain description:
<features>
<kvm>
<dirty-ring state='on' size='xxx'>
</kvm>
</features>
if property "state=on" but property "size" not be configured, set
default ring size with 4096.
since dirty ring can only be enabled by specifying "-accel" option
and do not support the legacy style, it seems that there's no
other way to work around this, so we use "-accel" option to specify
accelerator instead of "-machine" when building qemu commandline.
details about the qemu "-accel" option:
https://lore.kernel.org/qemu-devel/3aa73987-40e8-3619-0723-9f17f73850bd@redhat.com/
Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
---
docs/formatdomain.rst | 18 ++++++++++--------
docs/schemas/domaincommon.rng | 10 ++++++++++
src/qemu/qemu_command.c | 6 ++++++
3 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index eb8c973cf1..ea69b61c70 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -1843,6 +1843,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
<hint-dedicated state='on'/>
<poll-control state='on'/>
<pv-ipi state='off'/>
+ <dirty-ring state='on' size='4096'/>
</kvm>
<xen>
<e820_host state='on'/>
@@ -1925,14 +1926,15 @@ are:
``kvm``
Various features to change the behavior of the KVM hypervisor.
- ============== ============================================================================ ======= ============================
- Feature Description Value Since
- ============== ============================================================================ ======= ============================
- hidden Hide the KVM hypervisor from standard MSR based discovery on, off :since:`1.2.8 (QEMU 2.1.0)`
- hint-dedicated Allows a guest to enable optimizations when running on dedicated vCPUs on, off :since:`5.7.0 (QEMU 2.12.0)`
- poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
- pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
- ============== ============================================================================ ======= ============================
+ ============== ============================================================================ ====================================================== ============================
+ Feature Description Value Since
+ ============== ============================================================================ ====================================================== ============================
+ hidden Hide the KVM hypervisor from standard MSR based discovery on, off :since:`1.2.8 (QEMU 2.1.0)`
+ hint-dedicated Allows a guest to enable optimizations when running on dedicated vCPUs on, off :since:`5.7.0 (QEMU 2.12.0)`
+ poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
+ pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
+ dirty-ring Enable dirty ring feature on, off; size - must be power of 2, range [1024,65536] :since:`7.10.0 (QEMU 6.1)`
+ ============== ============================================================================ ====================================================== ============================
``xen``
Various features to change the behavior of the Xen hypervisor.
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index f01b7a6470..5f9fe3cc58 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -7212,6 +7212,16 @@
<ref name="featurestate"/>
</element>
</optional>
+ <optional>
+ <element name="dirty-ring">
+ <ref name="featurestate"/>
+ <optional>
+ <attribute name="size">
+ <data type="unsignedInt"/>
+ </attribute>
+ </optional>
+ </element>
+ </optional>
</interleave>
</element>
</define>
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 145596d11a..863876bfae 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -7043,6 +7043,12 @@ qemuBuildAccelCommandLineKvmOptions(virCommand *cmd,
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
virCommandAddArg(cmd, "-accel");
virBufferAddLit(&buf, "kvm");
+
+ if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON &&
+ def->kvm_features[VIR_DOMAIN_KVM_DIRTY_RING] == VIR_TRISTATE_SWITCH_ON) {
+ virBufferAsprintf(&buf, ",dirty-ring-size=%d", def->dirty_ring_size);
+ }
+
virCommandAddArgBuffer(cmd, &buf);
}
}
--
2.27.0
On Sat, Nov 20, 2021 at 03:20:48 -0500, huangy81@chinatelecom.cn wrote:
> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>
> dirty ring feature was introduced in qemu-6.1, this patch add
> corresponding feature named 'dirty-ring', which enable
> dirty ring feature when starting vm.
>
> to enable the feature, libvirt add "-accel dirty-ring-size=xxx"
> to QEMU command line, the following XML needs to be added to
> the guest's domain description:
>
> <features>
> <kvm>
> <dirty-ring state='on' size='xxx'>
> </kvm>
> </features>
>
> if property "state=on" but property "size" not be configured, set
> default ring size with 4096.
>
> since dirty ring can only be enabled by specifying "-accel" option
> and do not support the legacy style, it seems that there's no
> other way to work around this, so we use "-accel" option to specify
> accelerator instead of "-machine" when building qemu commandline.
>
> details about the qemu "-accel" option:
> https://lore.kernel.org/qemu-devel/3aa73987-40e8-3619-0723-9f17f73850bd@redhat.com/
>
> Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
> ---
> docs/formatdomain.rst | 18 ++++++++++--------
> docs/schemas/domaincommon.rng | 10 ++++++++++
> src/qemu/qemu_command.c | 6 ++++++
> 3 files changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
> index eb8c973cf1..ea69b61c70 100644
> --- a/docs/formatdomain.rst
> +++ b/docs/formatdomain.rst
> @@ -1843,6 +1843,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
> <hint-dedicated state='on'/>
> <poll-control state='on'/>
> <pv-ipi state='off'/>
> + <dirty-ring state='on' size='4096'/>
> </kvm>
> <xen>
> <e820_host state='on'/>
> @@ -1925,14 +1926,15 @@ are:
> ``kvm``
> Various features to change the behavior of the KVM hypervisor.
>
> - ============== ============================================================================ ======= ============================
> - Feature Description Value Since
> - ============== ============================================================================ ======= ============================
> - hidden Hide the KVM hypervisor from standard MSR based discovery on, off :since:`1.2.8 (QEMU 2.1.0)`
> - hint-dedicated Allows a guest to enable optimizations when running on dedicated vCPUs on, off :since:`5.7.0 (QEMU 2.12.0)`
> - poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
> - pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
> - ============== ============================================================================ ======= ============================
> + ============== ============================================================================ ====================================================== ============================
> + Feature Description Value Since
> + ============== ============================================================================ ====================================================== ============================
> + hidden Hide the KVM hypervisor from standard MSR based discovery on, off :since:`1.2.8 (QEMU 2.1.0)`
> + hint-dedicated Allows a guest to enable optimizations when running on dedicated vCPUs on, off :since:`5.7.0 (QEMU 2.12.0)`
> + poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
> + pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
> + dirty-ring Enable dirty ring feature on, off; size - must be power of 2, range [1024,65536] :since:`7.10.0 (QEMU 6.1)`
> + ============== ============================================================================ ====================================================== ============================
>
> ``xen``
> Various features to change the behavior of the Xen hypervisor.
Okay, so both hunks belong actually to the previous commit.
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index f01b7a6470..5f9fe3cc58 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -7212,6 +7212,16 @@
> <ref name="featurestate"/>
> </element>
> </optional>
> + <optional>
> + <element name="dirty-ring">
> + <ref name="featurestate"/>
> + <optional>
> + <attribute name="size">
> + <data type="unsignedInt"/>
> + </attribute>
> + </optional>
> + </element>
> + </optional>
> </interleave>
> </element>
> </define>
And this one too.
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 145596d11a..863876bfae 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -7043,6 +7043,12 @@ qemuBuildAccelCommandLineKvmOptions(virCommand *cmd,
> g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
> virCommandAddArg(cmd, "-accel");
> virBufferAddLit(&buf, "kvm");
> +
> + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON &&
> + def->kvm_features[VIR_DOMAIN_KVM_DIRTY_RING] == VIR_TRISTATE_SWITCH_ON) {
> + virBufferAsprintf(&buf, ",dirty-ring-size=%d", def->dirty_ring_size);
> + }
> +
> virCommandAddArgBuffer(cmd, &buf);
> }
> }
A test case is needed both for qemuxml2argvtest and qemuxml2xmltest.
在 2021/11/22 16:55, Peter Krempa 写道:
> On Sat, Nov 20, 2021 at 03:20:48 -0500, huangy81@chinatelecom.cn wrote:
>> From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>>
>> dirty ring feature was introduced in qemu-6.1, this patch add
>> corresponding feature named 'dirty-ring', which enable
>> dirty ring feature when starting vm.
>>
>> to enable the feature, libvirt add "-accel dirty-ring-size=xxx"
>> to QEMU command line, the following XML needs to be added to
>> the guest's domain description:
>>
>> <features>
>> <kvm>
>> <dirty-ring state='on' size='xxx'>
>> </kvm>
>> </features>
>>
>> if property "state=on" but property "size" not be configured, set
>> default ring size with 4096.
>>
>> since dirty ring can only be enabled by specifying "-accel" option
>> and do not support the legacy style, it seems that there's no
>> other way to work around this, so we use "-accel" option to specify
>> accelerator instead of "-machine" when building qemu commandline.
>>
>> details about the qemu "-accel" option:
>> https://lore.kernel.org/qemu-devel/3aa73987-40e8-3619-0723-9f17f73850bd@redhat.com/
>>
>> Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
>> ---
>> docs/formatdomain.rst | 18 ++++++++++--------
>> docs/schemas/domaincommon.rng | 10 ++++++++++
>> src/qemu/qemu_command.c | 6 ++++++
>> 3 files changed, 26 insertions(+), 8 deletions(-)
>>
>> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
>> index eb8c973cf1..ea69b61c70 100644
>> --- a/docs/formatdomain.rst
>> +++ b/docs/formatdomain.rst
>> @@ -1843,6 +1843,7 @@ Hypervisors may allow certain CPU / machine features to be toggled on/off.
>> <hint-dedicated state='on'/>
>> <poll-control state='on'/>
>> <pv-ipi state='off'/>
>> + <dirty-ring state='on' size='4096'/>
>> </kvm>
>> <xen>
>> <e820_host state='on'/>
>> @@ -1925,14 +1926,15 @@ are:
>> ``kvm``
>> Various features to change the behavior of the KVM hypervisor.
>>
>> - ============== ============================================================================ ======= ============================
>> - Feature Description Value Since
>> - ============== ============================================================================ ======= ============================
>> - hidden Hide the KVM hypervisor from standard MSR based discovery on, off :since:`1.2.8 (QEMU 2.1.0)`
>> - hint-dedicated Allows a guest to enable optimizations when running on dedicated vCPUs on, off :since:`5.7.0 (QEMU 2.12.0)`
>> - poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
>> - pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
>> - ============== ============================================================================ ======= ============================
>> + ============== ============================================================================ ====================================================== ============================
>> + Feature Description Value Since
>> + ============== ============================================================================ ====================================================== ============================
>> + hidden Hide the KVM hypervisor from standard MSR based discovery on, off :since:`1.2.8 (QEMU 2.1.0)`
>> + hint-dedicated Allows a guest to enable optimizations when running on dedicated vCPUs on, off :since:`5.7.0 (QEMU 2.12.0)`
>> + poll-control Decrease IO completion latency by introducing a grace period of busy waiting on, off :since:`6.10.0 (QEMU 4.2)`
>> + pv-ipi Paravirtualized send IPIs on, off :since:`7.10.0 (QEMU 3.1)`
>> + dirty-ring Enable dirty ring feature on, off; size - must be power of 2, range [1024,65536] :since:`7.10.0 (QEMU 6.1)`
>> + ============== ============================================================================ ====================================================== ============================
>>
>> ``xen``
>> Various features to change the behavior of the Xen hypervisor.
>
> Okay, so both hunks belong actually to the previous commit.
>
>> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
>> index f01b7a6470..5f9fe3cc58 100644
>> --- a/docs/schemas/domaincommon.rng
>> +++ b/docs/schemas/domaincommon.rng
>> @@ -7212,6 +7212,16 @@
>> <ref name="featurestate"/>
>> </element>
>> </optional>
>> + <optional>
>> + <element name="dirty-ring">
>> + <ref name="featurestate"/>
>> + <optional>
>> + <attribute name="size">
>> + <data type="unsignedInt"/>
>> + </attribute>
>> + </optional>
>> + </element>
>> + </optional>
>> </interleave>
>> </element>
>> </define>
>
> And this one too.
>
Ok, i'll squash into the previous commit
>> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>> index 145596d11a..863876bfae 100644
>> --- a/src/qemu/qemu_command.c
>> +++ b/src/qemu/qemu_command.c
>> @@ -7043,6 +7043,12 @@ qemuBuildAccelCommandLineKvmOptions(virCommand *cmd,
>> g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
>> virCommandAddArg(cmd, "-accel");
>> virBufferAddLit(&buf, "kvm");
>> +
>> + if (def->features[VIR_DOMAIN_FEATURE_KVM] == VIR_TRISTATE_SWITCH_ON &&
>> + def->kvm_features[VIR_DOMAIN_KVM_DIRTY_RING] == VIR_TRISTATE_SWITCH_ON) {
>> + virBufferAsprintf(&buf, ",dirty-ring-size=%d", def->dirty_ring_size);
>> + }
>> +
>> virCommandAddArgBuffer(cmd, &buf);
>> }
>> }
>
> A test case is needed both for qemuxml2argvtest and qemuxml2xmltest.
>
Ok, i'll add a commit for test case implementation
© 2016 - 2026 Red Hat, Inc.