On Wed, Mar 04, 2015 at 10:52:58AM -0300, Eduardo Habkost wrote: > We need all possible CPUs (including hotplug ones) to be present in the > SRAT when QEMU starts. QEMU already does that correctly today, the only > problem is that when a CPU is omitted from the NUMA configuration, it is > silently assigned to node 0. > > Check if all CPUs up to max_cpus are present in the NUMA configuration > and warn about missing CPUs. > > Make it just a warning, to allow management software to be updated if > necessary. In the future we may make it a fatal error instead.
Michael asked for a command-line example, so I will include this in the commit log when queueing the patch: Correct command-line, no warning: $ qemu-system-x86_64 -smp 2,maxcpus=4 $ qemu-system-x86_64 -smp 2,maxcpus=4 -numa node,cpus=0-3 Incomplete command-line, with warnings: $ qemu-system-x86_64 -smp 2,maxcpus=4 -numa node,cpus=0 qemu-system-x86_64: warning: CPU(s) not present in any NUMA nodes: 1 2 3 qemu-system-x86_64: warning: All CPU(s) up to maxcpus should be described in NUMA config $ qemu-system-x86_64 -smp 2,maxcpus=4 -numa node,cpus=0-2 qemu-system-x86_64: warning: CPU(s) not present in any NUMA nodes: 3 qemu-system-x86_64: warning: All CPU(s) up to maxcpus should be described in NUMA config > > Signed-off-by: Eduardo Habkost <[email protected]> > --- > v1 -> v2: (no changes) > > v2 -> v3: > * Use enumerate_cpus() and error_report() for error message > * Simplify logic using bitmap_full() > > v3 -> v4: > * Clarify error message, mention that all CPUs up to > maxcpus need to be described in NUMA config > > v4 -> v5: > * Commit log update, to make problem description clearer > --- > numa.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/numa.c b/numa.c > index e922265..9b2ba05 100644 > --- a/numa.c > +++ b/numa.c > @@ -200,6 +200,16 @@ static void validate_numa_cpus(void) > bitmap_or(seen_cpus, seen_cpus, > numa_info[i].node_cpu, MAX_CPUMASK_BITS); > } > + > + if (!bitmap_full(seen_cpus, max_cpus)) { > + char *msg; > + bitmap_complement(seen_cpus, seen_cpus, max_cpus); > + msg = enumerate_cpus(seen_cpus, max_cpus); > + error_report("warning: CPU(s) not present in any NUMA nodes: %s", > msg); > + error_report("warning: All CPU(s) up to maxcpus should be described " > + "in NUMA config"); > + g_free(msg); > + } > } > > void parse_numa_opts(void) > -- > 2.1.0 > -- Eduardo
