[libvirt] [test-API][PATCH] add new patch for testing pinemulator API

Xuesong Zhang xuzhang at redhat.com
Mon Nov 25 05:48:26 UTC 2013


Thanks for your review, pushed.

Best Regards,
Zhang Xuesong
IRC: xuzhang
internal phone: 88393

----- Original Message -----
> From: "Guannan Ren" <gren at redhat.com>
> To: "Xuesong Zhang" <xuzhang at redhat.com>
> Cc: libvir-list at redhat.com
> Sent: Monday, November 25, 2013 1:55:05 PM
> Subject: Re: [libvirt] [test-API][PATCH] add new patch for testing pinemulator API
> 
> On 2013年11月22日 14:08, Xuesong Zhang wrote:
> > ---
> >   cases/pinemulator.conf      | 46 +++++++++++++++++++++++++
> >   repos/domain/pinemulator.py | 84
> >   +++++++++++++++++++++++++++++++++++++++++++++
> >   2 files changed, 130 insertions(+)
> >   create mode 100755 cases/pinemulator.conf
> >   create mode 100755 repos/domain/pinemulator.py
> >
> > diff --git a/cases/pinemulator.conf b/cases/pinemulator.conf
> > new file mode 100755
> > index 0000000..2f270f3
> > --- /dev/null
> > +++ b/cases/pinemulator.conf
> > @@ -0,0 +1,46 @@
> > +domain:install_linux_cdrom
> > +    guestname
> > +        $defaultname
> > +    guestos
> > +        $defaultos
> > +    guestarch
> > +        $defaultarch
> > +    vcpu
> > +        $defaultvcpu
> > +    memory
> > +        $defaultmem
> > +    hddriver
> > +        $defaulthd
> > +    nicdriver
> > +        $defaultnic
> > +    imageformat
> > +        qcow2
> > +
> > +domain:pinemulator
> > +    guestname
> > +        $defaultname
> > +    cpulist
> > +        0-2
> > +
> > +domain:pinemulator
> > +    guestname
> > +        $defaultname
> > +    cpulist
> > +        3
> > +
> > +domain:pinemulator
> > +    guestname
> > +        $defaultname
> > +    cpulist
> > +        0,2
> > +
> > +domain:destroy
> > +    guestname
> > +        $defaultname
> > +
> > +
> > +domain:undefine
> > +    guestname
> > +        $defaultname
> > +
> > +options cleanup=enable
> > \ No newline at end of file
> > diff --git a/repos/domain/pinemulator.py b/repos/domain/pinemulator.py
> > new file mode 100755
> > index 0000000..8d7b800
> > --- /dev/null
> > +++ b/repos/domain/pinemulator.py
> > @@ -0,0 +1,84 @@
> > +#!/usr/bin/env python
> > +""" Query or change the pinning of domain's emulator threads to
> > +  host physical CPUs."""
> > +
> > +
> > +import libvirt
> > +from libvirt import libvirtError
> > +
> > +from src import sharedmod
> > +from utils import utils
> > +
> > +required_params = ('guestname', 'cpulist',)
> > +optional_params = {}
> > +
> > +def check_pinemulator(guestname, maxcpu, pininfo_after):
> > +    """check emulator status of the running virtual machine
> > +    """
> > +
> > +    cmd = "cat /var/run/libvirt/qemu/%s.pid" % guestname
> > +    status, pid = utils.exec_cmd(cmd, shell=True)
> > +    if status:
> > +        logger.error("failed to get the pid of domain %s" % guestname)
> > +        return 1
> > +
> > +    cmd = "grep Cpus_allowed_list /proc/%s/task/%s/status" % (pid[0],
> > pid[0])
> > +    status, output = utils.exec_cmd(cmd, shell=True)
> > +    if status:
> > +        logger.error("failed to get Cpus_allowed_list")
> > +        return 1
> > +
> > +    cpu_allowed_list = output[0]
> > +    cpulistcheck = cpu_allowed_list.split('\t')[1]
> > +    pininfo_in_process = str(utils.param_to_tuple(cpulistcheck, maxcpu))
> > +
> > +    if cmp(pininfo_in_process, pininfo_after):
> > +        logger.error("domain emulator pin failed")
> > +        return 1
> > +    else:
> > +        logger.info("domain emulator pin successed")
> > +        return 0
> > +
> > +
> > +def pinemulator(params):
> > +    """Dynamically change the real CPUs which can be allocated to the
> > +       emulator process of a domain. This function requires privileged
> > +       access to the hypervisor. """
> > +    global logger
> > +    logger = params['logger']
> > +    guestname = params['guestname']
> > +    cpulist = params['cpulist']
> > +
> > +    logger.info("the name of virtual machine is %s" % guestname)
> > +    logger.info("the given cpulist is %s" % cpulist)
> > +
> > +    maxcpu = utils.get_host_cpus()
> > +    logger.info("%s physical cpu on host" % maxcpu)
> > +
> > +    cpumap = utils.param_to_tuple(cpulist, maxcpu)
> > +    if not cpumap:
> > +        logger.error("cpulist: Invalid format")
> > +        return 1
> > +
> > +    conn = sharedmod.libvirtobj['conn']
> > +
> > +    try:
> > +        domobj = conn.lookupByName(guestname)
> > +
> > +        pininfo_original = str(domobj.emulatorPinInfo())
> > +        logger.info("the original emulator pin of the domain is: %s" % \
> > +                    pininfo_original)
> > +
> > +        logger.info("pin domain emulator to host cpu %s" % cpulist)
> > +        domobj.pinEmulator(cpumap)
> > +
> > +        pininfo_after = str(domobj.emulatorPinInfo())
> > +        logger.info("the revised emulator pin of the domain is: %s" % \
> > +                    pininfo_after)
> > +
> > +        ret = check_pinemulator(guestname, maxcpu, pininfo_after)
> > +        return ret
> > +
> > +    except libvirtError, e:
> > +        logger.error("libvirt call failed: " + str(e))
> > +        return 1
> 
> ACK and pushed
> Thanks
> 
> Guannan
> 




More information about the libvir-list mailing list