On 02/21/2013 03:30 PM, Eduardo Habkost wrote:
Signed-off-by: Eduardo Habkost <[email protected]>
---
Changes v3:
  - Use TestFail instead of TestError for test failures
  - Always use "+=" when setting extra_params
  - Cosmetic config file line reordering
  - Add 3-node test cases

Changes v2:
  - No need to create the VM object manually
  - Add test case for explicit-nodeid parameters
---
  qemu/tests/cfg/numa_opts.cfg | 80 ++++++++++++++++++++++++++++++++++++++++++++
  qemu/tests/numa_opts.py      | 56 +++++++++++++++++++++++++++++++
  2 files changed, 136 insertions(+)
  create mode 100644 qemu/tests/cfg/numa_opts.cfg
  create mode 100644 qemu/tests/numa_opts.py

diff --git a/qemu/tests/cfg/numa_opts.cfg b/qemu/tests/cfg/numa_opts.cfg
new file mode 100644
index 0000000..1a1a03d
--- /dev/null
+++ b/qemu/tests/cfg/numa_opts.cfg
@@ -0,0 +1,80 @@
+- numa_opts:
+  type = numa_opts
+  # we will start the VM manually, because we will
+  # manually override the "mem" parameter before starting it
+  start_vm = no
+  # paused VMs are enough for our purposes, no need to boot them:
+  paused_after_start_vm = yes
+  kill_vm = yes
+  kill_vm_gracefully = no
+  encode_video_files = no
+
+  variants:
+    - nodes.0:
+      # no extra parameters => zero nodes
+      numa_nodes = 0
+    - nodes.1:
+      smp_override = 6
+      mem_override = 256
+      numa_nodes = 1
+      extra_params += " -numa node"
+      numa_node0_cpus = "0 1 2 3 4 5"
+      numa_node0_size = 256
+    - nodes.2:
+      smp_override = 6
+      mem_override = 256
+      numa_nodes = 2
+      variants:
+        # default (interleaved) mode:
+        - defaults:
+          extra_params += " -numa node -numa node"
+          numa_node0_cpus = "0 2 4"
+          numa_node0_size = 128
+          numa_node1_cpus = "1 3 5"
+          numa_node1_size = 128
+        # custom memory and CPU values:
+        - custom_values:
+          numa_node0_cpus = "4 5"
+          numa_node0_size = 100
+          numa_node1_cpus = "0 1 2 3"
+          numa_node1_size = 156
+          variants:
+            - implicit_ids:
+              extra_params += " -numa node,mem=100,cpus=4-5"
+              extra_params += " -numa node,mem=156,cpus=0-3"
+            - unordered_ids:
+              extra_params += " -numa node,mem=156,cpus=0-3,nodeid=1"
+              extra_params += " -numa node,mem=100,cpus=4-5,nodeid=0"
+    - nodes.3:
+      smp_override = 6
+      mem_override = 256
+      numa_nodes = 3
+      variants:
+        # default (interleaved) mode:
+        - defaults:
+          extra_params += " -numa node -numa node -numa node"
+          # nodes are 8MB-aligned:
+          numa_node0_cpus = "0 3"
+          numa_node0_size = 80
+          numa_node1_cpus = "1 4"
+          numa_node1_size = 80
+          numa_node2_cpus = "2 5"
+          # the last node gets all the remaining:
+          numa_node2_size = 96
+        # custom memory and CPU values:
+        - custom_values:
+          numa_node0_cpus = "3 4"
+          numa_node0_size = 50
+          numa_node1_cpus = "0 1 2"
+          numa_node1_size = 100
+          numa_node2_cpus = "5"
+          numa_node2_size = 106
+          variants:
+            - implicit_ids:
+              extra_params += " -numa node,mem=50,cpus=3-4"
+              extra_params += " -numa node,mem=100,cpus=0-2"
+              extra_params += " -numa node,mem=106,cpus=5"
+            - unordered_ids:
+              extra_params += " -numa node,mem=106,cpus=5,nodeid=2"
+              extra_params += " -numa node,mem=50,cpus=3-4,nodeid=0"
+              extra_params += " -numa node,mem=100,cpus=0-2,nodeid=1"
diff --git a/qemu/tests/numa_opts.py b/qemu/tests/numa_opts.py
new file mode 100644
index 0000000..f8519e1
--- /dev/null
+++ b/qemu/tests/numa_opts.py
@@ -0,0 +1,56 @@
+from autotest.client.shared import error
+from virttest import qemu_vm
+
+import logging
+logger = logging.getLogger(__name__)
+dbg = logger.debug

I must say I spent some time trying to understand why you created a separate logger here, without any further setup. Care to explain?

Other than that, the test looks good and it's ready to be pushed, except for the need to quench my curiosity :)

+def run_numa_opts(test, params, env):
+    """
+    Simple test to check if NUMA options are being parsed properly
+
+    This _does not_ test if NUMA information is being properly exposed to the
+    guest.
+    """
+
+    dbg("starting numa_opts test...")
+
+    # work around a test runner bug that makes it override test-specific "mem"
+    # and "smp" options unconditionally, so we override them manually if
+    # necessary, using the mem_override/smp_override options:
+    mem_override = params.get("mem_override")
+    if mem_override:
+        params["mem"] = mem_override
+    smp_override = params.get("smp_override")
+    if smp_override:
+        params["smp"] = smp_override
+
+    # we start the VM manually because of the mem/smp workaround above:
+    vm = env.get_vm(params.get("main_vm"))
+    vm.create(params=params)
+
+    numa = vm.monitors[0].info_numa()
+    dbg("info numa reply: %r", numa)
+
+    numa_nodes = params.get("numa_nodes")
+    if numa_nodes:
+        numa_nodes = int(params.get("numa_nodes"))
+        if len(numa) <> numa_nodes:
+            raise error.TestFail("Wrong number of numa nodes: %d. Expected: 
%d" % \
+                                 (len(numa), numa_nodes))
+
+    for nodenr,node in enumerate(numa):
+        size = params.get("numa_node%d_size" % (nodenr))
+        if size is not None:
+           size = int(size)
+           if size != numa[nodenr][0]:
+               raise error.TestFail("Wrong size of numa node %d: %d. Expected: 
%d" % \
+                                    (nodenr, numa[nodenr][0], size))
+
+        cpus = params.get("numa_node%d_cpus" % (nodenr))
+        if cpus is not None:
+            cpus = set([int(v) for v in cpus.split()])
+            if cpus <> numa[nodenr][1]:
+               raise error.TestFail("Wrong CPU set on numa node %d: %s. Expected: 
%s" % \
+                                    (nodenr, numa[nodenr][1], cpus))
+


_______________________________________________
Virt-test-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/virt-test-devel

Reply via email to