HV_CPU_TYPE = "cpu_type"
HV_CPU_CAP = "cpu_cap"
HV_CPU_WEIGHT = "cpu_weight"
+HV_CPU_CORES = "cpu_cores"
+HV_CPU_THREADS = "cpu_threads"
+HV_CPU_SOCKETS = "cpu_sockets"
HVS_PARAMETER_TYPES = {
HV_CPU_TYPE: VTYPE_STRING,
HV_CPU_CAP: VTYPE_INT,
HV_CPU_WEIGHT: VTYPE_INT,
+ HV_CPU_CORES: VTYPE_INT,
+ HV_CPU_THREADS: VTYPE_INT,
+ HV_CPU_SOCKETS: VTYPE_INT,
}
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
HV_CPU_MASK: CPU_PINNING_ALL,
HV_CPU_TYPE: "",
+ HV_CPU_CORES: 0,
+ HV_CPU_THREADS: 0,
+ HV_CPU_SOCKETS: 0,
},
HT_FAKE: {},
HT_CHROOT: {
hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS),
constants.HV_CPU_MASK: hv_base.OPT_MULTI_CPU_MASK_CHECK,
constants.HV_CPU_TYPE: hv_base.NO_CHECK,
+ constants.HV_CPU_CORES: hv_base.NO_CHECK,
+ constants.HV_CPU_THREADS: hv_base.NO_CHECK,
+ constants.HV_CPU_SOCKETS: hv_base.NO_CHECK,
}
_MIGRATION_STATUS_RE = re.compile("Migration\s+status:\s+(\w+)",
elif arg == "-m":
memory = int(arg_list.pop(0))
elif arg == "-smp":
- vcpus = int(arg_list.pop(0))
+ vcpus = int(arg_list.pop(0).split(",")[0])
if instance is None:
raise errors.HypervisorError("Pid %s doesn't contain a ganeti kvm"
done in L{_ExecuteKVMRuntime}
"""
- # pylint: disable=R0914,R0915
+ # pylint: disable=R0912,R0914,R0915
_, v_major, v_min, _ = self._GetKVMVersion()
+ hvp = instance.hvparams
pidfile = self._InstancePidFile(instance.name)
kvm = constants.KVM_PATH
# used just by the vnc server, if enabled
kvm_cmd.extend(["-name", instance.name])
kvm_cmd.extend(["-m", instance.beparams[constants.BE_MAXMEM]])
- kvm_cmd.extend(["-smp", instance.beparams[constants.BE_VCPUS]])
+
+ smp_list = ["%s" % instance.beparams[constants.BE_VCPUS]]
+ if hvp[constants.HV_CPU_CORES]:
+ smp_list.append("cores=%s" % hvp[constants.HV_CPU_CORES])
+ if hvp[constants.HV_CPU_THREADS]:
+ smp_list.append("threads=%s" % hvp[constants.HV_CPU_THREADS])
+ if hvp[constants.HV_CPU_SOCKETS]:
+ smp_list.append("sockets=%s" % hvp[constants.HV_CPU_SOCKETS])
+
+ kvm_cmd.extend(["-smp", ",".join(smp_list)])
+
kvm_cmd.extend(["-pidfile", pidfile])
kvm_cmd.extend(["-balloon", "virtio"])
kvm_cmd.extend(["-daemonize"])
constants.INSTANCE_REBOOT_EXIT:
kvm_cmd.extend(["-no-reboot"])
- hvp = instance.hvparams
kernel_path = hvp[constants.HV_KERNEL_PATH]
if kernel_path:
boot_disk = boot_cdrom = boot_floppy = boot_network = False
It is set to ``reboot`` by default.
+cpu\_cores
+ Valid for the KVM hypervisor.
+
+ Number of emulated CPU cores.
+
+cpu\_threads
+ Valid for the KVM hypervisor.
+
+ Number of emulated CPU threads.
+
+cpu\_sockets
+ Valid for the KVM hypervisor.
+
+ Number of emulated CPU sockets.
+
The ``-O (--os-parameters)`` option allows customisation of the OS
parameters. The actual parameter names and values depends on the OS