示例#1
0
    def check_vcpu_affinity():
        """
        check vcpu affinity defined by vcpu cpuset or cputune cpuset
        """
        affinity = vcpu_cpuset if not cputune_cpuset else cputune_cpuset
        affinity = {vcpu: affinity}
        virsh.vcpuinfo(vm_name, debug=True)
        host_cpu_count = cpu.total_cpus_count()

        vmxml_live = vm_xml.VMXML.new_from_dumpxml(vm_name)
        logging.debug(vmxml_live)

        # if vcpu >= maxvcpu, the cputune should not exist in xml
        if int(vcpu) >= int(maxvcpu):
            try:
                if hasattr(vmxml_live, 'cputune'):
                    test.fail("cputune tag is set when vcpu >= maxvcpu")
            except xcepts.LibvirtXMLError:
                pass
        elif "config" in vcpupin_option:
            vcpu_affinity = utils_hotplug.affinity_from_vcpupin(
                vm, vcpu, vcpupin_option)
            affinity = libvirt.cpus_string_to_affinity_list(
                str(affinity[vcpu]), host_cpu_count)
            logging.debug("vcpu_affinity {}".format(vcpu_affinity))
            logging.debug("affinity {}".format(affinity))
            if vcpu_affinity[int(vcpu)] != affinity:
                test.fail("vcpu affinity check fail")
        # check the expected vcpu affinity with the one got from running vm
        elif not utils_hotplug.check_affinity(vm, affinity):
            test.fail("vcpu affinity check fail")
示例#2
0
def affinity_from_vcpupin(vm):
    """
    Returns dict of vcpu's affinity from virsh vcpupin output

    :param vm: VM object

    :return: dict of affinity of VM
    """
    vcpupin_output = {}
    vcpupin_affinity = {}
    host_cpu_count = utils.total_cpus_count()
    result = virsh.vcpupin(vm.name)
    for vcpu in results_stdout_52lts(result).strip().split('\n')[2:]:
        vcpupin_output[int(vcpu.split(":")[0])] = vcpu.split(":")[1]
    for vcpu in vcpupin_output:
        vcpupin_affinity[vcpu] = libvirt.cpus_string_to_affinity_list(
            vcpupin_output[vcpu], host_cpu_count)
    return vcpupin_affinity
示例#3
0
def affinity_from_vcpupin(vm):
    """
    Returns dict of vcpu's affinity from virsh vcpupin output

    :param vm: VM object

    :return: dict of affinity of VM
    """
    vcpupin_output = {}
    vcpupin_affinity = {}
    host_cpu_count = utils.total_cpus_count()
    result = virsh.vcpupin(vm.name)
    for vcpu in results_stdout_52lts(result).strip().split('\n')[2:]:
        vcpupin_output[int(vcpu.split(":")[0])] = vcpu.split(":")[1]
    for vcpu in vcpupin_output:
        vcpupin_affinity[vcpu] = libvirt.cpus_string_to_affinity_list(
            vcpupin_output[vcpu], host_cpu_count)
    return vcpupin_affinity
def affinity_from_vcpupin(vm, vcpu=None, options=None):
    """
    Returns dict of vcpu's affinity from virsh vcpupin output

    :param vm: VM object
    :param vcpu: virtual cpu to qeury
    :param options: --live, --current or --config
    :return: dict of affinity of VM
    """
    vcpupin_output = {}
    vcpupin_affinity = {}
    host_cpu_count = utils.total_cpus_count()
    result = virsh.vcpupin(vm.name, vcpu=vcpu, options=options, debug=True)
    for vcpu in results_stdout_52lts(result).strip().split('\n')[2:]:
        # On newer version of libvirt, there is no ':' in
        # vcpupin output anymore
        vcpupin_output[int(vcpu.split()[0].rstrip(':'))] = vcpu.split()[1]
    for vcpu in vcpupin_output:
        vcpupin_affinity[vcpu] = libvirt.cpus_string_to_affinity_list(
            vcpupin_output[vcpu], host_cpu_count)
    return vcpupin_affinity
示例#5
0
def affinity_from_vcpupin(vm, vcpu=None, options=None):
    """
    Returns dict of vcpu's affinity from virsh vcpupin output

    :param vm: VM object
    :param vcpu: virtual cpu to qeury
    :param options: --live, --current or --config
    :return: dict of affinity of VM
    """
    vcpupin_output = {}
    vcpupin_affinity = {}
    host_cpu_count = utils.total_cpus_count()
    result = virsh.vcpupin(vm.name, vcpu=vcpu, options=options, debug=True)
    for vcpu in results_stdout_52lts(result).strip().split('\n')[2:]:
        # On newer version of libvirt, there is no ':' in
        # vcpupin output anymore
        vcpupin_output[int(vcpu.split()[0].rstrip(':'))] = vcpu.split()[1]
    for vcpu in vcpupin_output:
        vcpupin_affinity[vcpu] = libvirt.cpus_string_to_affinity_list(
            vcpupin_output[vcpu], host_cpu_count)
    return vcpupin_affinity
示例#6
0
def affinity_from_xml(vm):
    """
    Returns dict of the vcpu's affinity from
    guest xml

    :param vm: VM object

    :return: dict of affinity of VM
    """
    host_cpu_count = utils.total_cpus_count()
    xml_affinity_list = []
    xml_affinity = {}
    try:
        vmxml = libvirt_xml.VMXML.new_from_dumpxml(vm.name)
        xml_affinity_list = vmxml['cputune'].vcpupins
    except LibvirtXMLNotFoundError:
        logging.debug("No <cputune> element find in domain xml")
        return xml_affinity
    # Store xml_affinity_list to a dict
    for vcpu in xml_affinity_list:
        xml_affinity[vcpu['vcpu']] = libvirt.cpus_string_to_affinity_list(vcpu['cpuset'],
                                                                          host_cpu_count)
    return xml_affinity
示例#7
0
def affinity_from_xml(vm):
    """
    Returns dict of the vcpu's affinity from
    guest xml

    :param vm: VM object

    :return: dict of affinity of VM
    """
    host_cpu_count = utils.total_cpus_count()
    xml_affinity_list = []
    xml_affinity = {}
    try:
        vmxml = libvirt_xml.VMXML.new_from_dumpxml(vm.name)
        xml_affinity_list = vmxml['cputune'].vcpupins
    except LibvirtXMLNotFoundError:
        logging.debug("No <cputune> element find in domain xml")
        return xml_affinity
    # Store xml_affinity_list to a dict
    for vcpu in xml_affinity_list:
        xml_affinity[vcpu['vcpu']] = libvirt.cpus_string_to_affinity_list(
            vcpu['cpuset'], host_cpu_count)
    return xml_affinity
示例#8
0
def check_affinity(vm, expect_vcpupin):
    """
    Check the affinity of vcpus in various libvirt API output

    :param vm: VM object
    :param expect_vcpupin: Expected affinity details

    :return: True if affinity matches from different virsh API outputs,
             False if not
    """
    host_cpu_count = utils.total_cpus_count()
    affinity_xml = affinity_from_xml(vm)
    affinity_vcpupin = affinity_from_vcpupin(vm)
    affinity_vcpuinfo = affinity_from_vcpuinfo(vm)
    result = True

    for vcpu in list(expect_vcpupin.keys()):
        expect_affinity = libvirt.cpus_string_to_affinity_list(
            str(expect_vcpupin[vcpu]), host_cpu_count)
        # Check for vcpuinfo affinity
        if affinity_vcpuinfo[int(vcpu)] != expect_affinity:
            logging.error("CPU affinity in virsh vcpuinfo output"
                          " is unexpected")
            result = False
        # Check for vcpupin affinity
        if affinity_vcpupin[int(vcpu)] != expect_affinity:
            logging.error("Virsh vcpupin output is unexpected")
            result = False
        # Check for affinity in Domain xml
        if affinity_xml:
            if affinity_xml[vcpu] != expect_affinity:
                logging.error("Affinity in domain XML is unexpected")
                result = False
    if result:
        logging.debug("Vcpupin info check pass")
    return result
示例#9
0
def check_affinity(vm, expect_vcpupin):
    """
    Check the affinity of vcpus in various libvirt API output

    :param vm: VM object
    :param expect_vcpupin: Expected affinity details

    :return: True if affinity matches from different virsh API outputs,
             False if not
    """
    host_cpu_count = utils.total_cpus_count()
    affinity_xml = affinity_from_xml(vm)
    affinity_vcpupin = affinity_from_vcpupin(vm)
    affinity_vcpuinfo = affinity_from_vcpuinfo(vm)
    result = True

    for vcpu in list(expect_vcpupin.keys()):
        expect_affinity = libvirt.cpus_string_to_affinity_list(
            str(expect_vcpupin[vcpu]), host_cpu_count)
        # Check for vcpuinfo affinity
        if affinity_vcpuinfo[int(vcpu)] != expect_affinity:
            logging.error("CPU affinity in virsh vcpuinfo output"
                          " is unexpected")
            result = False
        # Check for vcpupin affinity
        if affinity_vcpupin[int(vcpu)] != expect_affinity:
            logging.error("Virsh vcpupin output is unexpected")
            result = False
        # Check for affinity in Domain xml
        if affinity_xml:
            if affinity_xml[vcpu] != expect_affinity:
                logging.error("Affinity in domain XML is unexpected")
                result = False
    if result:
        logging.debug("Vcpupin info check pass")
    return result
示例#10
0
 # output, and vcpupin info(cputune element) in domain xml
 result = virsh.vcpupin(vm.name, ignore_status=True, debug=True)
 libvirt.check_exit_status(result)
 vcpupin_output = result.stdout.strip().splitlines()[2:]
 if expect_vcpupin:
     host_cpu_count = utils.count_cpus()
     xml_affinity_list = []
     xml_affinity = {}
     try:
         xml_affinity_list = vmxml['cputune'].vcpupins
     except LibvirtXMLNotFoundError:
         logging.debug("No <cputune> element find in domain xml")
     # Store xml_affinity_list to a dict
     for vcpu in xml_affinity_list:
         xml_affinity[vcpu['vcpu']] = "".join(
             libvirt.cpus_string_to_affinity_list(vcpu['cpuset'],
                                                  host_cpu_count))
     # Check
     for vcpu in expect_vcpupin.keys():
         expect_affinity = "".join(
             libvirt.cpus_string_to_affinity_list(expect_vcpupin[vcpu],
                                                  host_cpu_count))
         logging.debug("Expect affinity of vcpu %s is: %s", vcpu,
                       expect_affinity)
         # Vcpuinfo
         logging.debug("Virsh vcpuinfo shows affinity of vcpu %s is: %s",
                       vcpu, vcpuinfo_affinity[int(vcpu)])
         if vcpuinfo_affinity[int(vcpu)] != expect_affinity:
             raise error.TestFail("CPU affinity in virsh vcpuinfo output"
                                  " is unexpected")
         # Vcpupin
         vcpupin_affinity = vcpupin_output[int(vcpu)].split(":")[1].strip()
    # output, and vcpupin info(cputune element) in domain xml
    result = virsh.vcpupin(vm.name, ignore_status=True, debug=True)
    libvirt.check_exit_status(result)
    vcpupin_output = result.stdout.strip().splitlines()[2:]
    if expect_vcpupin:
        host_cpu_count = utils.count_cpus()
        xml_affinity_list = []
        xml_affinity = {}
        try:
            xml_affinity_list = vmxml['cputune'].vcpupins
        except LibvirtXMLNotFoundError:
            logging.debug("No <cputune> element find in domain xml")
        # Store xml_affinity_list to a dict
        for vcpu in xml_affinity_list:
            xml_affinity[vcpu['vcpu']] = "".join(
                libvirt.cpus_string_to_affinity_list(vcpu['cpuset'],
                                                     host_cpu_count))
        # Check
        for vcpu in expect_vcpupin.keys():
            if int(vcpu) not in range(len(vcpuinfo_affinity)):
                logging.error('Expect vcpu %s not exist', vcpu)
                continue

            expect_affinity = "".join(libvirt.cpus_string_to_affinity_list(
                expect_vcpupin[vcpu], host_cpu_count))
            logging.debug("Expect affinity of vcpu %s is: %s", vcpu,
                          expect_affinity)
            # Vcpuinfo
            logging.debug("Virsh vcpuinfo shows affinity of vcpu %s is: %s",
                          vcpu, vcpuinfo_affinity[int(vcpu)])
            if vcpuinfo_affinity[int(vcpu)] != expect_affinity:
                raise error.TestFail("CPU affinity in virsh vcpuinfo output"