From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dario Faggioli Subject: [OSSTEST PATCH v3 1/3] ts-cpupools: new test script Date: Sat, 03 Oct 2015 02:39:22 +0200 Message-ID: <20151003003922.12311.48452.stgit@Solace.station> References: <20151003003554.12311.97039.stgit@Solace.station> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZiArG-0002Tj-G2 for xen-devel@lists.xenproject.org; Sat, 03 Oct 2015 00:39:26 +0000 Received: by wicfx3 with SMTP id fx3so53568107wic.1 for ; Fri, 02 Oct 2015 17:39:24 -0700 (PDT) In-Reply-To: <20151003003554.12311.97039.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: Juergen Gross , Ian Jackson , Ian Campbell List-Id: xen-devel@lists.xenproject.org for smoke testing cpupools a bit. It tries to partition a live host in two cpupools, trying out the following 3 schedulers for the new cpupool (one after the other): credit, credit2 and RTDS. It also tries to migrating a domain to the new cpupool and then back to Pool-0. Signed-off-by: Dario Faggioli --- Cc: Ian Jackson Cc: Ian Campbell Cc: Juergen Gross --- Changes from v2: * reorganized internal subroutines; * avoid failing (just don't run the test) if we find only 1 pCPU on the host; * use 'map' and 'grep' in place of foreach loops, as suggested during review; * fix the check for the default cpupool configuration to be in place when starting the test, as identified during review; * fix quoting for the name of the cpupool, as idenfied during review; * use target_cmd_root(), instead of target_cmd_output_root(), as requested during review; * check for the toolstack to be xl and only xl, as requested during review. --- ts-cpupools | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100755 ts-cpupools diff --git a/ts-cpupools b/ts-cpupools new file mode 100755 index 0000000..7fe9a27 --- /dev/null +++ b/ts-cpupools @@ -0,0 +1,121 @@ +#!/usr/bin/perl -w +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2009-2014 Citrix Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +use strict qw(vars); +use DBI; +use Osstest; +use Osstest::TestSupport; + +tsreadconfig(); + +our ($ho,$gho) = ts_get_host_guest(@ARGV); + +our $nr_cpus; +our $default_pool= "Pool-0"; +our @schedulers= ("credit","credit2","rtds"); +our @cpulist; + +# Figure out the number of pCPUs of the host. We need to know that for +# deciding with what pCPUs we'll create the test pool. +sub check_cpus () { + my $xlinfo= target_cmd_output_root($ho, "xl info"); + $xlinfo =~ /nr_cpus\s*:\s([0-9]*)/; + $nr_cpus= $1; + logm("Found $nr_cpus pCPUs"); + logm("$nr_cpus is yoo few pCPUs for testing cpupools"); +} + +# At the beginning: +# * only 1 pool must exist, +# * it must be the default pool. +sub check () { + my $cppinfo= target_cmd_output_root($ho, "xl cpupool-list"); + my $nr_cpupools= $cppinfo =~ tr/\n//; + + logm("Found $nr_cpupools cpupools"); + die "There already is more than one cpu pool!" if $nr_cpupools > 1; + die "Non-default cpupool configuration detected" + unless $cppinfo =~ /$default_pool/; + + die "This test is meant for xl only" + if toolstack($ho)->{Name} ne "xl"; +} + +# Odd pCPUs will end up in out test pool +sub prep_cpulist () { + @cpulist = grep { $_ % 2 } (0..$nr_cpus); + logm("Using the following cpus fo the test pool: @cpulist"); +} + +sub prep_pool ($) { + my ($sched)= @_; + my @cpustr; + + my @cpustr= map { $_ == -1 ? "[ " : $_ == $#cpulist+1 ? " ]" : + "\"$cpulist[$_]\"," } (-1 .. $#cpulist+1); + + target_putfilecontents_stash($ho,100,<<"END","/etc/xen/cpupool-test-$sched"); +name = \"cpupool-test-$sched\" +sched = \"$sched\" +cpus = @cpustr +END +} + +# For each cpupool: +# * create it +# * rename it +# * move a domain in it +# * move back a domain out of it +# * add back the pcpus from it to the default pool +# * destroy it +sub run ($) { + my ($sched)= @_; + + foreach my $cpu (@cpulist) { + target_cmd_root($ho,"xl cpupool-cpu-remove $default_pool $cpu"); + } + target_cmd_root($ho, "xl cpupool-list -c"); + target_cmd_root($ho, "xl cpupool-create /etc/xen/cpupool-test-$sched"); + target_cmd_root($ho, "xl cpupool-rename cpupool-test-$sched cpupool-test"); + target_cmd_root($ho, "xl cpupool-list -c"); + + target_cmd_root($ho, "xl cpupool-migrate $gho->{Name} cpupool-test"); + target_cmd_root($ho, "xl cpupool-list"); + target_cmd_root($ho, "xl vcpu-list"); + + target_cmd_root($ho, "xl cpupool-migrate $gho->{Name} Pool-0"); + target_cmd_root($ho, "xl cpupool-list"); + + foreach my $cpu (@cpulist) { + target_cmd_root($ho,"xl cpupool-cpu-remove cpupool-test $cpu"); + target_cmd_root($ho,"xl cpupool-cpu-add $default_pool $cpu"); + } + target_cmd_output_root($ho, "xl cpupool-list -c"); + + target_cmd_root($ho, "xl cpupool-destroy cpupool-test"); + target_cmd_root($ho, "xl cpupool-list"); +} + +check(); +check_cpus(); +if ($nr_cpus > 1) { + prep_cpulist(); + foreach my $s (@schedulers) { + prep_pool("$s"); + run("$s"); + } +}