qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH for-6.2 v2 01/11] machine: Disallow specifying topology param


From: wangyanan (Y)
Subject: Re: [PATCH for-6.2 v2 01/11] machine: Disallow specifying topology parameters as zero
Date: Wed, 21 Jul 2021 20:35:03 +0800
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0

On 2021/7/20 0:46, Daniel P. Berrangé wrote:
On Mon, Jul 19, 2021 at 11:20:33AM +0800, Yanan Wang wrote:
In the SMP configuration, we should either specify a topology
parameter with a reasonable value (equal to or greater than 1)
or just leave it omitted and QEMU will calculate its value.

Configurations which explicitly specify the topology parameters
as zero like "sockets=0" are meaningless, so disallow them.

Suggested-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Yanan Wang <wangyanan55@huawei.com>
---
  hw/core/machine.c | 31 +++++++++++++++++++++++--------
  hw/i386/pc.c      | 29 +++++++++++++++++++++--------
  qapi/machine.json |  4 ++--
  3 files changed, 46 insertions(+), 18 deletions(-)

diff --git a/hw/core/machine.c b/hw/core/machine.c
index 775add0795..d73daa10f4 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -745,11 +745,25 @@ static void smp_parse(MachineState *ms, SMPConfiguration 
*config, Error **errp)
  {
      unsigned cpus    = config->has_cpus ? config->cpus : 0;
      unsigned sockets = config->has_sockets ? config->sockets : 0;
+    unsigned dies    = config->has_dies ? config->dies : 1;
It looks odd to set dies=1 by default at initially, when everything
else is set to 0.  I realize you're just copying existing pc_smp_parse
code in this respect, but I feel like could benefit from a separate
initialization with a comment to explain why we're hardcoding it
to 1....

      unsigned cores   = config->has_cores ? config->cores : 0;
      unsigned threads = config->has_threads ? config->threads : 0;
+    unsigned maxcpus = config->has_maxcpus ? config->maxcpus : 0;
+
+    if ((config->has_cpus && config->cpus == 0) ||
+        (config->has_sockets && config->sockets == 0) ||
+        (config->has_dies && config->dies == 0) ||
+        (config->has_cores && config->cores == 0) ||
+        (config->has_threads && config->threads == 0) ||
+        (config->has_maxcpus && config->maxcpus == 0)) {
+        error_setg(errp, "parameters must be equal to or greater than one"
+                   "if provided");
+        return;
+    }
- if (config->has_dies && config->dies != 0 && config->dies != 1) {
+    if (dies > 1) {
          error_setg(errp, "dies not supported by this machine's CPU topology");
+        return;
      }
.... eg how about here adding

      /* Never try to assign multiple dies when defaulting omitted topology */
      if (dies == 0) {
          dies = 1;
      }
Yeah, I agree to default dies to 0 like the other parameters at initially
and then explicitly assign it to 1 if omitted here. But I think this explicit
assignment should be in pc_smp_parse, because dies is never used in
the calculation in smp_parse yet except the front sanity-check.

So I think what should be updated for this patch is:
1) default dies to 0 at initially both in smp_parse and pc_smp_parse
2) then explicitly assign dies to 1 if it's omitted in pc_smp_parse


diff --git a/qapi/machine.json b/qapi/machine.json
index c3210ee1fb..c11b2e6f73 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -1288,8 +1288,8 @@
  ##
  # @SMPConfiguration:
  #
-# Schema for CPU topology configuration.  "0" or a missing value lets
-# QEMU figure out a suitable value based on the ones that are provided.
+# Schema for CPU topology configuration. A missing value lets QEMU
+# figure out a suitable value based on the ones that are provided.
Hmm, so we had actually documented that '0' had the same semantics
as omitting a parameter. This was done in:

   commit 1e63fe685804dfadddd643bf3860b1a59702d4bf
   Author: Paolo Bonzini <pbonzini@redhat.com>
   Date:   Thu Jun 17 17:53:06 2021 +0200

     machine: pass QAPI struct to mc->smp_parse

which hasn't been released yet.

This was possible, but never documented, with the traditiaonl -smp
impl before it was qapi-ified. I think that historical behaviour
was simply a side effect of the QemuOpts impl rather than an
intentional design, hence not documented.
Agreed.
At the very least I think need to get rid of this bit of docs about
"0" before this release, otherwise we'll have stronger need to
consider a real deprecation process.
If the doc needs to be fixed right now, then I think we'd better resend this
single patch separately for 6.1, including the doc fix and also the related
sanity-check in the parsers. Right?

Thanks,
Yanan
.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]