On Wed, Jun 12, 2024 at 03:02:10 -0700, wucf(a)linux.ibm.com wrote:
From: Chun Feng Wu <wucf(a)linux.ibm.com>
* Add new elements '<throttlefilters>'
* <ThrottleFilters> can include multiple throttlegroup references to form filter
chain in qemu
* Chained throttle filters feature in qemu is described at
https://github.com/qemu/qemu/blob/master/docs/throttle.txt
Signed-off-by: Chun Feng Wu <wucf(a)linux.ibm.com>
---
docs/formatdomain.rst | 22 ++++++++++++++++++++++
src/conf/schemas/domaincommon.rng | 19 ++++++++++++++++++-
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
index b7e1f9cc83..0fa8f1267c 100644
--- a/docs/formatdomain.rst
+++ b/docs/formatdomain.rst
@@ -2736,6 +2736,15 @@ paravirtualized driver is specified via the ``disk`` element.
<source dev='/dev/vhost-vdpa-0' />
<target dev='vdg' bus='virtio'/>
</disk>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='qcow2' />
+ <source file='/var/lib/libvirt/images/disk.qcow2'/>
+ <target dev='vdh' bus='virtio'/>
+ <throttlefilters>
+ <throttlefilter group='limit2'/>
+ <throttlefilter group='limit012'/>
+ </throttlefilters>
+ </disk>
</devices>
...
@@ -3217,6 +3226,19 @@ paravirtualized driver is specified via the ``disk`` element.
:since:`since after 0.4.4`; "sata" attribute value :since:`since 0.9.7`;
"removable" attribute value :since:`since 1.1.3`;
"rotation_rate" attribute value :since:`since 7.3.0`
+``throttlefilters``
+ The optional ``throttlefilters`` element provides the ability to provide additional
+ per-device throttle chain :since:`Since 10.5.0`
+ For example, if we have four different disks and we want to limit I/O for each one
+ and we also want to limit combined I/O of all four disks, we can leverage
+ ``throttlefilters`` to achieve this goal by setting two ``throttlefilter`` for
+ each disk: disk's own filter(e.g. limit2) and combined filter(e.g. limit012).
+ The nodes in qemu shape a chain like libvirt-4-filter(node name
of "limit012") ->
+ libvirt-3-filter(node name of "limit2") -> libvirt-2-format ->
libvirt-1-storage.
+ ``throttlefilters`` and ``iotune`` should be used exclusively.
Node names are a qemu driver internal implementation detail and thus
must not be noted in documentation.
+
+ ``throttlefilter``
+ The optional ``throttlefilter`` element is to reference defined throttle group.
``iotune``
The optional ``iotune`` element provides the ability to provide additional
per-device I/O tuning, with values that can vary for each device (contrast
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index 08c520e222..7ceb8c0be2 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -1578,7 +1578,10 @@
<ref name="encryption"/>
</optional>
<optional>
- <ref name="diskIoTune"/>
+ <choice>
+ <ref name="throttlefilters"/>
+ <ref name="diskIoTune"/>
+ </choice>
</optional>
<optional>
<ref name="alias"/>
@@ -6671,6 +6674,20 @@
</element>
</optional>
</define>
+ <!--
+ A set of throttlefilters to reference throttlegroups
+ -->
+ <define name="throttlefilters">
+ <element name="throttlefilters">
+ <zeroOrMore>
+ <element name="throttlefilter">
+ <attribute name="group">
+ <data type="string"/>
+ </attribute>
+ </element>
+ </zeroOrMore>
+ </element>
+ </define>
<!--
A set of optional features: PAE, APIC, ACPI, GIC, TCG,
HyperV Enlightenment, KVM features, paravirtual spinlocks and HAP support
--
2.34.1