[PATCH RFC v3 13/16] qemuxmlconftest: Add 'throttlefilter' tests

wucf@linux.ibm.com posted 16 patches 3 months ago
There is a newer version of this series
[PATCH RFC v3 13/16] qemuxmlconftest: Add 'throttlefilter' tests
Posted by wucf@linux.ibm.com 3 months ago
From: Chun Feng Wu <wucf@linux.ibm.com>

* Add tests for "throttlegroup"
* Add tests for "throttlefilter"

Signed-off-by: Chun Feng Wu <wucf@linux.ibm.com>
---
 .../throttlefilter.x86_64-latest.args         | 43 ++++++++++++
 .../throttlefilter.x86_64-latest.xml          | 65 +++++++++++++++++++
 tests/qemuxmlconfdata/throttlefilter.xml      | 55 ++++++++++++++++
 tests/qemuxmlconftest.c                       |  1 +
 4 files changed, 164 insertions(+)
 create mode 100644 tests/qemuxmlconfdata/throttlefilter.x86_64-latest.args
 create mode 100644 tests/qemuxmlconfdata/throttlefilter.x86_64-latest.xml
 create mode 100644 tests/qemuxmlconfdata/throttlefilter.xml

diff --git a/tests/qemuxmlconfdata/throttlefilter.x86_64-latest.args b/tests/qemuxmlconfdata/throttlefilter.x86_64-latest.args
new file mode 100644
index 0000000000..ed3f0145df
--- /dev/null
+++ b/tests/qemuxmlconfdata/throttlefilter.x86_64-latest.args
@@ -0,0 +1,43 @@
+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 \
+-object '{"qom-type":"throttle-group","id":"limit0","limits":{"bps-total":5000,"iops-total":6000}}' \
+-object '{"qom-type":"throttle-group","id":"limit1","limits":{"bps-read":5000,"bps-write":5000,"iops-total":7000}}' \
+-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":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-3-storage","auto-read-only":true,"discard":"unmap","cache":{"direct":true,"no-flush":false}}' \
+-blockdev '{"node-name":"libvirt-3-format","read-only":false,"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":"libvirt-3-storage"}' \
+-blockdev '{"driver":"throttle","node-name":"libvirt-4-filter","throttle-group":"limit0","file":"libvirt-3-format"}' \
+-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-4-filter","id":"ide0-0-0","bootindex":1,"write-cache":"on"}' \
+-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest2","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap","cache":{"direct":true,"no-flush":false}}' \
+-blockdev '{"node-name":"libvirt-1-format","read-only":false,"cache":{"direct":true,"no-flush":false},"driver":"qcow2","file":"libvirt-1-storage"}' \
+-blockdev '{"driver":"throttle","node-name":"libvirt-2-filter","throttle-group":"limit1","file":"libvirt-1-format"}' \
+-device '{"driver":"ide-hd","bus":"ide.0","unit":1,"drive":"libvirt-2-filter","id":"ide0-0-1","write-cache":"on"}' \
+-audiodev '{"id":"audio1","driver":"none"}' \
+-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+-msg timestamp=on
diff --git a/tests/qemuxmlconfdata/throttlefilter.x86_64-latest.xml b/tests/qemuxmlconfdata/throttlefilter.x86_64-latest.xml
new file mode 100644
index 0000000000..c4c9602ff2
--- /dev/null
+++ b/tests/qemuxmlconfdata/throttlefilter.x86_64-latest.xml
@@ -0,0 +1,65 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219100</memory>
+  <currentMemory unit='KiB'>219100</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <throttlegroups>
+    <throttlegroup>
+      <total_bytes_sec>5000</total_bytes_sec>
+      <total_iops_sec>6000</total_iops_sec>
+      <group_name>limit0</group_name>
+    </throttlegroup>
+    <throttlegroup>
+      <read_bytes_sec>5000</read_bytes_sec>
+      <write_bytes_sec>5000</write_bytes_sec>
+      <total_iops_sec>7000</total_iops_sec>
+      <group_name>limit1</group_name>
+    </throttlegroup>
+  </throttlegroups>
+  <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='block' device='disk'>
+      <driver name='qemu' type='qcow2' cache='none'/>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <throttlefilters>
+        <throttlefilter group='limit0'/>
+      </throttlefilters>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <disk type='block' device='disk'>
+      <driver name='qemu' type='qcow2' cache='none'/>
+      <source dev='/dev/HostVG/QEMUGuest2'/>
+      <target dev='hdb' bus='ide'/>
+      <throttlefilters>
+        <throttlefilter group='limit1'/>
+      </throttlefilters>
+      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
+    </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='virtio'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
+    </memballoon>
+  </devices>
+</domain>
diff --git a/tests/qemuxmlconfdata/throttlefilter.xml b/tests/qemuxmlconfdata/throttlefilter.xml
new file mode 100644
index 0000000000..10b7d1c01b
--- /dev/null
+++ b/tests/qemuxmlconfdata/throttlefilter.xml
@@ -0,0 +1,55 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219100</memory>
+  <currentMemory unit='KiB'>219100</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <throttlegroups>
+    <throttlegroup>
+      <total_bytes_sec>5000</total_bytes_sec>
+      <total_iops_sec>6000</total_iops_sec>
+      <group_name>limit0</group_name>
+    </throttlegroup>
+    <throttlegroup>
+      <read_bytes_sec>5000</read_bytes_sec>
+      <write_bytes_sec>5000</write_bytes_sec>
+      <total_iops_sec>7000</total_iops_sec>
+      <group_name>limit1</group_name>
+    </throttlegroup>
+  </throttlegroups>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <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='block' device='disk'>
+      <driver name='qemu' type='qcow2' cache='none'/>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='hda' bus='ide'/>
+      <throttlefilters>
+        <throttlefilter group='limit0'/>
+      </throttlefilters>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <disk type='block' device='disk'>
+      <driver name='qemu' type='qcow2' cache='none'/>
+      <source dev='/dev/HostVG/QEMUGuest2'/>
+      <target dev='hdb' bus='ide'/>
+      <throttlefilters>
+        <throttlefilter group='limit1'/>
+      </throttlefilters>
+      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
+    </disk>
+    <controller type='usb' index='0'/>
+    <controller type='ide' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <input type='mouse' bus='ps2'/>
+    <input type='keyboard' bus='ps2'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index d2f62081b7..7ac83b3fd9 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -2324,6 +2324,7 @@ mymain(void)
     DO_TEST_CAPS_LATEST("blkdeviotune-max");
     DO_TEST_CAPS_LATEST("blkdeviotune-group-num");
     DO_TEST_CAPS_LATEST("blkdeviotune-max-length");
+    DO_TEST_CAPS_LATEST("throttlefilter");
 
     DO_TEST_CAPS_LATEST("multifunction-pci-device");
 
-- 
2.34.1
Re: [PATCH RFC v3 13/16] qemuxmlconftest: Add 'throttlefilter' tests
Posted by Peter Krempa 1 month, 1 week ago
On Wed, Jun 12, 2024 at 03:02:21 -0700, wucf@linux.ibm.com wrote:
> From: Chun Feng Wu <wucf@linux.ibm.com>
> 
> * Add tests for "throttlegroup"
> * Add tests for "throttlefilter"
> 
> Signed-off-by: Chun Feng Wu <wucf@linux.ibm.com>
> ---
>  .../throttlefilter.x86_64-latest.args         | 43 ++++++++++++
>  .../throttlefilter.x86_64-latest.xml          | 65 +++++++++++++++++++
>  tests/qemuxmlconfdata/throttlefilter.xml      | 55 ++++++++++++++++
>  tests/qemuxmlconftest.c                       |  1 +
>  4 files changed, 164 insertions(+)
>  create mode 100644 tests/qemuxmlconfdata/throttlefilter.x86_64-latest.args
>  create mode 100644 tests/qemuxmlconfdata/throttlefilter.x86_64-latest.xml
>  create mode 100644 tests/qemuxmlconfdata/throttlefilter.xml

[...]

> diff --git a/tests/qemuxmlconfdata/throttlefilter.xml b/tests/qemuxmlconfdata/throttlefilter.xml
> new file mode 100644
> index 0000000000..10b7d1c01b
> --- /dev/null
> +++ b/tests/qemuxmlconfdata/throttlefilter.xml
> @@ -0,0 +1,55 @@
> +<domain type='qemu'>
> +  <name>QEMUGuest1</name>
> +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> +  <memory unit='KiB'>219100</memory>
> +  <currentMemory unit='KiB'>219100</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <throttlegroups>
> +    <throttlegroup>
> +      <total_bytes_sec>5000</total_bytes_sec>
> +      <total_iops_sec>6000</total_iops_sec>
> +      <group_name>limit0</group_name>
> +    </throttlegroup>
> +    <throttlegroup>
> +      <read_bytes_sec>5000</read_bytes_sec>
> +      <write_bytes_sec>5000</write_bytes_sec>
> +      <total_iops_sec>7000</total_iops_sec>
> +      <group_name>limit1</group_name>
> +    </throttlegroup>
> +  </throttlegroups>
> +  <os>
> +    <type arch='x86_64' machine='pc'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <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='block' device='disk'>
> +      <driver name='qemu' type='qcow2' cache='none'/>
> +      <source dev='/dev/HostVG/QEMUGuest1'/>
> +      <target dev='hda' bus='ide'/>
> +      <throttlefilters>
> +        <throttlefilter group='limit0'/>
> +      </throttlefilters>
> +      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
> +    </disk>
> +    <disk type='block' device='disk'>
> +      <driver name='qemu' type='qcow2' cache='none'/>
> +      <source dev='/dev/HostVG/QEMUGuest2'/>
> +      <target dev='hdb' bus='ide'/>
> +      <throttlefilters>
> +        <throttlefilter group='limit1'/>

Please add also one more complex example of a disk referencing multiple
groups. Otherwise this'd be identical to what we already support.

For completness you can also add one group that is not used by any disk.

> +      </throttlefilters>
> +      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
> +    </disk>
> +    <controller type='usb' index='0'/>
> +    <controller type='ide' index='0'/>
> +    <controller type='pci' index='0' model='pci-root'/>
> +    <input type='mouse' bus='ps2'/>
> +    <input type='keyboard' bus='ps2'/>
> +    <memballoon model='virtio'/>
> +  </devices>
> +</domain>

I also expect at least one negative test case showing how the mixing of
throttling via groups and directly you explicitly forbid is handled so
that we don't regress in that regard.