[virt-tools-list] [virt-manager PATCH V2] virt-install: add param cache.mode and cache.level for option '--cpu'

Lin Ma lma at suse.com
Thu Sep 14 04:09:27 UTC 2017


libvirt supports guest CPU cache by commit df13c0b, So add this feature
to virt-install to configure cpu L3 cache mode.

Currently, The valid values are 'passthrough', 'emulate' or 'disable'.
say:
  --cpu host-passthrough,cache.mode=passthrough
or
  --cpu $CPU,cache.mode=emulate,cache.level=3
or
  --cpu $CPU,cache.mode=disable

Signed-off-by: Lin Ma <lma at suse.com>
---
 man/virt-install.pod                                   |  4 ++++
 .../compare/virt-install-singleton-config-2.xml        |  2 ++
 tests/clitest.py                                       |  2 +-
 virtinst/cli.py                                        | 16 ++++++++++++++++
 virtinst/cpu.py                                        | 18 ++++++++++++++++++
 5 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/man/virt-install.pod b/man/virt-install.pod
index a030b3a..349e4e6 100644
--- a/man/virt-install.pod
+++ b/man/virt-install.pod
@@ -247,6 +247,10 @@ Example of specifying two NUMA cells. This will generate XML like:
     </numa>
   </cpu>
 
+=item B<--cpu host-passthrough,cache.mode=passthrough>
+
+Example of passing through the host cpu's cache information.
+
 =back
 
 Use --cpu=? to see a list of all available sub options. Complete details at L<http://libvirt.org/formatdomain.html#elementsCPU>
diff --git a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
index d7fbb49..658d0a4 100644
--- a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
+++ b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
@@ -83,6 +83,7 @@
     <model>foobar</model>
     <vendor>meee</vendor>
     <topology sockets="2" cores="2" threads="2"/>
+    <cache level='3' mode='emulate'/>
     <feature policy="force" name="x2apic"/>
     <feature policy="force" name="x2apicagain"/>
     <feature policy="require" name="reqtest"/>
@@ -237,6 +238,7 @@
     <model>foobar</model>
     <vendor>meee</vendor>
     <topology sockets="2" cores="2" threads="2"/>
+    <cache level='3' mode='emulate'/>
     <feature policy="force" name="x2apic"/>
     <feature policy="force" name="x2apicagain"/>
     <feature policy="require" name="reqtest"/>
diff --git a/tests/clitest.py b/tests/clitest.py
index 4f7f766..7e9e668 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -416,7 +416,7 @@ c.add_compare(""" \
 c.add_compare("""--pxe \
 --memory 512,maxmemory=1024 \
 --vcpus 4,cores=2,threads=2,sockets=2 \
---cpu foobar,+x2apic,+x2apicagain,-distest,forbid=foo,forbid=bar,disable=distest2,optional=opttest,require=reqtest,match=strict,vendor=meee,cell.id=0,cell.cpus=1,2,3,cell.memory=1024,cell1.id=1,cell1.memory=256,cell1.cpus=5-8 \
+--cpu foobar,+x2apic,+x2apicagain,-distest,forbid=foo,forbid=bar,disable=distest2,optional=opttest,require=reqtest,match=strict,vendor=meee,cell.id=0,cell.cpus=1,2,3,cell.memory=1024,cell1.id=1,cell1.memory=256,cell1.cpus=5-8,cache.mode=emulate,cache.level=3 \
 --metadata title=my-title,description=my-description,uuid=00000000-1111-2222-3333-444444444444 \
 --boot cdrom,fd,hd,network,menu=off,loader=/foo/bar \
 --idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10 \
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 900d185..7a8fd0c 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -1467,6 +1467,18 @@ class ParserCPU(VirtCLIParser):
             else:
                 inst.add_feature(feature_name, policy)
 
+    def set_l3_cache_cb(self, inst, val, virtarg, can_edit):
+        cpu = inst
+
+        if can_edit:
+            cpu.set_l3_cache_mode()
+        try:
+            return cpu.cache[0]
+        except IndexError:
+            if not can_edit:
+                return None
+            raise
+
     def _parse(self, inst):
         # Convert +feature, -feature into expected format
         for key, value in self.optdict.items():
@@ -1508,6 +1520,10 @@ ParserCPU.add_arg("cpus", "cell[0-9]*.cpus", can_comma=True,
 ParserCPU.add_arg("memory", "cell[0-9]*.memory",
                   find_inst_cb=ParserCPU.cell_find_inst_cb)
 
+# Options for CPU.cache
+ParserCPU.add_arg("mode", "cache.mode", find_inst_cb=ParserCPU.set_l3_cache_cb)
+ParserCPU.add_arg("level", "cache.level", find_inst_cb=ParserCPU.set_l3_cache_cb)
+
 
 ###################
 # --vcpus parsing #
diff --git a/virtinst/cpu.py b/virtinst/cpu.py
index 468853f..3925106 100644
--- a/virtinst/cpu.py
+++ b/virtinst/cpu.py
@@ -32,6 +32,18 @@ class _CPUCell(XMLBuilder):
     memory = XMLProperty("./@memory", is_int=True)
 
 
+class CPUCache(XMLBuilder):
+    """
+    Class for generating <cpu> child <cache> XML
+    """
+
+    _XML_ROOT_NAME = "cache"
+    _XML_PROP_ORDER = ["mode", "level"]
+
+    mode = XMLProperty("./@mode")
+    level = XMLProperty("./@level", is_int=True)
+
+
 class CPUFeature(XMLBuilder):
     """
     Class for generating <cpu> child <feature> XML
@@ -107,6 +119,12 @@ class CPU(XMLBuilder):
         self.add_child(obj)
         return obj
 
+    cache = XMLChildProperty(CPUCache)
+    def set_l3_cache_mode(self):
+        obj = CPUCache(self.conn)
+        self.add_child(obj)
+        return obj
+
     def copy_host_cpu(self):
         """
         Enact the equivalent of qemu -cpu host, pulling all info
-- 
2.9.2




More information about the virt-tools-list mailing list