mirror of https://gitee.com/openkylin/libvirt.git
qemu: Add support for host CPU modes
This adds support for host-model and host-passthrough CPU modes to qemu driver. The host-passthrough mode is mapped to -cpu host.
This commit is contained in:
parent
c8506d6662
commit
e7201afdf7
|
@ -187,6 +187,7 @@ virCPUDefFormatBuf;
|
||||||
virCPUDefFree;
|
virCPUDefFree;
|
||||||
virCPUDefFreeModel;
|
virCPUDefFreeModel;
|
||||||
virCPUDefParseXML;
|
virCPUDefParseXML;
|
||||||
|
virCPUModeTypeToString;
|
||||||
|
|
||||||
|
|
||||||
# datatypes.h
|
# datatypes.h
|
||||||
|
|
|
@ -145,9 +145,10 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST,
|
||||||
"no-acpi",
|
"no-acpi",
|
||||||
"fsdev-readonly",
|
"fsdev-readonly",
|
||||||
|
|
||||||
"virtio-blk-pci.scsi",
|
"virtio-blk-pci.scsi", /* 80 */
|
||||||
"blk-sg-io",
|
"blk-sg-io",
|
||||||
"drive-copy-on-read",
|
"drive-copy-on-read",
|
||||||
|
"cpu-host",
|
||||||
);
|
);
|
||||||
|
|
||||||
struct qemu_feature_flags {
|
struct qemu_feature_flags {
|
||||||
|
@ -1184,6 +1185,9 @@ qemuCapsComputeCmdFlags(const char *help,
|
||||||
*/
|
*/
|
||||||
if (version >= 12000)
|
if (version >= 12000)
|
||||||
qemuCapsSet(flags, QEMU_CAPS_PCI_ROMBAR);
|
qemuCapsSet(flags, QEMU_CAPS_PCI_ROMBAR);
|
||||||
|
|
||||||
|
if (version >= 11000)
|
||||||
|
qemuCapsSet(flags, QEMU_CAPS_CPU_HOST);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We parse the output of 'qemu -help' to get the QEMU
|
/* We parse the output of 'qemu -help' to get the QEMU
|
||||||
|
|
|
@ -121,6 +121,7 @@ enum qemuCapsFlags {
|
||||||
QEMU_CAPS_VIRTIO_BLK_SCSI = 80, /* virtio-blk-pci.scsi */
|
QEMU_CAPS_VIRTIO_BLK_SCSI = 80, /* virtio-blk-pci.scsi */
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO = 81, /* support for SG_IO commands, reportedly added in 0.11 */
|
QEMU_CAPS_VIRTIO_BLK_SG_IO = 81, /* support for SG_IO commands, reportedly added in 0.11 */
|
||||||
QEMU_CAPS_DRIVE_COPY_ON_READ = 82, /* -drive copy-on-read */
|
QEMU_CAPS_DRIVE_COPY_ON_READ = 82, /* -drive copy-on-read */
|
||||||
|
QEMU_CAPS_CPU_HOST = 83, /* support for -cpu host */
|
||||||
|
|
||||||
QEMU_CAPS_LAST, /* this must always be the last item */
|
QEMU_CAPS_LAST, /* this must always be the last item */
|
||||||
};
|
};
|
||||||
|
|
|
@ -3458,10 +3458,12 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||||
virBitmapPtr qemuCaps,
|
virBitmapPtr qemuCaps,
|
||||||
const struct utsname *ut,
|
const struct utsname *ut,
|
||||||
char **opt,
|
char **opt,
|
||||||
bool *hasHwVirt)
|
bool *hasHwVirt,
|
||||||
|
bool migrating)
|
||||||
{
|
{
|
||||||
const virCPUDefPtr host = driver->caps->host.cpu;
|
const virCPUDefPtr host = driver->caps->host.cpu;
|
||||||
virCPUDefPtr guest = NULL;
|
virCPUDefPtr guest = NULL;
|
||||||
|
virCPUDefPtr cpu = NULL;
|
||||||
unsigned int ncpus = 0;
|
unsigned int ncpus = 0;
|
||||||
const char **cpus = NULL;
|
const char **cpus = NULL;
|
||||||
union cpuData *data = NULL;
|
union cpuData *data = NULL;
|
||||||
|
@ -3471,7 +3473,21 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||||
|
|
||||||
*hasHwVirt = false;
|
*hasHwVirt = false;
|
||||||
|
|
||||||
if (def->cpu && def->cpu->model) {
|
if (def->cpu &&
|
||||||
|
(def->cpu->mode != VIR_CPU_MODE_CUSTOM || def->cpu->model)) {
|
||||||
|
if (!(cpu = virCPUDefCopy(def->cpu)))
|
||||||
|
goto cleanup;
|
||||||
|
if (cpu->mode != VIR_CPU_MODE_CUSTOM &&
|
||||||
|
!migrating &&
|
||||||
|
cpuUpdate(cpu, host) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cpu) {
|
||||||
|
virCPUCompareResult cmp;
|
||||||
|
const char *preferred;
|
||||||
|
int hasSVM;
|
||||||
|
|
||||||
if (host &&
|
if (host &&
|
||||||
qemuCapsProbeCPUModels(emulator, qemuCaps, host->arch,
|
qemuCapsProbeCPUModels(emulator, qemuCaps, host->arch,
|
||||||
&ncpus, &cpus) < 0)
|
&ncpus, &cpus) < 0)
|
||||||
|
@ -3482,18 +3498,12 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||||
_("CPU specification not supported by hypervisor"));
|
_("CPU specification not supported by hypervisor"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (ncpus > 0 && host) {
|
cmp = cpuGuestData(host, cpu, &data);
|
||||||
virCPUCompareResult cmp;
|
|
||||||
const char *preferred;
|
|
||||||
int hasSVM;
|
|
||||||
|
|
||||||
cmp = cpuGuestData(host, def->cpu, &data);
|
|
||||||
switch (cmp) {
|
switch (cmp) {
|
||||||
case VIR_CPU_COMPARE_INCOMPATIBLE:
|
case VIR_CPU_COMPARE_INCOMPATIBLE:
|
||||||
qemuReportError(VIR_ERR_INTERNAL_ERROR,
|
qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
"%s", _("guest CPU is not compatible with host CPU"));
|
_("guest CPU is not compatible with host CPU"));
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case VIR_CPU_COMPARE_ERROR:
|
case VIR_CPU_COMPARE_ERROR:
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -3502,39 +3512,55 @@ qemuBuildCpuArgStr(const struct qemud_driver *driver,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (VIR_ALLOC(guest) < 0 || !(guest->arch = strdup(host->arch)))
|
|
||||||
goto no_memory;
|
|
||||||
|
|
||||||
if (def->cpu->match == VIR_CPU_MATCH_MINIMUM)
|
|
||||||
preferred = host->model;
|
|
||||||
else
|
|
||||||
preferred = def->cpu->model;
|
|
||||||
|
|
||||||
guest->type = VIR_CPU_TYPE_GUEST;
|
|
||||||
guest->fallback = def->cpu->fallback;
|
|
||||||
if (cpuDecode(guest, data, cpus, ncpus, preferred) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
/* Only 'svm' requires --enable-nesting. The nested
|
/* Only 'svm' requires --enable-nesting. The nested
|
||||||
* 'vmx' patches now simply hook off the CPU features
|
* 'vmx' patches now simply hook off the CPU features
|
||||||
*/
|
*/
|
||||||
hasSVM = cpuHasFeature(guest->arch, data, "svm");
|
hasSVM = cpuHasFeature(host->arch, data, "svm");
|
||||||
if (hasSVM < 0)
|
if (hasSVM < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
*hasHwVirt = hasSVM > 0 ? true : false;
|
*hasHwVirt = hasSVM > 0 ? true : false;
|
||||||
|
|
||||||
virBufferAdd(&buf, guest->model, -1);
|
if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
|
||||||
for (i = 0; i < guest->nfeatures; i++) {
|
const char *mode = virCPUModeTypeToString(cpu->mode);
|
||||||
char sign;
|
if (!qemuCapsGet(qemuCaps, QEMU_CAPS_CPU_HOST)) {
|
||||||
if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
|
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
sign = '-';
|
_("CPU mode '%s' is not supported by QEMU"
|
||||||
else
|
" binary"), mode);
|
||||||
sign = '+';
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (def->virtType != VIR_DOMAIN_VIRT_KVM) {
|
||||||
|
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("CPU mode '%s' is only supported with kvm"),
|
||||||
|
mode);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
virBufferAddLit(&buf, "host");
|
||||||
|
} else {
|
||||||
|
if (VIR_ALLOC(guest) < 0 || !(guest->arch = strdup(host->arch)))
|
||||||
|
goto no_memory;
|
||||||
|
|
||||||
virBufferAsprintf(&buf, ",%c%s", sign, guest->features[i].name);
|
if (cpu->match == VIR_CPU_MATCH_MINIMUM)
|
||||||
|
preferred = host->model;
|
||||||
|
else
|
||||||
|
preferred = cpu->model;
|
||||||
|
|
||||||
|
guest->type = VIR_CPU_TYPE_GUEST;
|
||||||
|
guest->fallback = cpu->fallback;
|
||||||
|
if (cpuDecode(guest, data, cpus, ncpus, preferred) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
virBufferAdd(&buf, guest->model, -1);
|
||||||
|
for (i = 0; i < guest->nfeatures; i++) {
|
||||||
|
char sign;
|
||||||
|
if (guest->features[i].policy == VIR_CPU_FEATURE_DISABLE)
|
||||||
|
sign = '-';
|
||||||
|
else
|
||||||
|
sign = '+';
|
||||||
|
|
||||||
|
virBufferAsprintf(&buf, ",%c%s", sign, guest->features[i].name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
/*
|
/*
|
||||||
* Need to force a 32-bit guest CPU type if
|
* Need to force a 32-bit guest CPU type if
|
||||||
*
|
*
|
||||||
|
@ -3565,6 +3591,7 @@ cleanup:
|
||||||
if (guest)
|
if (guest)
|
||||||
cpuDataFree(guest->arch, data);
|
cpuDataFree(guest->arch, data);
|
||||||
virCPUDefFree(guest);
|
virCPUDefFree(guest);
|
||||||
|
virCPUDefFree(cpu);
|
||||||
|
|
||||||
if (cpus) {
|
if (cpus) {
|
||||||
for (i = 0; i < ncpus; i++)
|
for (i = 0; i < ncpus; i++)
|
||||||
|
@ -3787,7 +3814,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||||
virCommandAddArgList(cmd, "-M", def->os.machine, NULL);
|
virCommandAddArgList(cmd, "-M", def->os.machine, NULL);
|
||||||
|
|
||||||
if (qemuBuildCpuArgStr(driver, def, emulator, qemuCaps,
|
if (qemuBuildCpuArgStr(driver, def, emulator, qemuCaps,
|
||||||
&ut, &cpu, &hasHwVirt) < 0)
|
&ut, &cpu, &hasHwVirt, !!migrateFrom) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (cpu) {
|
if (cpu) {
|
||||||
|
|
|
@ -330,7 +330,8 @@ mymain(void)
|
||||||
QEMU_CAPS_NO_SHUTDOWN,
|
QEMU_CAPS_NO_SHUTDOWN,
|
||||||
QEMU_CAPS_PCI_ROMBAR,
|
QEMU_CAPS_PCI_ROMBAR,
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO);
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
|
DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
|
||||||
QEMU_CAPS_VNC_COLON,
|
QEMU_CAPS_VNC_COLON,
|
||||||
QEMU_CAPS_NO_REBOOT,
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@ -378,7 +379,8 @@ mymain(void)
|
||||||
QEMU_CAPS_NO_SHUTDOWN,
|
QEMU_CAPS_NO_SHUTDOWN,
|
||||||
QEMU_CAPS_PCI_ROMBAR,
|
QEMU_CAPS_PCI_ROMBAR,
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO);
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
|
DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
|
||||||
QEMU_CAPS_VNC_COLON,
|
QEMU_CAPS_VNC_COLON,
|
||||||
QEMU_CAPS_NO_REBOOT,
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@ -419,7 +421,8 @@ mymain(void)
|
||||||
QEMU_CAPS_NO_SHUTDOWN,
|
QEMU_CAPS_NO_SHUTDOWN,
|
||||||
QEMU_CAPS_PCI_ROMBAR,
|
QEMU_CAPS_PCI_ROMBAR,
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO);
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
|
DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
|
||||||
QEMU_CAPS_VNC_COLON,
|
QEMU_CAPS_VNC_COLON,
|
||||||
QEMU_CAPS_NO_REBOOT,
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@ -476,7 +479,8 @@ mymain(void)
|
||||||
QEMU_CAPS_NO_SHUTDOWN,
|
QEMU_CAPS_NO_SHUTDOWN,
|
||||||
QEMU_CAPS_PCI_ROMBAR,
|
QEMU_CAPS_PCI_ROMBAR,
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO);
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
|
DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
|
||||||
QEMU_CAPS_VNC_COLON,
|
QEMU_CAPS_VNC_COLON,
|
||||||
QEMU_CAPS_NO_REBOOT,
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@ -530,7 +534,8 @@ mymain(void)
|
||||||
QEMU_CAPS_PCI_ROMBAR,
|
QEMU_CAPS_PCI_ROMBAR,
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SCSI,
|
QEMU_CAPS_VIRTIO_BLK_SCSI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO);
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0,
|
DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0,
|
||||||
QEMU_CAPS_VNC_COLON,
|
QEMU_CAPS_VNC_COLON,
|
||||||
QEMU_CAPS_NO_REBOOT,
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@ -593,7 +598,8 @@ mymain(void)
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SCSI,
|
QEMU_CAPS_VIRTIO_BLK_SCSI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
QEMU_CAPS_DRIVE_COPY_ON_READ);
|
QEMU_CAPS_DRIVE_COPY_ON_READ,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
DO_TEST("qemu-1.0", 1000000, 0, 0,
|
DO_TEST("qemu-1.0", 1000000, 0, 0,
|
||||||
QEMU_CAPS_VNC_COLON,
|
QEMU_CAPS_VNC_COLON,
|
||||||
QEMU_CAPS_NO_REBOOT,
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@ -659,7 +665,8 @@ mymain(void)
|
||||||
QEMU_CAPS_NO_ACPI,
|
QEMU_CAPS_NO_ACPI,
|
||||||
QEMU_CAPS_FSDEV_READONLY,
|
QEMU_CAPS_FSDEV_READONLY,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SCSI,
|
QEMU_CAPS_VIRTIO_BLK_SCSI,
|
||||||
QEMU_CAPS_VIRTIO_BLK_SG_IO);
|
QEMU_CAPS_VIRTIO_BLK_SG_IO,
|
||||||
|
QEMU_CAPS_CPU_HOST);
|
||||||
|
|
||||||
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
candidates="/usr/bin/qemu-kvm
|
||||||
|
/usr/libexec/qemu-kvm
|
||||||
|
/usr/bin/qemu-system-x86_64
|
||||||
|
/usr/bin/qemu"
|
||||||
|
qemu=
|
||||||
|
for candidate in $candidates; do
|
||||||
|
if test -x $candidate; then
|
||||||
|
qemu=$candidate
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
real_qemu()
|
||||||
|
{
|
||||||
|
if test x$qemu != x; then
|
||||||
|
exec $qemu "$@"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
faked_machine()
|
||||||
|
{
|
||||||
|
echo "pc"
|
||||||
|
}
|
||||||
|
|
||||||
|
faked_cpu()
|
||||||
|
{
|
||||||
|
cat <<EOF
|
||||||
|
x86 Opteron_G3
|
||||||
|
x86 Opteron_G2
|
||||||
|
x86 Opteron_G1
|
||||||
|
x86 Nehalem
|
||||||
|
x86 Penryn
|
||||||
|
x86 Conroe
|
||||||
|
x86 [n270]
|
||||||
|
x86 [athlon]
|
||||||
|
x86 [pentium3]
|
||||||
|
x86 [pentium2]
|
||||||
|
x86 [pentium]
|
||||||
|
x86 [486]
|
||||||
|
x86 [coreduo]
|
||||||
|
x86 [qemu32]
|
||||||
|
x86 [kvm64]
|
||||||
|
x86 [core2duo]
|
||||||
|
x86 [phenom]
|
||||||
|
x86 [qemu64]
|
||||||
|
x86 [host]
|
||||||
|
EOF
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
. $(dirname $0)/qemu-lib.sh
|
||||||
|
|
||||||
|
case $* in
|
||||||
|
"-M ?")
|
||||||
|
faked_machine
|
||||||
|
;;
|
||||||
|
"-cpu ?")
|
||||||
|
faked_cpu | grep -Fv '['
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
real_qemu "$@"
|
||||||
|
;;
|
||||||
|
esac
|
|
@ -1,55 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
candidates="/usr/bin/qemu-kvm
|
. $(dirname $0)/qemu-lib.sh
|
||||||
/usr/libexec/qemu-kvm
|
|
||||||
/usr/bin/qemu-system-x86_64
|
|
||||||
/usr/bin/qemu"
|
|
||||||
qemu=
|
|
||||||
for candidate in $candidates; do
|
|
||||||
if test -x $candidate; then
|
|
||||||
qemu=$candidate
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
real_qemu()
|
|
||||||
{
|
|
||||||
if test x$qemu != x; then
|
|
||||||
exec $qemu "$@"
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
faked_machine()
|
|
||||||
{
|
|
||||||
echo "pc"
|
|
||||||
}
|
|
||||||
|
|
||||||
faked_cpu()
|
|
||||||
{
|
|
||||||
cat <<EOF
|
|
||||||
x86 Opteron_G3
|
|
||||||
x86 Opteron_G2
|
|
||||||
x86 Opteron_G1
|
|
||||||
x86 Nehalem
|
|
||||||
x86 Penryn
|
|
||||||
x86 Conroe
|
|
||||||
x86 [n270]
|
|
||||||
x86 [athlon]
|
|
||||||
x86 [pentium3]
|
|
||||||
x86 [pentium2]
|
|
||||||
x86 [pentium]
|
|
||||||
x86 [486]
|
|
||||||
x86 [coreduo]
|
|
||||||
x86 [qemu32]
|
|
||||||
x86 [kvm64]
|
|
||||||
x86 [core2duo]
|
|
||||||
x86 [phenom]
|
|
||||||
x86 [qemu64]
|
|
||||||
x86 [host]
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
case $* in
|
case $* in
|
||||||
"-M ?")
|
"-M ?")
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
LC_ALL=C \
|
||||||
|
PATH=/bin \
|
||||||
|
HOME=/home/test \
|
||||||
|
USER=test \
|
||||||
|
LOGNAME=test \
|
||||||
|
./qemu-supported-cpus.sh \
|
||||||
|
-S \
|
||||||
|
-M pc \
|
||||||
|
-cpu Penryn,+xtpr,+tm2,+est,+vmx,+ds_cpl,+monitor,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme,-sse4.1 \
|
||||||
|
-m 214 \
|
||||||
|
-smp 6 \
|
||||||
|
-nographic \
|
||||||
|
-monitor unix:/tmp/test-monitor,server,nowait \
|
||||||
|
-no-acpi \
|
||||||
|
-boot n \
|
||||||
|
-net none \
|
||||||
|
-serial none \
|
||||||
|
-parallel none \
|
||||||
|
-usb
|
|
@ -0,0 +1,19 @@
|
||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219100</memory>
|
||||||
|
<currentMemory>219100</currentMemory>
|
||||||
|
<vcpu>6</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc'>hvm</type>
|
||||||
|
<boot dev='network'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-model'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/./qemu-supported-cpus.sh</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219100</memory>
|
||||||
|
<currentMemory>219100</currentMemory>
|
||||||
|
<vcpu>6</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc'>hvm</type>
|
||||||
|
<boot dev='network'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-model'>
|
||||||
|
<model fallback='forbid'/>
|
||||||
|
</cpu>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/./qemu-supported-cpus.sh</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -0,0 +1,19 @@
|
||||||
|
LC_ALL=C \
|
||||||
|
PATH=/bin \
|
||||||
|
HOME=/home/test \
|
||||||
|
USER=test \
|
||||||
|
LOGNAME=test \
|
||||||
|
./qemu.sh \
|
||||||
|
-S \
|
||||||
|
-M pc \
|
||||||
|
-cpu core2duo,+lahf_lm,+xtpr,+cx16,+tm2,+est,+vmx,+ds_cpl,+pbe,+tm,+ht,+ss,+acpi,+ds \
|
||||||
|
-m 214 \
|
||||||
|
-smp 6 \
|
||||||
|
-nographic \
|
||||||
|
-monitor unix:/tmp/test-monitor,server,nowait \
|
||||||
|
-no-acpi \
|
||||||
|
-boot n \
|
||||||
|
-net none \
|
||||||
|
-serial none \
|
||||||
|
-parallel none \
|
||||||
|
-usb
|
|
@ -0,0 +1,19 @@
|
||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219100</memory>
|
||||||
|
<currentMemory>219100</currentMemory>
|
||||||
|
<vcpu>6</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc'>hvm</type>
|
||||||
|
<boot dev='network'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-model'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/./qemu.sh</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -0,0 +1,19 @@
|
||||||
|
LC_ALL=C \
|
||||||
|
PATH=/bin \
|
||||||
|
HOME=/home/test \
|
||||||
|
USER=test \
|
||||||
|
LOGNAME=test \
|
||||||
|
./qemu.sh \
|
||||||
|
-S \
|
||||||
|
-M pc \
|
||||||
|
-cpu host \
|
||||||
|
-m 214 \
|
||||||
|
-smp 6 \
|
||||||
|
-nographic \
|
||||||
|
-monitor unix:/tmp/test-monitor,server,nowait \
|
||||||
|
-no-acpi \
|
||||||
|
-boot n \
|
||||||
|
-net none \
|
||||||
|
-serial none \
|
||||||
|
-parallel none \
|
||||||
|
-usb
|
|
@ -0,0 +1,19 @@
|
||||||
|
<domain type='kvm'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219100</memory>
|
||||||
|
<currentMemory>219100</currentMemory>
|
||||||
|
<vcpu>6</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc'>hvm</type>
|
||||||
|
<boot dev='network'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-passthrough'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/./qemu.sh</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219100</memory>
|
||||||
|
<currentMemory>219100</currentMemory>
|
||||||
|
<vcpu>6</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc'>hvm</type>
|
||||||
|
<boot dev='network'/>
|
||||||
|
</os>
|
||||||
|
<cpu mode='host-passthrough'/>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/./qemu.sh</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -690,6 +690,13 @@ mymain(void)
|
||||||
DO_TEST("cpu-strict1", false, NONE);
|
DO_TEST("cpu-strict1", false, NONE);
|
||||||
DO_TEST("cpu-numa1", false, NONE);
|
DO_TEST("cpu-numa1", false, NONE);
|
||||||
DO_TEST("cpu-numa2", false, QEMU_CAPS_SMP_TOPOLOGY);
|
DO_TEST("cpu-numa2", false, QEMU_CAPS_SMP_TOPOLOGY);
|
||||||
|
DO_TEST("cpu-host-model", false, NONE);
|
||||||
|
DO_TEST("cpu-host-model-fallback", false, NONE);
|
||||||
|
DO_TEST_FAILURE("cpu-host-model-nofallback", NONE);
|
||||||
|
DO_TEST("cpu-host-passthrough", false, QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
|
||||||
|
DO_TEST_FAILURE("cpu-host-passthrough", NONE);
|
||||||
|
DO_TEST_FAILURE("cpu-qemu-host-passthrough",
|
||||||
|
QEMU_CAPS_KVM, QEMU_CAPS_CPU_HOST);
|
||||||
|
|
||||||
DO_TEST("memtune", false, QEMU_CAPS_NAME);
|
DO_TEST("memtune", false, QEMU_CAPS_NAME);
|
||||||
DO_TEST("blkiotune", false, QEMU_CAPS_NAME);
|
DO_TEST("blkiotune", false, QEMU_CAPS_NAME);
|
||||||
|
|
Loading…
Reference in New Issue