Exemple #1
0
def _numa_get_constraints_manual(nodes, flavor, cpu_list, mem_list):
    cells = []
    totalmem = 0

    availcpus = set(range(flavor.vcpus))

    for node in range(nodes):
        mem = mem_list[node]
        cpuset = cpu_list[node]

        for cpu in cpuset:
            if cpu > (flavor.vcpus - 1):
                raise exception.ImageNUMATopologyCPUOutOfRange(
                    cpunum=cpu, cpumax=(flavor.vcpus - 1))

            if cpu not in availcpus:
                raise exception.ImageNUMATopologyCPUDuplicates(cpunum=cpu)

            availcpus.remove(cpu)

        cells.append(
            objects.InstanceNUMACell(id=node, cpuset=cpuset, memory=mem))
        totalmem = totalmem + mem

    if availcpus:
        raise exception.ImageNUMATopologyCPUsUnassigned(cpuset=str(availcpus))

    if totalmem != flavor.memory_mb:
        raise exception.ImageNUMATopologyMemoryOutOfRange(
            memsize=totalmem, memtotal=flavor.memory_mb)

    return objects.InstanceNUMATopology(cells=cells)
Exemple #2
0
def set_cpus(instance):
    """Set the number of virtual CPUs for the virtual machine.

    :param instance: nova.objects.instance.Instance
    """
    host_info = get_host_info()
    if instance.vcpus > host_info[constants.HOST_PROCESSOR_COUNT]:
        raise nova_exception.ImageNUMATopologyCPUOutOfRange(
            cpunum=instance.vcpus,
            cpumax=host_info[constants.HOST_PROCESSOR_COUNT])

    manage.VBoxManage.modify_vm(instance, constants.FIELD_CPUS,
                                instance.vcpus)
Exemple #3
0
def _numa_get_constraints_manual(nodes, flavor, image_meta):
    cells = []
    totalmem = 0

    availcpus = set(range(flavor['vcpus']))

    for node in range(nodes):
        cpus = _numa_get_flavor_or_image_prop(
            flavor, image_meta, "numa_cpus.%d" % node)
        mem = _numa_get_flavor_or_image_prop(
            flavor, image_meta, "numa_mem.%d" % node)

        # We're expecting both properties set, so
        # raise an error if either is missing
        if cpus is None or mem is None:
            raise exception.ImageNUMATopologyIncomplete()

        mem = int(mem)
        cpuset = parse_cpu_spec(cpus)

        for cpu in cpuset:
            if cpu > (flavor['vcpus'] - 1):
                raise exception.ImageNUMATopologyCPUOutOfRange(
                    cpunum=cpu, cpumax=(flavor['vcpus'] - 1))

            if cpu not in availcpus:
                raise exception.ImageNUMATopologyCPUDuplicates(
                    cpunum=cpu)

            availcpus.remove(cpu)

        cells.append(objects.InstanceNUMACell(
            id=node, cpuset=cpuset, memory=mem))
        totalmem = totalmem + mem

    if availcpus:
        raise exception.ImageNUMATopologyCPUsUnassigned(
            cpuset=str(availcpus))

    if totalmem != flavor['memory_mb']:
        raise exception.ImageNUMATopologyMemoryOutOfRange(
            memsize=totalmem,
            memtotal=flavor['memory_mb'])

    return objects.InstanceNUMATopology(cells=cells)