virt-manager/details: add checking code for CPU threads
This patches adds the support to check the thread # against the selected CPU model. If the selected # of CPU threads > 1 and CPU model does not support hyper-threading, a warning message will be shown. Signed-off-by: Wei Huang <wei@redhat.com>
This commit is contained in:
parent
dea3520ea8
commit
2d6422e10b
|
@ -286,6 +286,18 @@ def _chipset_label_from_machine(machine):
|
||||||
return "i440FX"
|
return "i440FX"
|
||||||
|
|
||||||
|
|
||||||
|
def _warn_cpu_thread_topo(threads, cpu_model):
|
||||||
|
if (threads < 2):
|
||||||
|
return False
|
||||||
|
|
||||||
|
non_ht_cpus = ["athlon", "phenom", "opteron"]
|
||||||
|
|
||||||
|
for cpu in non_ht_cpus:
|
||||||
|
if (cpu in cpu_model.lower()):
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def _firmware_label_from_loader(vm, loader, force_uefi=False):
|
def _firmware_label_from_loader(vm, loader, force_uefi=False):
|
||||||
domcaps = vm.get_domain_capabilities()
|
domcaps = vm.get_domain_capabilities()
|
||||||
if (domcaps.os.loader.values and
|
if (domcaps.os.loader.values and
|
||||||
|
@ -460,7 +472,7 @@ class vmmDetails(vmmGObjectUI):
|
||||||
"on_config_maxvcpus_changed": self.config_maxvcpus_changed,
|
"on_config_maxvcpus_changed": self.config_maxvcpus_changed,
|
||||||
"on_config_vcpupin_changed": lambda *x: self.enable_apply(x, EDIT_CPUSET),
|
"on_config_vcpupin_changed": lambda *x: self.enable_apply(x, EDIT_CPUSET),
|
||||||
"on_config_vcpupin_generate_clicked": self.config_vcpupin_generate,
|
"on_config_vcpupin_generate_clicked": self.config_vcpupin_generate,
|
||||||
"on_cpu_model_changed": lambda *x: self.enable_apply(x, EDIT_CPU),
|
"on_cpu_model_changed": lambda *x: self.config_cpu_model_changed(x),
|
||||||
"on_cpu_copy_host_clicked": self.on_cpu_copy_host_clicked,
|
"on_cpu_copy_host_clicked": self.on_cpu_copy_host_clicked,
|
||||||
"on_cpu_cores_changed": self.config_cpu_topology_changed,
|
"on_cpu_cores_changed": self.config_cpu_topology_changed,
|
||||||
"on_cpu_sockets_changed": self.config_cpu_topology_changed,
|
"on_cpu_sockets_changed": self.config_cpu_topology_changed,
|
||||||
|
@ -1659,6 +1671,15 @@ class vmmDetails(vmmGObjectUI):
|
||||||
self.widget("cpu-model"), not src.get_active())
|
self.widget("cpu-model"), not src.get_active())
|
||||||
self.enable_apply(EDIT_CPU)
|
self.enable_apply(EDIT_CPU)
|
||||||
|
|
||||||
|
def config_cpu_model_changed(self, opque):
|
||||||
|
# Warn about hyper-threading setting
|
||||||
|
cpu_model = self.get_config_cpu_model()
|
||||||
|
threads = self.widget("cpu-threads").get_value()
|
||||||
|
warn_ht = _warn_cpu_thread_topo(threads, cpu_model)
|
||||||
|
self.widget("config-topology-warn-box").set_visible(warn_ht)
|
||||||
|
|
||||||
|
self.enable_apply(EDIT_CPU)
|
||||||
|
|
||||||
def config_cpu_topology_changed(self, ignore=None):
|
def config_cpu_topology_changed(self, ignore=None):
|
||||||
manual_top = self.widget("cpu-topology-table").is_sensitive()
|
manual_top = self.widget("cpu-topology-table").is_sensitive()
|
||||||
self.widget("config-maxvcpus").set_sensitive(not manual_top)
|
self.widget("config-maxvcpus").set_sensitive(not manual_top)
|
||||||
|
@ -1671,6 +1692,12 @@ class vmmDetails(vmmGObjectUI):
|
||||||
if uiutil.spin_get_helper(self.widget("config-vcpus")) > total:
|
if uiutil.spin_get_helper(self.widget("config-vcpus")) > total:
|
||||||
self.widget("config-vcpus").set_value(total)
|
self.widget("config-vcpus").set_value(total)
|
||||||
self.widget("config-maxvcpus").set_value(total)
|
self.widget("config-maxvcpus").set_value(total)
|
||||||
|
|
||||||
|
# Warn about hyper-threading setting
|
||||||
|
cpu_model = self.get_config_cpu_model()
|
||||||
|
warn_ht = _warn_cpu_thread_topo(threads, cpu_model)
|
||||||
|
self.widget("config-topology-warn-box").set_visible(warn_ht)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
maxvcpus = uiutil.spin_get_helper(self.widget("config-maxvcpus"))
|
maxvcpus = uiutil.spin_get_helper(self.widget("config-maxvcpus"))
|
||||||
self.widget("cpu-sockets").set_value(maxvcpus or 1)
|
self.widget("cpu-sockets").set_value(maxvcpus or 1)
|
||||||
|
@ -2531,6 +2558,11 @@ class vmmDetails(vmmGObjectUI):
|
||||||
self.widget("cpu-model"),
|
self.widget("cpu-model"),
|
||||||
virtinst.CPU.SPECIAL_MODE_HV_DEFAULT, 2)
|
virtinst.CPU.SPECIAL_MODE_HV_DEFAULT, 2)
|
||||||
|
|
||||||
|
# Warn about hyper-threading setting
|
||||||
|
cpu_model = self.get_config_cpu_model()
|
||||||
|
warn_ht = _warn_cpu_thread_topo(threads, cpu_model)
|
||||||
|
self.widget("config-topology-warn-box").set_visible(warn_ht)
|
||||||
|
|
||||||
is_host = (cpu.mode == "host-model")
|
is_host = (cpu.mode == "host-model")
|
||||||
self.widget("cpu-copy-host").set_active(bool(is_host))
|
self.widget("cpu-copy-host").set_active(bool(is_host))
|
||||||
self.on_cpu_copy_host_clicked(self.widget("cpu-copy-host"))
|
self.on_cpu_copy_host_clicked(self.widget("cpu-copy-host"))
|
||||||
|
|
Loading…
Reference in New Issue