]> xenbits.xensource.com Git - people/dariof/osstest.git/commitdiff
TestSupport.pm: allow creating vNUMA enabled HVM guest configs
authorDario Faggioli <dario.faggioli@citrix.com>
Thu, 1 Oct 2015 14:54:20 +0000 (15:54 +0100)
committerDario Faggioli <dario.faggioli@citrix.com>
Thu, 1 Oct 2015 14:54:20 +0000 (15:54 +0100)
This is done by introducing a new guest runvar, called
'vnodes', holding, if defined, the number of vNUMA nodes
the guest should have.

From that, and basing on the other characteristics of the
guest (namely, amount of RAM and number of vcpus), we build
a vNUMA topology that makes sense.

For now, we just evenly (well, as evenly as we can) split
resouces between vNUMA nodes. Also, still for now, we
always set things in such a way that all vNUMA nodes are
allocated on physical NUMA node 0. This way, we don't
have to introduce logic to make sure that the test runs
on an actual NUMA host.

Signed-off-by: Dario Faggioli <dario.faggioli@ctirix.com>
---
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Osstest/TestSupport.pm

index 2b67e32de88c3b3fbc5df43e1f31fcdb835ab39b..bf8bd567f8e9dca5968042e698d60aa56992da30 100644 (file)
@@ -1709,6 +1709,34 @@ sub prepareguest_part_xencfg ($$$$$) {
     my $vifmodel= $vif ? "model=$vif," : '';
     my $xoptcfg= $xopts->{ExtraConfig};
     $xoptcfg='' unless defined $xoptcfg;
+
+    my $vnumacfg= '';
+    my $vnuma_nodes= guest_var($gho, 'vnodes', $xopts->{DefVnodes} || 1);
+    if ($vnuma_nodes > 1 && $vcpus >= $vnuma_nodes) {
+        my @vnuma_mem;
+        my @vnuma_pnode;
+        my @vnuma_vcpus;
+        my @vnuma;
+
+        my $m= int($ram_mb / $vnuma_nodes);
+        @vnuma_mem = map { $_ < $vnuma_nodes ? $m :
+            ($ram_mb - ($vnuma_nodes-1) * $m) } (1 .. $vnuma_nodes);
+
+        my $v= int($vcpus / $vnuma_nodes);
+        @vnuma_vcpus= map { $_ == 0 ? "0-" . ($v-1) :
+            $_ == $vnuma_nodes-1 ? ($_ * $v) . "-" . ($vcpus-1) :
+            ($_ * $v) . "-" . (($_+1) * $v - 1) } (0 .. $vnuma_nodes-1);
+
+        # Let's put all vnodes on pnode 0, as we don't even know (for now)
+        # whether or not the host has more NUMA nodes than that!
+        @vnuma_pnode = (0) x $vnuma_nodes;
+
+        @vnuma = map { $_ == -1 ? '[' : $_ == $vnuma_nodes ? ']' :
+            "[\"pnode=$vnuma_pnode[$_]\",\"size=$vnuma_mem[$_]\",\"vcpus=$vnuma_vcpus[$_]\" ]," }
+            (-1 .. $vnuma_nodes);
+        $vnumacfg= "vnuma = @vnuma";
+    }
+
     my $xencfg= <<END;
 name        = '$gho->{Name}'
 memory = ${ram_mb}
@@ -1719,6 +1747,7 @@ on_reboot   = '$onreboot'
 on_crash    = '$oncrash'
 #
 vcpus = $vcpus
+$vnumacfg
 #
 $cfgrest
 #