Now, qemu guest's default cpu model is qemu32/64 and it can be
configured per domain. In some case, host-model mode is suitable for
getting enough performance in the guest because of features from cpu
spec.
This patch adds a config option to qemu.conf to use 'host-model' mode
as default and allow users to use host-model mode in domains on a host.
This is useful because
- Guest owners don't need to touch their domain's config.
- An administrator can reduce an item in their checklist for VM
performance and guarantee all guests should run in the best performance.
Signed-off-by: Ken ICHIKAWA <ichikawa.ken(a)jp.fujitsu.com>
---
src/qemu/qemu.conf | 7 +++++++
src/qemu/qemu_command.c | 6 ++++++
src/qemu/qemu_conf.c | 4 ++++
src/qemu/qemu_conf.h | 1 +
4 files changed, 18 insertions(+)
diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
index dd853c8..5f60237 100644
--- a/src/qemu/qemu.conf
+++ b/src/qemu/qemu.conf
@@ -401,3 +401,10 @@
# Defaults to -1.
#
#seccomp_sandbox = 1
+
+
+# Use 'host-model' for cpu mode when cpu is not defined in
+# domain xml file.
+# 1 = on, 0 = off(default).
+#
+#make_default_cpu_host_model = 1
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 1e96982..8fdac2d 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -4111,6 +4111,12 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
else
default_model = "qemu64";
+ if (def->cpu == NULL && driver->makeDefaultCPUHostModel){
+ if (VIR_ALLOC(def->cpu) < 0)
+ goto no_memory;
+ def->cpu->mode = VIR_CPU_MODE_HOST_MODEL;
+ }
+
if (def->cpu &&
(def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
virCPUCompareResult cmp;
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index dc4d680..92b9c38 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -575,6 +575,10 @@ int qemudLoadDriverConfig(struct qemud_driver *driver,
CHECK_TYPE("seccomp_sandbox", VIR_CONF_LONG);
if (p) driver->seccompSandbox = p->l;
+ p = virConfGetValue(conf, "make_default_cpu_host_model");
+ CHECK_TYPE("make_default_cpu_host_model", VIR_CONF_LONG);
+ if (p) driver->makeDefaultCPUHostModel = p->l;
+
virConfFree(conf);
return 0;
}
diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
index 2c7f70c..b0a76f4 100644
--- a/src/qemu/qemu_conf.h
+++ b/src/qemu/qemu_conf.h
@@ -156,6 +156,7 @@ struct qemud_driver {
int keepAliveInterval;
unsigned int keepAliveCount;
int seccompSandbox;
+ unsigned int makeDefaultCPUHostModel;
};
typedef struct _qemuDomainCmdlineDef qemuDomainCmdlineDef;
--
1.7.11.7