On Wed, Dec 2, 2009 at 7:51 AM, Yolkfull Chow <yzhou@xxxxxxxxxx> wrote: > 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? :) Needs couple of hours before I go through the patch. I will post my comments by today. Also would like to give a quick run for windows guests which are more prone to break :) Thanks Lucas for the effort. > > Cheers, > Yolkfull > >> >> Cheers, >> >> On Sun, Nov 29, 2009 at 8:40 AM, Yolkfull Chow <yzhou@xxxxxxxxxx> 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@xxxxxxxxxx> 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@xxxxxxxxxxxxxxxxxx> >> >> >> >> >> >> 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@xxxxxxxxxxxxxxxxxx> >> >> >> + >> >> >> +""" >> >> >> + >> >> >> +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@xxxxxxxxxxxxxxxxxx> >> >> >> >> >> >> 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@xxxxxxxxxxxxxxxxxx> >> >> >> + >> >> >> +""" >> >> >> + >> >> >> +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@xxxxxxxxxxxxxxx >> > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest >> > >> >> >> >> -- >> Lucas > -- Sudhir Kumar -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html