qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "wangyanan (Y)" <wangyanan55@huawei.com>
To: Andrew Jones <drjones@redhat.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"Thomas Huth" <thuth@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Michael S . Tsirkin" <mst@redhat.com>,
	wanghaibin.wang@huawei.com,
	"Richard Henderson" <richard.henderson@linaro.org>,
	qemu-devel@nongnu.org, "Greg Kurz" <groug@kaod.org>,
	"Halil Pasic" <pasic@linux.ibm.com>,
	"Igor Mammedov" <imammedo@redhat.com>,
	yuzenghui@huawei.com, "Paolo Bonzini" <pbonzini@redhat.com>,
	"David Gibson" <david@gibson.dropbear.id.au>
Subject: Re: [PATCH for-6.2 v2 04/11] machine: Use the computed parameters to calculate omitted cpus
Date: Thu, 22 Jul 2021 12:42:55 +0800	[thread overview]
Message-ID: <ddf16035-d99f-9974-aec6-5bd0466205ed@huawei.com> (raw)
In-Reply-To: <20210719164203.r3f4qdbw3y3ieghb@gator>

On 2021/7/20 0:42, Andrew Jones wrote:
> On Mon, Jul 19, 2021 at 11:20:36AM +0800, Yanan Wang wrote:
>> Currently we directly calculate the omitted cpus based on the already
>> provided parameters. This makes some cmdlines like:
>>    -smp maxcpus=16
>>    -smp sockets=2,maxcpus=16
>>    -smp sockets=2,dies=2,maxcpus=16
>>    -smp sockets=2,cores=4,maxcpus=16
>> not work. We should probably use the computed paramters to calculate
>> cpus when maxcpus is provided while cpus is omitted, which will make
>> above configs start to work.
>>
>> Note: change in this patch won't affect any existing working cmdlines
>> but allows more incomplete configs to be valid.
>>
>> Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
>> ---
>>   hw/core/machine.c | 17 +++++++++--------
>>   1 file changed, 9 insertions(+), 8 deletions(-)
>>
>> diff --git a/hw/core/machine.c b/hw/core/machine.c
>> index c9f15b15a5..668f0a1553 100644
>> --- a/hw/core/machine.c
>> +++ b/hw/core/machine.c
>> @@ -767,26 +767,27 @@ static void smp_parse(MachineState *ms, SMPConfiguration *config, Error **errp)
>>           return;
>>       }
>>   
>> -    /* compute missing values, prefer sockets over cores over threads */
>>       maxcpus = maxcpus > 0 ? maxcpus : cpus;
>>   
>> -    if (cpus == 0) {
>> -        sockets = sockets > 0 ? sockets : 1;
>> -        cores = cores > 0 ? cores : 1;
>> -        threads = threads > 0 ? threads : 1;
>> -        cpus = sockets * dies * cores * threads;
>> -        maxcpus = maxcpus > 0 ? maxcpus : cpus;
>> -    } else if (sockets == 0) {
>> +    /* compute missing values, prefer sockets over cores over threads */
>> +    if (sockets == 0) {
>>           cores = cores > 0 ? cores : 1;
>>           threads = threads > 0 ? threads : 1;
>>           sockets = maxcpus / (dies * cores * threads);
>> +        sockets = sockets > 0 ? sockets : 1;
>>       } else if (cores == 0) {
>>           threads = threads > 0 ? threads : 1;
>>           cores = maxcpus / (sockets * dies * threads);
>> +        cores = cores > 0 ? cores : 1;
>>       } else if (threads == 0) {
>>           threads = maxcpus / (sockets * dies * cores);
>> +        threads = threads > 0 ? threads : 1;
>>       }
> I didn't think we wanted this rounding which this patch adds back into
> cores and threads and now also sockets.
Firstly, I think we can agree that with or without the rounding, the invalid
configs will still be reported as invalid. So the only difference is in 
the err
message (either report 0 or 1 of a fractional parameter). :)

I added back the rounding because this patch indeed need it, we start
to use the computed parameters to calculate cpus, so we have to ensure
that the computed parameters are at least 1. If both cpus and maxcpus
are omitted (e.g. -smp sockets=16), without the rounding we will get
zeroed cpus and maxcpus, and with the rounding we will get valid result
like "cpus=16,sockets=16,cores=1,threads=1,maxcpus=16".

If a "0" or "1" in the error message doesn't make so much difference as
assumed for the error reporting, I suggest that we probably can keep the
rounding which makes the parser code concise.
>>   
>> +    /* use the computed parameters to calculate the omitted cpus */
>> +    cpus = cpus > 0 ? cpus : sockets * dies * cores * threads;
>> +    maxcpus = maxcpus > 0 ? maxcpus : cpus;
> It doesn't really matter, but I think I'd rather write this like
>
>   maxcpus = maxcpus > 0 ? maxcpus : sockets * dies * cores * threads;
>   cpus = cpus > 0 ? cpus : maxcpus;
Yes, there is no functional difference. But I think maybe we'd better keep
some consistence with the "maxcpus = maxcpus > 0 ? maxcpus : cpus"
at top this function and also with the smp doc in qemu-option.hx i.e.
"If omitted the maximum number of CPUs will be set to match the initial
CPU count" ?

Thanks,
Yanan
.
>> +
>>       if (sockets * dies * cores * threads < cpus) {
>>           g_autofree char *dies_msg = g_strdup_printf(
>>               mc->smp_dies_supported ? " * dies (%u)" : "", dies);
>> -- 
>> 2.19.1
>>
> Thanks,
> drew
>
> .



  reply	other threads:[~2021-07-22  4:43 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-19  3:20 [PATCH for-6.2 v2 00/11] machine: smp parsing fixes and improvement Yanan Wang
2021-07-19  3:20 ` [PATCH for-6.2 v2 01/11] machine: Disallow specifying topology parameters as zero Yanan Wang
2021-07-19 16:11   ` Andrew Jones
2021-07-21 12:34     ` wangyanan (Y)
2021-07-19 16:46   ` Daniel P. Berrangé
2021-07-21 12:35     ` wangyanan (Y)
2021-07-19  3:20 ` [PATCH for-6.2 v2 02/11] machine: Make smp_parse generic enough for all arches Yanan Wang
2021-07-19 16:28   ` Andrew Jones
2021-07-19 16:36     ` Daniel P. Berrangé
2021-07-19 16:48       ` Andrew Jones
2021-07-19 16:50         ` Daniel P. Berrangé
2021-07-19 16:53   ` Daniel P. Berrangé
2021-07-22  7:18     ` wangyanan (Y)
2021-07-20  6:57   ` Cornelia Huck
2021-07-22  7:12     ` wangyanan (Y)
2021-07-19  3:20 ` [PATCH for-6.2 v2 03/11] machine: Uniformly use maxcpus to calculate the omitted parameters Yanan Wang
2021-07-19 16:36   ` Andrew Jones
2021-07-22  3:00     ` wangyanan (Y)
2021-07-19  3:20 ` [PATCH for-6.2 v2 04/11] machine: Use the computed parameters to calculate omitted cpus Yanan Wang
2021-07-19 16:42   ` Andrew Jones
2021-07-22  4:42     ` wangyanan (Y) [this message]
2021-07-22 12:27       ` Andrew Jones
2021-07-22 14:59         ` wangyanan (Y)
2021-07-22 15:05           ` Andrew Jones
2021-07-22 15:45             ` wangyanan (Y)
2021-07-19  3:20 ` [PATCH for-6.2 v2 05/11] machine: Improve the error reporting of smp parsing Yanan Wang
2021-07-19 16:53   ` Andrew Jones
2021-07-22  8:10     ` wangyanan (Y)
2021-07-22 12:47       ` Andrew Jones
2021-07-19  3:20 ` [PATCH for-6.2 v2 06/11] hw: Add compat machines for 6.2 Yanan Wang
2021-07-19  3:38   ` David Gibson
2021-07-19 17:00   ` Andrew Jones
2021-07-19 17:03   ` Cornelia Huck
2021-07-19 23:45   ` Pankaj Gupta
2021-07-19  3:20 ` [PATCH for-6.2 v2 07/11] machine: Prefer cores over sockets in smp parsing since 6.2 Yanan Wang
2021-07-19  3:40   ` David Gibson
2021-07-22  5:22     ` wangyanan (Y)
2021-07-19 17:13   ` Andrew Jones
2021-07-22  5:32     ` wangyanan (Y)
2021-07-19  3:20 ` [PATCH for-6.2 v2 08/11] machine: Use ms instead of global current_machine in sanity-check Yanan Wang
2021-07-19 17:14   ` Andrew Jones
2021-07-19  3:20 ` [PATCH for-6.2 v2 09/11] machine: Tweak the order of topology members in struct CpuTopology Yanan Wang
2021-07-19  3:20 ` [PATCH for-6.2 v2 10/11] machine: Split out the smp parsing code Yanan Wang
2021-07-19 17:20   ` Andrew Jones
2021-07-22  6:24     ` wangyanan (Y)
2021-07-22 13:07       ` Andrew Jones
2021-07-22 14:29         ` wangyanan (Y)
2021-07-19  3:20 ` [PATCH for-6.2 v2 11/11] tests/unit: Add a unit test for smp parsing Yanan Wang
2021-07-19 18:57   ` Andrew Jones
2021-07-22  6:15     ` wangyanan (Y)
2021-07-22 13:12       ` Andrew Jones
2021-07-22 14:18         ` wangyanan (Y)
2021-07-19 16:57 ` [PATCH for-6.2 v2 00/11] machine: smp parsing fixes and improvement Cornelia Huck
2021-07-21 12:38   ` wangyanan (Y)
2021-07-21 13:52     ` Pankaj Gupta
2021-07-22  2:22       ` wangyanan (Y)
2021-07-22  7:51     ` Pierre Morel
2021-07-22  8:32       ` wangyanan (Y)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ddf16035-d99f-9974-aec6-5bd0466205ed@huawei.com \
    --to=wangyanan55@huawei.com \
    --cc=berrange@redhat.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=drjones@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=groug@kaod.org \
    --cc=imammedo@redhat.com \
    --cc=mst@redhat.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    --cc=wanghaibin.wang@huawei.com \
    --cc=yuzenghui@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).