From: Yolkfull Chow <yzhou@redhat.com>
To: Lucas Meneghel Rodrigues <lmr@redhat.com>
Cc: sudhir kumar <smalikphy@gmail.com>,
Autotest mailing list <autotest@test.kernel.org>,
Lucas Meneghel Rodrigues <mrodrigu@redhat.com>,
kvm-devel <kvm@vger.kernel.org>
Subject: Re: [Autotest] [PATCH 1/2] Adds a test to verify resources inside a VM
Date: Wed, 2 Dec 2009 10:21:50 +0800 [thread overview]
Message-ID: <20091202022150.GA2111@aFu.nay.redhat.com> (raw)
In-Reply-To: <6ac58f4f0912010556g6ffa996aq2b5d24240ee943f@mail.gmail.com>
On Tue, Dec 01, 2009 at 11:56:43AM -0200, Lucas Meneghel Rodrigues wrote:
> Hi Sudhir and Yolkfull:
>
> Thanks for your work on this test! Since Yolkfull's test matches
> Sudhir's test functionality and extends it, I will go with it. Some
> points:
>
> * A failure on checking a given resource shouldn't prevent us from
> testing other resources. Hence, instead of TestFail() exceptions,
> let's replace it by an increase on a failure counter defined in the
> beginning of the test.
> * In order to make it more clear what the test does, let's change the
> name to check_physical_resources
> * At least for the user messages, it's preferrable to use "Assigned
> to VM" and "Reported by OS" instead of "expected" and "actual".
>
> I have implemented the suggestions and tested it, works quite well. A
> patch was sent to the mailing list a couple of minutes ago, please let
> me know what you guys think.
Looks good for me. Thanks Lucas for improving this test.
Sudhir, what do you think about this? :)
Cheers,
Yolkfull
>
> Cheers,
>
> On Sun, Nov 29, 2009 at 8:40 AM, Yolkfull Chow <yzhou@redhat.com> wrote:
> > On Sun, Nov 29, 2009 at 02:22:40PM +0530, sudhir kumar wrote:
> >> On Sun, Nov 29, 2009 at 12:50 PM, Yolkfull Chow <yzhou@redhat.com> wrote:
> >> > On Wed, Nov 25, 2009 at 11:35:02AM +0530, sudhir kumar wrote:
> >> >> This patch adds a test for verifying whether the number of cpus and amount
> >> >> of memory as seen inside a guest is same as allocated to it on the qemu
> >> >> command line.
> >> >
> >> > Hello Sudhir,
> >> >
> >> > Please see embedded comments as below:
> >> >
> >> >>
> >> >> Signed-off-by: Sudhir Kumar <skumar@linux.vnet.ibm.com>
> >> >>
> >> >> Index: kvm/tests/verify_resources.py
> >> >> ===================================================================
> >> >> --- /dev/null
> >> >> +++ kvm/tests/verify_resources.py
> >> >> @@ -0,0 +1,74 @@
> >> >> +import logging, time
> >> >> +from autotest_lib.client.common_lib import error
> >> >> +import kvm_subprocess, kvm_test_utils, kvm_utils
> >> >> +
> >> >> +"""
> >> >> +Test to verify if the guest has the equal amount of resources
> >> >> +as allocated through the qemu command line
> >> >> +
> >> >> +@Copyright: 2009 IBM Corporation
> >> >> +@author: Sudhir Kumar <skumar@linux.vnet.ibm.com>
> >> >> +
> >> >> +"""
> >> >> +
> >> >> +def run_verify_resources(test, params, env):
> >> >> + """
> >> >> + KVM test for verifying VM resources(#vcpu, memory):
> >> >> + 1) Get resources from the VM parameters
> >> >> + 2) Log into the guest
> >> >> + 3) Get actual resources, compare and report the pass/failure
> >> >> +
> >> >> + @param test: kvm test object
> >> >> + @param params: Dictionary with the test parameters
> >> >> + @param env: Dictionary with test environment.
> >> >> + """
> >> >> + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
> >> >> +
> >> >> + # Get info about vcpu and memory from dictionary
> >> >> + exp_vcpus = int(params.get("smp"))
> >> >> + exp_mem_mb = long(params.get("mem"))
> >> >> + real_vcpus = 0
> >> >> + real_mem_kb = 0
> >> >> + real_mem_mb = 0
> >> >> + # Some memory is used by bios and all, so lower the expected
> >> >> value say by 5%
> >> >> + exp_mem_mb = long(exp_mem_mb * 0.95)
> >> >> + logging.info("The guest should have vcpus: %s" % exp_vcpus)
> >> >> + logging.info("The guest should have min mem: %s MB" % exp_mem_mb)
> >> >> +
> >> >> + session = kvm_test_utils.wait_for_login(vm)
> >> >> +
> >> >> + # Get info about vcpu and memory from within guest
> >> >> + if params.get("guest_os_type") == "Linux":
> >> >> + output = session.get_command_output("cat /proc/cpuinfo|grep processor")
> >> >
> >> > We'd better here not hard code the command that getting CPU count. As KVM supports not
> >> > only Linux & Windows, but also others say Unix/BSD.
> >> > A recommended method could be define it in config file for different platforms:
> >> I agree. The only concern that made me doing it inside test is the
> >> increasing size and complexity of the config file. I am fine with
> >> passing the command from the config file but still the code paths have
> >> to be different for each type of OS ie windows linux etc.
> >>
> >> >
> >> > - @Linux:
> >> > verify_resources:
> >> > count_cpu_cmd = grep processor /proc/cpuinfo
> >> >
> >> > - @Windows:
> >> > verify_resources:
> >> > count_cpu_cmd = systeminfo (here I would not suggest we use 'systeminfo'
> >> > for catching M$ guest's memory size)
> >> >
> >> >> + for line in output.split('\n'):
> >> >> + if 'processor' in line:
> >> >> + real_vcpus = real_vcpus + 1
> >> >> +
> >> >> + output = session.get_command_output("cat /proc/meminfo")
> >> >
> >> > For catching memory size of Linux guests, I prefer command 'dmidecode' which can
> >> > catch memory size exactly in MB.
> >> I think we can use both here. To my knowledge dmidecode will test the
> >> BIOS code of kvm and hence we can include both the methods?
> >> >
> >> >> + for line in output.split('\n'):
> >> >> + if 'MemTotal' in line:
> >> >> + real_mem_kb = long(line.split()[1])
> >> >> + real_mem_mb = real_mem_kb / 1024
> >> >> +
> >> >> + elif params.get("guest_os_type") == "Windows":
> >> >> + # Windows takes long time to display output for systeminfo
> >> >> + output = session.get_command_output("systeminfo", timeout =
> >> >> 150, internal_timeout = 50)
> >> >> + for line in output.split('\n'):
> >> >> + if 'Processor' in line:
> >> >> + real_vcpus = int(line.split()[1])
> >> >> +
> >> >> + for line in output.split('\n'):
> >> >> + if 'Total Physical Memory' in line:
> >> >> + real_mem_mb = long("".join("%s" % k for k in
> >> >> line.split()[3].split(',')))
> >> >
> >> > So many slice and split operations can easy results in problems.
> >> > To catch memory of Windows guests, I recommend we use 'wmic memphysical' which
> >> > can dump memory size in KB exactly.
> >> Is the command available for all windows OSes? If yes we can
> >> definitely use the command.
> >
> > Yes it's available for all Windows OSes although with some limitations that it can
> > only be executed within TELNET session or Windows command prompt. But it's fixed now.:)
> >
> > Cheers,
> >
> >> >
> >> >
> >> > Meanwhile, we also need to verify guest's NICs' count and their(its) model,
> >> > hard disk(s)'s count & model etc. Therefore I think we need a case to verify
> >> > them together.
> >> Yeah, I just gave a first try for such a test. We need to test all the
> >> emulated hardware.
> >> >
> >> > I had wrote such test couples of days before. I also ran it several times.
> >> > Please comment on it when I post it here later. Thanks,
> >> Sure. Please post them. I am happy to see them getting merged.
> >>
> >> Thanks a lot for your comments!!
> >> Sudhir
> >>
> >> >
> >> >> +
> >> >> + else:
> >> >> + raise error.TestFail("Till date this test is supported only
> >> >> for Linux and Windows")
> >> >> +
> >> >> + logging.info("The guest has cpus: %s" % real_vcpus)
> >> >> + logging.info("The guest has mem: %s MB" % real_mem_mb)
> >> >> + if exp_vcpus != real_vcpus or real_mem_mb < exp_mem_mb:
> >> >> + raise error.TestFail("Actual resources(cpu ='%s' memory ='%s' MB) "
> >> >> + "differ from Allocated resources(cpu = '%s' memory ='%s' MB"
> >> >> + % (real_vcpus, real_mem_mb, exp_vcpus, exp_mem_mb))
> >> >> +
> >> >> + session.close()
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> Sending the patch as an attachment too. Please review and provide your comments.
> >> >> --
> >> >> Sudhir Kumar
> >> >
> >> >> This patch adds a test for verifying whether the number of cpus and amount
> >> >> of memory as seen inside a guest is same as allocated to it on the qemu
> >> >> command line.
> >> >>
> >> >> Signed-off-by: Sudhir Kumar <skumar@linux.vnet.ibm.com>
> >> >>
> >> >> Index: kvm/tests/verify_resources.py
> >> >> ===================================================================
> >> >> --- /dev/null
> >> >> +++ kvm/tests/verify_resources.py
> >> >> @@ -0,0 +1,74 @@
> >> >> +import logging, time
> >> >> +from autotest_lib.client.common_lib import error
> >> >> +import kvm_subprocess, kvm_test_utils, kvm_utils
> >> >> +
> >> >> +"""
> >> >> +Test to verify if the guest has the equal amount of resources
> >> >> +as allocated through the qemu command line
> >> >> +
> >> >> +@Copyright: 2009 IBM Corporation
> >> >> +@author: Sudhir Kumar <skumar@linux.vnet.ibm.com>
> >> >> +
> >> >> +"""
> >> >> +
> >> >> +def run_verify_resources(test, params, env):
> >> >> + """
> >> >> + KVM test for verifying VM resources(#vcpu, memory):
> >> >> + 1) Get resources from the VM parameters
> >> >> + 2) Log into the guest
> >> >> + 3) Get actual resources, compare and report the pass/failure
> >> >> +
> >> >> + @param test: kvm test object
> >> >> + @param params: Dictionary with the test parameters
> >> >> + @param env: Dictionary with test environment.
> >> >> + """
> >> >> + vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
> >> >> +
> >> >> + # Get info about vcpu and memory from dictionary
> >> >> + exp_vcpus = int(params.get("smp"))
> >> >> + exp_mem_mb = long(params.get("mem"))
> >> >> + real_vcpus = 0
> >> >> + real_mem_kb = 0
> >> >> + real_mem_mb = 0
> >> >> + # Some memory is used by bios and all, so lower the expected value say by 5%
> >> >> + exp_mem_mb = long(exp_mem_mb * 0.95)
> >> >> + logging.info("The guest should have vcpus: %s" % exp_vcpus)
> >> >> + logging.info("The guest should have min mem: %s MB" % exp_mem_mb)
> >> >> +
> >> >> + session = kvm_test_utils.wait_for_login(vm)
> >> >> +
> >> >> + # Get info about vcpu and memory from within guest
> >> >> + if params.get("guest_os_type") == "Linux":
> >> >> + output = session.get_command_output("cat /proc/cpuinfo|grep processor")
> >> >> + for line in output.split('\n'):
> >> >> + if 'processor' in line:
> >> >> + real_vcpus = real_vcpus + 1
> >> >> +
> >> >> + output = session.get_command_output("cat /proc/meminfo")
> >> >> + for line in output.split('\n'):
> >> >> + if 'MemTotal' in line:
> >> >> + real_mem_kb = long(line.split()[1])
> >> >> + real_mem_mb = real_mem_kb / 1024
> >> >> +
> >> >> + elif params.get("guest_os_type") == "Windows":
> >> >> + # Windows takes long time to display output for systeminfo
> >> >> + output = session.get_command_output("systeminfo", timeout = 150, internal_timeout = 50)
> >> >> + for line in output.split('\n'):
> >> >> + if 'Processor' in line:
> >> >> + real_vcpus = int(line.split()[1])
> >> >> +
> >> >> + for line in output.split('\n'):
> >> >> + if 'Total Physical Memory' in line:
> >> >> + real_mem_mb = long("".join("%s" % k for k in line.split()[3].split(',')))
> >> >> +
> >> >> + else:
> >> >> + raise error.TestFail("Till date this test is supported only for Linux and Windows")
> >> >> +
> >> >> + logging.info("The guest has cpus: %s" % real_vcpus)
> >> >> + logging.info("The guest has mem: %s MB" % real_mem_mb)
> >> >> + if exp_vcpus != real_vcpus or real_mem_mb < exp_mem_mb:
> >> >> + raise error.TestFail("Actual resources(cpu ='%s' memory ='%s' MB) "
> >> >> + "differ from Allocated resources(cpu = '%s' memory ='%s' MB"
> >> >> + % (real_vcpus, real_mem_mb, exp_vcpus, exp_mem_mb))
> >> >> +
> >> >> + session.close()
> >> >
> >> >
> >>
> >>
> >>
> >> --
> >> Sudhir Kumar
> > _______________________________________________
> > Autotest mailing list
> > Autotest@test.kernel.org
> > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
> >
>
>
>
> --
> Lucas
next prev parent reply other threads:[~2009-12-02 2:21 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-25 6:05 [PATCH 1/2] Adds a test to verify resources inside a VM sudhir kumar
2009-11-27 7:44 ` sudhir kumar
2009-11-27 12:08 ` [Autotest] " Lucas Meneghel Rodrigues
2009-11-29 7:20 ` Yolkfull Chow
2009-11-29 8:52 ` sudhir kumar
2009-11-29 10:40 ` Yolkfull Chow
2009-12-01 13:56 ` [Autotest] " Lucas Meneghel Rodrigues
2009-12-02 2:21 ` Yolkfull Chow [this message]
2009-12-02 3:29 ` sudhir kumar
2009-12-02 3:40 ` Lucas Meneghel Rodrigues
2009-12-02 17:09 ` sudhir kumar
2009-11-29 9:04 ` Yaniv Kaul
2009-12-04 9:20 ` Yolkfull Chow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091202022150.GA2111@aFu.nay.redhat.com \
--to=yzhou@redhat.com \
--cc=autotest@test.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=lmr@redhat.com \
--cc=mrodrigu@redhat.com \
--cc=smalikphy@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox