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)
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)
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)