From: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-s390x@nongnu.org,
"Eduardo Habkost" <eduardo@habkost.net>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"David Hildenbrand" <david@redhat.com>,
"Halil Pasic" <pasic@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Eric Farman" <farman@linux.ibm.com>,
"Thomas Huth" <thuth@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Michael Roth" <michael.roth@amd.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Ilya Leoshkevich" <iii@linux.ibm.com>,
"Cleber Rosa" <crosa@redhat.com>,
"Wainer dos Santos Moschetta" <wainersm@redhat.com>,
"Beraldo Leal" <bleal@redhat.com>,
"Pierre Morel" <pmorel@linux.ibm.com>
Subject: Re: [PATCH v23 01/20] CPU topology: extend with s390 specifics
Date: Thu, 21 Sep 2023 21:02:02 +0200 [thread overview]
Message-ID: <4bcf0aa2c2846f300a2ffcf4257a38f1d39647ef.camel@linux.ibm.com> (raw)
In-Reply-To: <875y45kt8i.fsf@pond.sub.org>
On Wed, 2023-09-20 at 12:57 +0200, Markus Armbruster wrote:
> Nina Schoetterl-Glausch <nsg@linux.ibm.com> writes:
>
> > On Tue, 2023-09-19 at 14:47 +0200, Markus Armbruster wrote:
> > > Nina Schoetterl-Glausch <nsg@linux.ibm.com> writes:
> > >
> > > > From: Pierre Morel <pmorel@linux.ibm.com>
> > > >
> > > > S390 adds two new SMP levels, drawers and books to the CPU
> > > > topology.
> > > > S390 CPUs have specific topology features like dedication and
> > > > entitlement. These indicate to the guest information on host
> > > > vCPU scheduling and help the guest make better scheduling decisions.
> > > >
> > > > Let us provide the SMP properties with books and drawers levels
> > > > and S390 CPU with dedication and entitlement,
> > > >
> > > > Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
> > > > Reviewed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> > > > Co-developed-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> > > > Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> > > > ---
> > > > qapi/machine-common.json | 21 +++++++++++++
> > > > qapi/machine.json | 19 ++++++++++--
> > > > include/hw/boards.h | 10 +++++-
> > > > include/hw/qdev-properties-system.h | 4 +++
> > > > target/s390x/cpu.h | 6 ++++
> > > > hw/core/machine-smp.c | 48 ++++++++++++++++++++++++-----
> > > > hw/core/machine.c | 4 +++
> > > > hw/core/qdev-properties-system.c | 13 ++++++++
> > > > hw/s390x/s390-virtio-ccw.c | 4 +++
> > > > softmmu/vl.c | 6 ++++
> > > > target/s390x/cpu.c | 7 +++++
> > > > qapi/meson.build | 1 +
> > > > qemu-options.hx | 7 +++--
> > > > 13 files changed, 137 insertions(+), 13 deletions(-)
> > > > create mode 100644 qapi/machine-common.json
> > > >
> > > > diff --git a/qapi/machine-common.json b/qapi/machine-common.json
> > > > new file mode 100644
> > > > index 0000000000..e40421bb37
> > > > --- /dev/null
> > > > +++ b/qapi/machine-common.json
> > >
> > > Why do you need a separate QAPI sub-module?
> >
> > See here https://lore.kernel.org/qemu-devel/d8da6f7d1e3addcb63614f548ed77ac1b8895e63.camel@linux.ibm.com/
>
> Quote:
>
> CpuS390Entitlement would be useful in both machine.json and machine-target.json
>
> This is not obvious from this patch. I figure this patch could add it
> to machine.json just fine. The use in machine-target.json in appears
> only in PATCH 08.
Want me to add the rational to the commit message?
>
> because query-cpu-fast is defined in machine.json and set-cpu-topology is defined
> in machine-target.json.
>
> So then the question is where best to define CpuS390Entitlement.
> In machine.json and include machine.json in machine-target.json?
> Or define it in another file and include it from both?
>
> You do the latter in this patch.
>
> I figure the former would be tolerable, too.
>
> That said, having target-specific stuff in machine.json feels... odd.
> Before this series, we have CpuInfoS390 and CpuS390State there, for
> query-cpus-fast. That command returns a list of objects where common
> members are target-independent, and the variant members are
> target-dependent. qmp_query_cpus_fast() uses a CPU method to populate
> the target-dependent members.
>
> I'm not sure splitting query-cpus-fast into a target-dependent and a
> target-independent part is worth the bother.
>
> In this patch, you work with the structure you found. Can't fault you
> for that :)
>
> > > > @@ -0,0 +1,21 @@
> > > > +# -*- Mode: Python -*-
> > > > +# vim: filetype=python
> > > > +#
> > > > +# This work is licensed under the terms of the GNU GPL, version 2 or later.
> > > > +# See the COPYING file in the top-level directory.
> > > > +
> > > > +##
> > > > +# = Machines S390 data types
> > > > +##
> > > > +
> > > > +##
> > > > +# @CpuS390Entitlement:
> > > > +#
> > > > +# An enumeration of cpu entitlements that can be assumed by a virtual
> > > > +# S390 CPU
> > > > +#
> > > > +# Since: 8.2
> > > > +##
> > > > +{ 'enum': 'CpuS390Entitlement',
> > > > + 'prefix': 'S390_CPU_ENTITLEMENT',
> > > > + 'data': [ 'auto', 'low', 'medium', 'high' ] }
> > > > diff --git a/qapi/machine.json b/qapi/machine.json
> > > > index a08b6576ca..a63cb951d2 100644
> > > > --- a/qapi/machine.json
> > > > +++ b/qapi/machine.json
> > > > @@ -9,6 +9,7 @@
> > > ##
> > > # = Machines
> > > > ##
> > > >
> > > > { 'include': 'common.json' }
> > > > +{ 'include': 'machine-common.json' }
> > >
> > > Section structure is borked :)
> > >
> > > Existing section "Machine" now ends at the new "Machines S390 data
> > > types" you pull in here. The contents of below moves from "Machines" to
> > > "Machines S390 data types".
> > >
> > > Before I explain how to avoid this, I'd like to understand why we need a
> > > new sub-module.
> > >
> > > >
> > > > ##
> > > > # @SysEmuTarget:
> > > > @@ -71,7 +72,7 @@
> > > ##
> > > # @CpuInfoFast:
> > > #
> > > # Information about a virtual CPU
> > > #
> > > # @cpu-index: index of the virtual CPU
> > > #
> > > # @qom-path: path to the CPU object in the QOM tree
> > > > #
> > > > # @thread-id: ID of the underlying host thread
> > > > #
> > > > -# @props: properties describing to which node/socket/core/thread
> > > > +# @props: properties describing to which node/drawer/book/socket/core/thread
> > > > # virtual CPU belongs to, provided if supported by board
> > >
> > > Is this description accurate?
> >
> > Kinda, although the wording might not be the best.
> > All the CpuInstanceProperties fields are optional, it's like a superset of possible
> > properties across architectures.
> > Only a subset might be returned by query-cpus-fast.
>
> Let's see whether I got this right...
>
> The members of CpuInstanceProperties are properties you can pass to
> device_add for some targets.
Yes.
>
> The members present in a response from query-cpus-fast are properties
> you must pass to device_add in this VM. Or is that a "may pass"?
On x86 must pass, s390x may pass, I haven't checked other architectures.
s390x shows the defaults calculated.
>
> On what exactly does the set of present members depend? Just the
> target? The machine type? The CPU? Anything else?
The target and the machine I'd say.
On x86 if you have one die per socket you don't need to provide a die_id on device_add.
>
> > Also die and cluster are missing.
>
> Does this need fixing?
Only if we keep the list of properties here.
> > > @props is of type CpuInstanceProperties, shown below. Its documentation
> > > describes it as "properties to be used for hotplugging a CPU instance,
> > > it should be passed by management with device_add command when a CPU is
> > > being hotplugged." Hmm.
> > >
> > > I figure details ("node/drawer/book/socket/core/thread") are better left
> > > to CpuInstanceProperties.
> > >
> > > The "provided if supported by board" part makes no sense to me. If
> > > @props is there, it lists the properties we need to provide with
> > > device_add. What if it's not there? Same as empty list, i.e. we don't
> > > need to provide properties with device_add?
> >
> > There are default values/default logic.
> > For s390x, socket, book, drawer are calculated from the core id
> > if not provided with device_add.
> > Partial specifications are rejected.
>
> Undocumented magic?
Patch 13 documents it:
Default topology usage
----------------------
[...]
When a CPU is defined by the ``-device`` command argument, the
tree topology attributes must all be defined or all not defined.
.. code-block:: bash
-device gen16b-s390x-cpu,drawer-id=1,book-id=1,socket-id=2,core-id=1
or
.. code-block:: bash
-device gen16b-s390x-cpu,core-id=1,dedicated=true
If none of the tree attributes (drawer, book, sockets), are specified
for the ``-device`` argument, like for all CPUs defined with the ``-smp``
command argument the topology tree attributes will be set by simply
adding the CPUs to the topology based on the core-id.
QEMU will not try to resolve collisions and will report an error if the
CPU topology defined explicitly or implicitly on a ``-device``
argument collides with the definition of a CPU implicitly defined
on the ``-smp`` argument.
When the topology modifier attributes are not defined for the
``-device`` command argument they takes following default values:
- dedicated: ``false``
- entitlement: ``medium``
Hot plug
++++++++
New CPUs can be plugged using the device_add hmp command as in:
.. code-block:: bash
(qemu) device_add gen16b-s390x-cpu,core-id=9
The placement of the CPU is derived from the core-id as described above.
The topology can of course also be fully defined:
.. code-block:: bash
(qemu) device_add gen16b-s390x-cpu,drawer-id=1,book-id=1,socket-id=2,core-id=1
>
> > > Not your patch's fault, but let's get this in shape if we can.
>
> [...]
>
next prev parent reply other threads:[~2023-09-21 19:09 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-14 12:06 [PATCH v23 00/20] s390x: CPU Topology Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 01/20] CPU topology: extend with s390 specifics Nina Schoetterl-Glausch
2023-09-19 12:47 ` Markus Armbruster
2023-09-19 17:51 ` Nina Schoetterl-Glausch
2023-09-20 10:57 ` Markus Armbruster
2023-09-21 19:02 ` Nina Schoetterl-Glausch [this message]
2023-09-22 6:13 ` Markus Armbruster
2023-09-25 16:06 ` Nina Schoetterl-Glausch
2023-09-25 17:19 ` Markus Armbruster
2023-09-20 11:11 ` Markus Armbruster
2023-09-22 11:11 ` Nina Schoetterl-Glausch
2023-09-22 13:15 ` Markus Armbruster
2023-09-14 12:06 ` [PATCH v23 02/20] s390x/cpu topology: add topology entries on CPU hotplug Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 03/20] target/s390x/cpu topology: handle STSI(15) and build the SYSIB Nina Schoetterl-Glausch
2023-09-19 13:37 ` Nina Schoetterl-Glausch
2023-09-20 11:13 ` Markus Armbruster
2023-09-14 12:06 ` [PATCH v23 04/20] s390x/sclp: reporting the maximum nested topology entries Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 05/20] s390x/cpu topology: resetting the Topology-Change-Report Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 06/20] s390x/cpu topology: interception of PTF instruction Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 07/20] target/s390x/cpu topology: activate CPU topology Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 08/20] qapi/s390x/cpu topology: set-cpu-topology qmp command Nina Schoetterl-Glausch
2023-09-20 11:36 ` Markus Armbruster
2023-09-25 16:00 ` Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 09/20] machine: adding s390 topology to query-cpu-fast Nina Schoetterl-Glausch
2023-09-20 11:44 ` Markus Armbruster
2023-09-14 12:06 ` [PATCH v23 10/20] machine: adding s390 topology to info hotpluggable-cpus Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 11/20] qapi/s390x/cpu topology: CPU_POLARIZATION_CHANGE qapi event Nina Schoetterl-Glausch
2023-09-20 11:49 ` Markus Armbruster
2023-09-14 12:06 ` [PATCH v23 12/20] qapi/s390x/cpu topology: query-cpu-polarization qmp command Nina Schoetterl-Glausch
2023-09-20 11:51 ` Markus Armbruster
2023-09-14 12:06 ` [PATCH v23 13/20] docs/s390x/cpu topology: document s390x cpu topology Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 14/20] tests/avocado: s390x cpu topology core Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 15/20] tests/avocado: s390x cpu topology polarization Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 16/20] tests/avocado: s390x cpu topology entitlement tests Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 17/20] tests/avocado: s390x cpu topology test dedicated CPU Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 18/20] tests/avocado: s390x cpu topology test socket full Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 19/20] tests/avocado: s390x cpu topology dedicated errors Nina Schoetterl-Glausch
2023-09-14 12:06 ` [PATCH v23 20/20] tests/avocado: s390x cpu topology bad move Nina Schoetterl-Glausch
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=4bcf0aa2c2846f300a2ffcf4257a38f1d39647ef.camel@linux.ibm.com \
--to=nsg@linux.ibm.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=bleal@redhat.com \
--cc=borntraeger@linux.ibm.com \
--cc=crosa@redhat.com \
--cc=david@redhat.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=farman@linux.ibm.com \
--cc=iii@linux.ibm.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=michael.roth@amd.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=pmorel@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
--cc=wainersm@redhat.com \
--cc=wangyanan55@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).