From: Dario Faggioli Subject: [OSSTEST PATCH 1/2] TestSupport.pm: allow creating vNUMA enabled HVM guest configs Date: Fri, 02 Oct 2015 01:17:31 +0200 Message-ID: <20151001231731.15271.87986.stgit@Solace.station> References: <20151001230750.15271.26071.stgit@Solace.station> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Zhn6V-0000SC-WC for xen-devel@lists.xenproject.org; Thu, 01 Oct 2015 23:17:36 +0000 Received: by wicgb1 with SMTP id gb1so10198934wic.1 for ; Thu, 01 Oct 2015 16:17:34 -0700 (PDT) In-Reply-To: <20151001230750.15271.26071.stgit@Solace.station> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Ian Jackson , Dario Faggioli , Ian Campbell , Wei Liu List-Id: xen-devel@lists.xenproject.org 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 --- Cc: Ian Jackson Cc: Ian Campbell Cc: Wei Liu --- Osstest/TestSupport.pm | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Osstest/TestSupport.pm b/Osstest/TestSupport.pm index 2b67e32..bf8bd56 100644 --- a/Osstest/TestSupport.pm +++ b/Osstest/TestSupport.pm @@ -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= <