|
From: | Pierre Morel |
Subject: | Re: [PATCH v1 1/9] s390x: smp: s390x dedicated smp parsing |
Date: | Fri, 16 Jul 2021 12:57:24 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
On 7/16/21 11:14 AM, Daniel P. Berrangé wrote:
On Fri, Jul 16, 2021 at 10:54:08AM +0200, Cornelia Huck wrote:On Wed, Jul 14 2021, Pierre Morel <pmorel@linux.ibm.com> wrote:We need a s390x dedicated SMP parsing to handle s390x specificities. In this patch we only handle threads, cores and sockets for s390x: - do not support threads, we always have 1 single thread per core - the sockets are filled one after the other with the cores Both these handlings are different from the standard smp_parse functionement and reflect the CPU topology in the simple case where all CPU belong to the same book. Topology levels above sockets, i.e. books, drawers, are not considered at this stage and will be introduced in a later patch. Signed-off-by: Pierre Morel <pmorel@linux.ibm.com> --- hw/s390x/s390-virtio-ccw.c | 42 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index e4b18aef49..899d3a4137 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -582,6 +582,47 @@ static ram_addr_t s390_fixup_ram_size(ram_addr_t sz) return newsz; }+/*+ * In S390CCW machine we do not support threads for now, + * only sockets and cores. + */ +static void s390_smp_parse(MachineState *ms, QemuOpts *opts)It seems you based this on an older version of the code? The current signature of this function since 1e63fe685804 ("machine: pass QAPI struct to mc->smp_parse") is void (*smp_parse)(MachineState *ms, SMPConfiguration *config, Error **errp); That affects your parsing, and also lets you get rid of the ugly exit(1) statements.+{ + unsigned cpus = qemu_opt_get_number(opts, "cpus", 1); + unsigned sockets = qemu_opt_get_number(opts, "sockets", 1); + unsigned cores = qemu_opt_get_number(opts, "cores", 1); + + if (opts) { + if (cpus == 0 || sockets == 0 || cores == 0) {This behaviour looks different from what we do for other targets: if you specify the value as 0, a value is calculated from the other values; here, you error out. It's probably not a good idea to differ.I increasingly worry that we're making a mistake by going down the route of having custom smp_parse implementations per target, as this is showing signs of inconsistent behaviour and error reportings. I think the differences / restrictions have granularity at a different level that is being tested in many cases too. Whether threads != 1 is valid will likely vary depending on what CPU model is chosen, rather than what architecture is chosen. The same is true for dies != 1. We're not really checking this closely even in x86 - for example I can request nonsense such as a 25 year old i486 CPU model with hyperthreading and multiple dies qemu-system-x86_64 -cpu 486 -smp 16,cores=4,dies=2,threads=2 In this patch, there is no error reporting if the user specifies dies != 1 or threads != 1 - it just silently ignores the request which is not good.
yes, I should change this
Some machine types may have constraints on CPU sockets. This can of course all be handled by custom smp_parse impls, but this is ultimately going to lead to alot of duplicated and inconsistent logic I fear. I wonder if we would be better off having machine class callback that can report topology constraints for the current configuration, along lines ofsmp_constraints(MachineState *ms, smp_constraints(MachineState *ms, int *max_sockets, int *max_dies, int *max_cores, int *max_threads)
I find the idee good, but what about making it really machine agnostic by removing names and using a generic
smp_constraints(MachineState *ms, int *nb_levels, int *levels[] ); Level can be replaced by another name like container.The machine could also provide the level/container names according to its internal documentation.
Regards, Pierre
And then have only a single smp_parse impl that takes into account these constraints, to report errors / fill in missing fields / etc ? Regards, Daniel
-- Pierre Morel IBM Lab Boeblingen
[Prev in Thread] | Current Thread | [Next in Thread] |