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 <sku...@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 <sku...@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: - @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. > + 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. 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. 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, > + > + 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 <sku...@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 <sku...@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() -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html