[virt-manager] [PATCH 2/2] cli: Add support for --defaultiothread

Lin Ma lma at suse.com
Fri Jul 29 11:16:06 UTC 2022


It allows to set the thread pool size to optimize spawning worker threads
for the default event loop in real time environment. For example:

--defaultiothread thread_pool_min=8,thread_pool_max=16

Signed-off-by: Lin Ma <lma at suse.com>
---
 man/virt-install.rst                          | 15 ++++++++++++
 man/virt-xml.rst                              |  1 +
 .../cli/compare/virt-install-many-devices.xml |  1 +
 tests/test_cli.py                             |  3 +++
 virtinst/cli.py                               | 23 +++++++++++++++++++
 virtinst/guest.py                             | 11 ++++++++-
 6 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/man/virt-install.rst b/man/virt-install.rst
index 3a6e8dcd..21cf6b10 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -498,6 +498,21 @@ Complete details at https://libvirt.org/formatdomain.html#elementsIOThreadsAlloc
 
 
 
+``--defaultiothread``
+^^^^^^^^^^^^^^^^^^^^^
+
+**Syntax:** ``--defaultiothread`` OPTIONS
+
+Set the lower and upper boundary for number of worker threads of the default
+event loop for the domain process. Example:
+
+``--defaultiothread thread_pool_min=8,thread_pool_max=16``
+
+Use --defaultiothread=? to see a list of all available sub options.
+Complete details at https://libvirt.org/formatdomain.html#elementsIOThreadsAllocation
+
+
+
 ``--features``
 ^^^^^^^^^^^^^^
 
diff --git a/man/virt-xml.rst b/man/virt-xml.rst
index ddd586bb..bcd4ae97 100644
--- a/man/virt-xml.rst
+++ b/man/virt-xml.rst
@@ -208,6 +208,7 @@ XML OPTIONS
 * ``--vcpus``
 * ``--cpu``
 * ``--iothreads``
+* ``--defaultiothread``
 * ``--seclabel``
 * ``--keywrap``
 * ``--cputune``
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 87d48812..9826aecd 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -14,6 +14,7 @@
     <iothread id="1"/>
     <iothread id="2" thread_pool_min="8" thread_pool_max="16"/>
   </iothreadids>
+  <defaultiothread thread_pool_min="4" thread_pool_max="32"/>
   <memory>65536</memory>
   <currentMemory>65536</currentMemory>
   <blkiotune>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index ba7818bf..94dd702e 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -548,6 +548,9 @@ memorytune0.vcpus=0-3,memorytune0.node0.id=0,memorytune0.node0.bandwidth=60
 --iothreads iothreads=5,iothreadids.iothread0.id=1,iothreadids.iothread1.id=2,iothreadids.iothread1.thread_pool_min=8,iothreadids.iothread1.thread_pool_max=16
 
 
+--defaultiothread thread_pool_min=4,thread_pool_max=32
+
+
 --metadata title=my-title,description=my-description,uuid=00000000-1111-2222-3333-444444444444,genid=e9392370-2917-565e-692b-d057f46512d6,genid_enable=yes
 
 
diff --git a/virtinst/cli.py b/virtinst/cli.py
index fadf216e..2b0f9fec 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -832,6 +832,12 @@ def add_guest_xml_options(geng):
     geng.add_argument("--iothreads", action="append",
         help=_("Set domain <iothreads> and <iothreadids> configuration."))
 
+    ParserDefaultIOThread.register()
+    geng.add_argument("--defaultiothread", action="append",
+        help=_("Set the lower and upper boundary for number of worker\n"
+               "threads of the default event loop for the domain process. Ex:\n"
+               "--defaultiothread thread_pool_min=8,thread_pool_max=16"))
+
     ParserSeclabel.register()
     geng.add_argument("--seclabel", "--security", action="append",
         help=_("Set domain seclabel configuration."))
@@ -2620,6 +2626,23 @@ class ParserIOThreads(VirtCLIParser):
                     "thread_pool_max", find_inst_cb=cls.iothreads_find_inst_cb)
 
 
+#############################
+# --defaultiothread parsing #
+#############################
+
+class ParserDefaultIOThread(VirtCLIParser):
+    cli_arg_name = "defaultiothread"
+    guest_propname = "defaultiothread"
+    remove_first = "defaultiothread"
+
+    @classmethod
+    def _virtcli_class_init(cls):
+        VirtCLIParser._virtcli_class_init_common(cls)
+
+        cls.add_arg("thread_pool_min", "thread_pool_min")
+        cls.add_arg("thread_pool_max", "thread_pool_max")
+
+
 ###################
 # --vcpus parsing #
 ###################
diff --git a/virtinst/guest.py b/virtinst/guest.py
index be9f0267..0b48ff7b 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -74,6 +74,13 @@ class _IOThreadID(XMLBuilder):
     thread_pool_max = XMLProperty("./@thread_pool_max", is_int=True)
 
 
+class _DefaultIOThread(XMLBuilder):
+    XML_NAME = "defaultiothread"
+
+    thread_pool_min = XMLProperty("./@thread_pool_min", is_int=True)
+    thread_pool_max = XMLProperty("./@thread_pool_max", is_int=True)
+
+
 class Guest(XMLBuilder):
     @staticmethod
     def validate_name(conn, name, check_collision=True, validate=True):
@@ -180,7 +187,8 @@ class Guest(XMLBuilder):
     XML_NAME = "domain"
     _XML_PROP_ORDER = [
         "type", "name", "uuid", "genid", "genid_enable",
-        "title", "description", "_metadata", "iothreads", "iothreadids",
+        "title", "description", "_metadata",
+        "iothreads", "iothreadids", "defaultiothread",
         "maxMemory", "maxMemorySlots", "memory", "_currentMemory",
         "blkiotune", "memtune", "memoryBacking",
         "_vcpus", "vcpu_current", "vcpu_placement",
@@ -226,6 +234,7 @@ class Guest(XMLBuilder):
 
     iothreads = XMLProperty("./iothreads", is_int=True)
     iothreadids = XMLChildProperty(_IOThreadID, relative_xpath="./iothreadids")
+    defaultiothread = XMLChildProperty(_DefaultIOThread)
 
     def _set_currentMemory(self, val):
         if val is not None:
-- 
2.26.2



More information about the virt-tools-list mailing list