Re: [Autotest] [PATCH 1/2] Adds a test to verify resources inside a VM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux