[libvirt] [libvirt-test-api][PATCH 3/3] Add a new case for getCPUStatus

lhuang lhuang at redhat.com
Mon Aug 24 03:47:55 UTC 2015


On 08/24/2015 11:41 AM, hongming wrote:
>
> On 06/02/2015 07:57 AM, hongming wrote:
>> ACK and pushed
>> Don't forget to remove trailing whitespace next time.
>> Thanks
>>
>> Hongming
>> On 05/18/2015 09:28 AM, Luyao Huang wrote:
>>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>>> ---
>>>   cases/linux_domain.conf    |   6 +++
>>>   repos/domain/cpu_status.py | 113 
>>> +++++++++++++++++++++++++++++++++++++++++++++
>>>   2 files changed, 119 insertions(+)
>>>   create mode 100644 repos/domain/cpu_status.py
>>>
>>> diff --git a/cases/linux_domain.conf b/cases/linux_domain.conf
>>> index 0a7d134..9f64226 100644
>>> --- a/cases/linux_domain.conf
>>> +++ b/cases/linux_domain.conf
>>> @@ -269,6 +269,12 @@ virconn:connection_security_model
>>>       guestname
>>>           $defaultname
>>>   +domain:virDomain_getCPUStats
>
> The case name is wrong , I have fixed it directly
>
> commit 5c433b7c934cd8ac3ad783939c5906b7cbc129a8
> Author: Hongming Zhang <honzhang at redhat.com>
> Date:   Mon Aug 24 11:25:04 2015 +0800
>
>     Fix a wrong case name in linux_domain.conf
>
>     Modify the virDomain_getCPUStats as cpu_status
>     modified:   cases/linux_domain.conf
>
>

Thanks, i must missed this place during change the name of this api.


Luyao


>>> +    guestname
>>> +        $defaultname
>>> +    conn
>>> +        qemu:///system
>>> +
>>>   domain:destroy
>>>       guestname
>>>           $defaultname
>>> diff --git a/repos/domain/cpu_status.py b/repos/domain/cpu_status.py
>>> new file mode 100644
>>> index 0000000..6e511c0
>>> --- /dev/null
>>> +++ b/repos/domain/cpu_status.py
>>> @@ -0,0 +1,113 @@
>>> +#!/usr/bin/env python
>>> +import libvirt
>>> +from libvirt import libvirtError
>>> +from  utils import utils
>>> +
>>> +required_params = ('guestname',)
>>> +optional_params = {'conn': 'qemu:///system'}
>>> +
>>> +ONLINE_CPU = '/sys/devices/system/cpu/online'
>>> +CGROUP_PERCPU = 
>>> '/sys/fs/cgroup/cpuacct/machine.slice/machine-qemu\\x2d%s.scope/cpuacct.usage_percpu'
>>> +CGROUP_PERVCPU = 
>>> '/sys/fs/cgroup/cpuacct/machine.slice/machine-qemu\\x2d%s.scope/vcpu%d/cpuacct.usage_percpu'
>>> +CGROUP_USAGE = 
>>> '/sys/fs/cgroup/cpuacct/machine.slice/machine-qemu\\x2d%s.scope/cpuacct.usage'
>>> +CGROUP_STAT = 
>>> '/sys/fs/cgroup/cpuacct/machine.slice/machine-qemu\\x2d%s.scope/cpuacct.stat'
>>> +
>>> +def getcputime(a):
>>> +    return open(a[0]).read().split()[a[1]]
>>> +
>>> +def virtgetcputime(a):
>>> +    return a[0].getCPUStats(0)[a[1]][a[2]]
>>> +
>>> +def getvcputime(a):
>>> +    ret = 0
>>> +    for i in range(int(a[0])):
>>> +        ret += int(open(CGROUP_PERVCPU % (a[1], 
>>> i)).read().split()[a[2]])
>>> +
>>> +    return ret
>>> +
>>> +def virtgettotalcputime(a):
>>> +    return a[0].getCPUStats(1)[0][a[1]]
>>> +
>>> +def virtgettotalcputime2(a):
>>> +    return a[0].getCPUStats(1)[0][a[1]]/10000000
>>> +
>>> +def cpu_status(params):
>>> +    """
>>> +       test API for getCPUStats in class virDomain
>>> +    """
>>> +    logger = params['logger']
>>> +    fail=0
>>> +
>>> +    cpu = utils.file_read(ONLINE_CPU)
>>> +    logger.info("host online cpulist is %s" % cpu)
>>> +
>>> +    cpu_tuple = utils.param_to_tuple_nolength(cpu)
>>> +    if not cpu_tuple:
>>> +        logger.info("error in function param_to_tuple_nolength")
>>> +        return 1
>>> +
>>> +    try:
>>> +        conn = libvirt.open(params['conn'])
>>> +
>>> +        logger.info("get connection to libvirtd")
>>> +        guest = params['guestname']
>>> +        vm = conn.lookupByName(guest)
>>> +        vcpus = vm.info()[3]
>>> +        for n in range(len(cpu_tuple)):
>>> +            if not cpu_tuple[n]:
>>> +                continue
>>> +
>>> +            D = utils.get_standard_deviation(getcputime, 
>>> virtgetcputime, \
>>> +                [CGROUP_PERCPU % guest, n], [vm,n,'cpu_time'])
>>> +            logger.info("Standard Deviation for host cpu %d cputime 
>>> is %d" % (n, D))
>>> +
>>> +            """ expectations 403423 is a average collected in a 
>>> x86_64 low load machine"""
>>> +            if D > 403423*5:
>>> +                fail=1
>>> +                logger.info("FAIL: Standard Deviation is too big \
>>> +                             (biger than %d) for host cpu %d" % 
>>> (403423*5, n))
>>> +
>>> +            D = utils.get_standard_deviation(getvcputime, 
>>> virtgetcputime, \
>>> +                [vcpus, guest, n], [vm,n,'vcpu_time'])
>>> +            logger.info("Standard Deviation for host cpu %d 
>>> vcputime is %d" % (n, D))
>>> +
>>> +            """ expectations 4034 is a average collected in a 
>>> x86_64 low load machine"""
>>> +            if D > 4034*5*vcpus:
>>> +                fail=1
>>> +                logger.info("FAIL: Standard Deviation is too big \
>>> +                             (biger than %d) for host cpu time %d" 
>>> % (4034*5*vcpus, n))
>>> +
>>> +        D = utils.get_standard_deviation(getcputime, 
>>> virtgettotalcputime, \
>>> +            [CGROUP_USAGE % guest, 0], [vm,'cpu_time'])
>>> +        logger.info("Standard Deviation for host cpu total cputime 
>>> is %d" % D)
>>> +
>>> +        """ expectations 313451 is a average collected in a x86_64 
>>> low load machine"""
>>> +        if D > 313451*5*len(cpu_tuple):
>>> +            fail=1
>>> +            logger.info("FAIL: Standard Deviation is too big \
>>> +                         (biger than %d) for host cpu time %d" % 
>>> (313451*5*len(cpu_tuple), n))
>>> +
>>> +        D = utils.get_standard_deviation(getcputime, 
>>> virtgettotalcputime2, \
>>> +            [CGROUP_STAT % guest, 3], [vm,'system_time'])
>>> +        logger.info("Standard Deviation for host cpu total system 
>>> time is %d" % D)
>>> +
>>> +        """ expectations 10 is a average collected in a x86_64 low 
>>> load machine"""
>>> +        if D > 10*5:
>>> +            fail=1
>>> +            logger.info("FAIL: Standard Deviation is too big \
>>> +                         (biger than %d) for host system cpu time 
>>> %d" % (10*5, n))
>>> +
>>> +        D = utils.get_standard_deviation(getcputime, 
>>> virtgettotalcputime2, \
>>> +            [CGROUP_STAT % guest, 1], [vm,'user_time'])
>>> +        logger.info("Standard Deviation for host cpu total user 
>>> time is %d" % D)
>>> +
>>> +        """ expectations 10 is a average collected in a x86_64 low 
>>> load machine"""
>>> +        if D > 10*5:
>>> +            fail=1
>>> +            logger.info("FAIL: Standard Deviation is too big \
>>> +                         (biger than %d) for host user cpu time %d" 
>>> % (10*5, n))
>>> +
>>> +    except libvirtError, e:
>>> +        logger.error("API error message: %s" % e.message)
>>> +        fail=1
>>> +    return fail
>>
>> -- 
>> libvir-list mailing list
>> libvir-list at redhat.com
>> https://www.redhat.com/mailman/listinfo/libvir-list
>




More information about the libvir-list mailing list