[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 03/26] machine: Add auxcpus=N suboption to -smp
From: |
Dov Murik |
Subject: |
[RFC PATCH 03/26] machine: Add auxcpus=N suboption to -smp |
Date: |
Tue, 2 Mar 2021 15:47:59 -0500 |
Add a notion of auxiliary vcpus to CpuTopology, which will allow to
designate a few vcpus (normally 1) to helper tasks not related to main
guest VM execution.
Example usage for starting a 4-vcpu guest, of which 1 vcpu is marked as
auxiliary:
qemu-system-x86_64 -smp 4,auxcpus=1 ...
Signed-off-by: Dov Murik <dovmurik@linux.vnet.ibm.com>
---
include/hw/boards.h | 1 +
hw/core/machine.c | 7 +++++++
hw/i386/pc.c | 7 +++++++
softmmu/vl.c | 3 +++
4 files changed, 18 insertions(+)
diff --git a/include/hw/boards.h b/include/hw/boards.h
index a46dfe5d1a..7ee5c73510 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -246,6 +246,7 @@ typedef struct CpuTopology {
unsigned int threads;
unsigned int sockets;
unsigned int max_cpus;
+ unsigned int aux_cpus;
} CpuTopology;
/**
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 970046f438..08ea2cedea 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -722,6 +722,7 @@ static void smp_parse(MachineState *ms, QemuOpts *opts)
unsigned sockets = qemu_opt_get_number(opts, "sockets", 0);
unsigned cores = qemu_opt_get_number(opts, "cores", 0);
unsigned threads = qemu_opt_get_number(opts, "threads", 0);
+ unsigned aux_cpus = qemu_opt_get_number(opts, "auxcpus", 0);
/* compute missing values, prefer sockets over cores over threads */
if (cpus == 0 || sockets == 0) {
@@ -767,10 +768,16 @@ static void smp_parse(MachineState *ms, QemuOpts *opts)
exit(1);
}
+ if (aux_cpus >= ms->smp.max_cpus) {
+ error_report("auxcpus must be lower than max_cpus");
+ exit(1);
+ }
+
ms->smp.cpus = cpus;
ms->smp.cores = cores;
ms->smp.threads = threads;
ms->smp.sockets = sockets;
+ ms->smp.aux_cpus = aux_cpus;
}
if (ms->smp.cpus > 1) {
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 8aa85dec54..95d3769842 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -718,6 +718,7 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts)
unsigned dies = qemu_opt_get_number(opts, "dies", 1);
unsigned cores = qemu_opt_get_number(opts, "cores", 0);
unsigned threads = qemu_opt_get_number(opts, "threads", 0);
+ unsigned aux_cpus = qemu_opt_get_number(opts, "auxcpus", 0);
/* compute missing values, prefer sockets over cores over threads */
if (cpus == 0 || sockets == 0) {
@@ -763,10 +764,16 @@ void pc_smp_parse(MachineState *ms, QemuOpts *opts)
exit(1);
}
+ if (aux_cpus >= ms->smp.max_cpus) {
+ error_report("auxcpus must be lower than max_cpus");
+ exit(1);
+ }
+
ms->smp.cpus = cpus;
ms->smp.cores = cores;
ms->smp.threads = threads;
ms->smp.sockets = sockets;
+ ms->smp.aux_cpus = aux_cpus;
x86ms->smp_dies = dies;
}
diff --git a/softmmu/vl.c b/softmmu/vl.c
index b219ce1f35..96f0ff8111 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -720,6 +720,9 @@ static QemuOptsList qemu_smp_opts = {
}, {
.name = "maxcpus",
.type = QEMU_OPT_NUMBER,
+ }, {
+ .name = "auxcpus",
+ .type = QEMU_OPT_NUMBER,
},
{ /*End of list */ }
},
--
2.20.1
- [RFC PATCH 01/26] linux-headers: Add definitions of KVM page encryption bitmap ioctls, (continued)
- [RFC PATCH 01/26] linux-headers: Add definitions of KVM page encryption bitmap ioctls, Dov Murik, 2021/03/02
- [RFC PATCH 02/26] kvm: add support to sync the page encryption state bitmap, Dov Murik, 2021/03/02
- [RFC PATCH 12/26] migration: Add helpers to save confidential RAM, Dov Murik, 2021/03/02
- [RFC PATCH 04/26] hw/boards: Add aux flag to CPUArchId, Dov Murik, 2021/03/02
- [RFC PATCH 11/26] softmmu: Add pause_all_vcpus_except_aux, Dov Murik, 2021/03/02
- [RFC PATCH 16/26] migration: Load confidential guest RAM using migration helper, Dov Murik, 2021/03/02
- [RFC PATCH 06/26] hw/acpi: Don't include auxiliary vcpus in ACPI tables, Dov Murik, 2021/03/02
- [RFC PATCH 13/26] migration: Add helpers to load confidential RAM, Dov Murik, 2021/03/02
- [RFC PATCH 07/26] cpu: Add boolean aux field to CPUState, Dov Murik, 2021/03/02
- [RFC PATCH 23/26] target/i386: Re-sync kvm-clock after confidential guest migration, Dov Murik, 2021/03/02
- [RFC PATCH 03/26] machine: Add auxcpus=N suboption to -smp,
Dov Murik <=
- [RFC PATCH 09/26] softmmu: Don't sync aux vcpus in pre_loadvm, Dov Murik, 2021/03/02
- [RFC PATCH 19/26] migration: Don't sync vcpus when migrating confidential guests, Dov Murik, 2021/03/02
- [RFC PATCH 08/26] hw/i386: Set CPUState.aux=true for auxiliary vcpus, Dov Murik, 2021/03/02
- [RFC PATCH 14/26] migration: Introduce gpa_inside_migration_helper_shared_area, Dov Murik, 2021/03/02
- [RFC PATCH 18/26] migration: Stop non-aux vcpus before copying the last pages, Dov Murik, 2021/03/02
- [RFC PATCH 25/26] target/i386: SEV: Allow migration unless there are no aux vcpus, Dov Murik, 2021/03/02
- [RFC PATCH 24/26] migration: Add start-migrate-incoming QMP command, Dov Murik, 2021/03/02
- [RFC PATCH 15/26] migration: Save confidential guest RAM using migration helper, Dov Murik, 2021/03/02
- [RFC PATCH 26/26] docs: Add confidential guest live migration documentation, Dov Murik, 2021/03/02
- [RFC PATCH 20/26] migration: When starting target, don't sync auxiliary vcpus, Dov Murik, 2021/03/02