From: David Hildenbrand <dahi@linux.vnet.ibm.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: qemu-devel@nongnu.org, jdenemar@redhat.com, imammedo@redhat.com,
cornelia.huck@de.ibm.com, borntraeger@de.ibm.com,
fiuczy@linux.vnet.ibm.com, mimu@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [Patch v1 24/29] qmp: add QMP interface "query-cpu-model-expansion"
Date: Tue, 2 Aug 2016 17:04:05 +0200 [thread overview]
Message-ID: <20160802170405.57718508@thinkpad-w530> (raw)
In-Reply-To: <20160802134529.GE3337@thinpad.lan.raisama.net>
> > +# A CPU model consists of the name of a CPU definition, to which
> > +# delta changes are applied (e.g. features added/removed). Most magic values
> > +# that an architecture might require should be hidden behind the name.
> > +# However, if required, architectures can expose relevant properties.
> > +#
> > +# @name: the name of the CPU definition the model is based on
> > +# @props: #optional a dictionary of properties to be applied
>
> Should we make it explicit that we are talking about QOM
> properties?
Yes makes sense.
>
> > +#
> > +# Since: 2.8.0
> > +##
> > +{ 'struct': 'CpuModelInfo',
> > + 'data': { 'name': 'str',
> > + '*props': 'any' } }
> > +
> > +##
> > +# @CpuModelExpansionType
> > +#
> > +# An enumeration of CPU model expansion types.
> > +#
> > +# @static: Expand to a static CPU model, a combination of a static base
> > +# model name and property delta changes. As the static base model will
> > +# never change, the expanded CPU model will be the same, independant of
> > +# QEMU version or compatibility machines. Therefore, the resulting
>
> We could be more explicit about the guarantees: "independent of
> QEMU version, machine type, machine options, and accelerator
> options".
agreed.
>
> > +# model can be used by tooling without having to specify a
> > +# compatibility machine - e.g. when displaying the "host" model.
> > +# All static CPU models are migration-safe.
>
> This is cool. Unfortunately we are not going to support it in x86
> very soon because we don't have any static CPU models.
Well, it's all about finding a minimum set of features that one can work with.
I assume e.g. a Phenom also always has a minimum set of features?
>
> > +#
> > +# @full: Expand all properties. The produced model is not guaranteed to be
> > +# migration-safe, but allows tooling to get an insight and work with
> > +# model details.
>
> I wonder if we really need to document it broadly as "not
> guaranteed to be migration-safe". The returned data will be
> migration-safe (but not static) if the CPU model being expanded
> is migration-safe, won't it?
Actually I don't think so.
Imagine expanding host: featA=true, featB=false
Now, if going to another QEMU version, there might be featC known.
So -host,featA=on,featB=off will implicitly enable featC and is therefore
not be migration-safe. You would have to disable featC for compatibility
machines on the host model. Is something like that done? I don't think so
(and at least s390x won't do it right now).
But, I can simply get rid of that remark.
>
> Also: I wonder what should be the return value for "name" when
> expansion type is "full" and we don't have any static CPU models
> (like on x86). e.g. returning:
> { name: "host", props: { foo: "on", bar: "on", ... }
> would make the interface not directly usable for the expansion of
> <cpu mode="host-model">. Maybe that means we have to add at least
> one static CPU model to x86, too?
I'd simply copy the name then. That's what I had in mind.
(actually I don't do it on s390x because it's easier to just rely
on the output of our conversion function).
> > +
> > +
> > +##
> > +# @query-cpu-model-expansion:
> > +#
> > +# Expands the given CPU model to different granularities, allowing tooling
> > +# to get an understanding what a specific CPU model looks like in QEMU
> > +# under a certain QEMU machine.
>
> Maybe "expands a given CPU model (or a combination of CPU model +
> additional options) to different granularities".
>
> > +#
> > +# Expanding CPU models is in general independant of the accelerator, except
> > +# for models like "host" that explicitly rely on an accelerator and can
> > +# vary in different configurations.
>
> Unfortunately this is not true in x86. Documenting it this way
> might give people the wrong expectations.
>
> Specific guarantees from arch-specific code could be documented
> somewhere, but: where?
>
> Maybe arch-specific guarantees should actually become
> query-cpu-definitions fields (like we have "static" and
> "migration-safe" today). If people are really interested in
> accelerator-independent data, we need
Okay, so this could be extended later than.
>
>
> > This interface can therefore also be used
> > +# to query the "host" CPU model.
> > +#
> > +# Note: This interface should not be used when global properties of CPU classes
> > +# are changed (e.g. via "-cpu ...").
>
> We could simply enumerate all cases that could affect the return
> value. e.g.:
>
> # The data returned by this command may be affected by:
> #
> # * QEMU version: CPU models may look different depending on the
> # QEMU version. (Except for CPU models reported as "static"
> # in query-cpu-definitions.)
> # * machine-type: CPU model expansion may look different depending
> # on the machine-type. (Except for CPU models reported as "static"
> # in query-cpu-definitions.)
> # * machine options (including accelerator): in some
> # architectures, CPU models may look different depending on
> # machine and accelerator options. (Except for CPU models
> # reported as "static" in query-cpu-definitions.)
> # * "-cpu" arguments and global properties: arguments to the -cpu
> # option and global properties may affect expansion of CPU
> # models. Using query-cpu-model-expansion while using "-cpu"
> # or global properties is not advised.
>
Yes, that's better.
>
> > +#
> > +# s390x supports expanding of all CPU models with all expansion types. Other
> > +# architectures are not supported yet.
>
> I think this paragraph is likely to get obsolete very soon (as
> people may forget to update it when implementing the new
> interface on other architectures). Also, the paragraph is not
> true until patch 27/29 is applied.
>
> Maybe write it as "Some architectures may not support all
> expansion types".
Agreed. And most likely x86 won't support expanding all CPU models I assume?
>
> Patch 27/29 could add "s390x supports both 'static' and 'full'
> expansion types". I wouldn't document it as "supports all
> expansion types" because CpuModelExpansionType may be extended in
> the future.
Agreed.
Thanks!
David
next prev parent reply other threads:[~2016-08-02 15:04 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-02 11:58 [Qemu-devel] [Patch v1 00/29] s390x CPU models: exposing features David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 01/29] qmp: details about CPU definitions in query-cpu-definitions David Hildenbrand
2016-08-02 13:04 ` Eduardo Habkost
2016-08-02 13:23 ` David Hildenbrand
2016-08-02 14:00 ` Eduardo Habkost
2016-08-02 14:27 ` David Hildenbrand
2016-08-02 14:49 ` Eduardo Habkost
2016-08-02 14:53 ` David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 02/29] s390x/cpumodel: "host" and "qemu" as CPU subclasses David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 03/29] s390x/cpumodel: expose CPU class properties David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 04/29] s390x/cpumodel: introduce CPU features David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 05/29] s390x/cpumodel: generate CPU feature lists for CPU models David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 06/29] s390x/cpumodel: generate CPU feature group lists David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 07/29] s390x/cpumodel: introduce CPU feature group definitions David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 08/29] s390x/cpumodel: register defined CPU models as subclasses David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 09/29] s390x/cpumodel: store the CPU model in the CPU instance David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 10/29] s390x/cpumodel: expose features and feature groups as properties David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 11/29] s390x/cpumodel: let the CPU model handle feature checks David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 12/29] s390x/cpumodel: check and apply the CPU model David Hildenbrand
2016-08-02 11:58 ` [Qemu-devel] [Patch v1 13/29] s390x/sclp: factor out preparation of cpu entries David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 14/29] s390x/sclp: introduce sclp feature blocks David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 15/29] s390x/sclp: indicate sclp features David Hildenbrand
2016-08-02 12:31 ` Thomas Huth
2016-08-02 13:00 ` David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 16/29] s390x/sclp: propagate the ibc val(lowest and unblocked ibc) David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 17/29] s390x/sclp: propagate the mha via sclp David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 18/29] s390x/sclp: propagate hmfai David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 19/29] linux-headers: update against kvm/next David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 20/29] s390x/kvm: allow runtime-instrumentation for "none" machine David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 21/29] s390x/kvm: implement CPU model support David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 22/29] s390x/kvm: disable host model for existing compat machines David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 23/29] s390x/kvm: let the CPU model control CMM(A) David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 24/29] qmp: add QMP interface "query-cpu-model-expansion" David Hildenbrand
2016-08-02 13:45 ` Eduardo Habkost
2016-08-02 15:04 ` David Hildenbrand [this message]
2016-08-02 15:38 ` Eduardo Habkost
2016-08-03 7:02 ` David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 25/29] qmp: add QMP interface "query-cpu-model-comparison" David Hildenbrand
2016-08-02 14:45 ` Eduardo Habkost
2016-08-02 15:15 ` David Hildenbrand
2016-08-02 15:47 ` Eduardo Habkost
2016-08-03 7:09 ` David Hildenbrand
2016-08-03 17:39 ` Eduardo Habkost
2016-08-04 7:34 ` David Hildenbrand
2016-08-04 14:36 ` Eduardo Habkost
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 26/29] qmp: add QMP interface "query-cpu-model-baseline" David Hildenbrand
2016-08-04 7:32 ` David Hildenbrand
2016-08-04 14:36 ` Eduardo Habkost
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 27/29] s390x/cpumodel: implement QMP interface "query-cpu-model-expansion" David Hildenbrand
2016-08-02 14:22 ` Eduardo Habkost
2016-08-02 14:28 ` David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 28/29] s390x/cpumodel: implement QMP interface "query-cpu-model-comparison" David Hildenbrand
2016-08-02 11:59 ` [Qemu-devel] [Patch v1 29/29] s390x/cpumodel: implement QMP interface "query-cpu-model-baseline" David Hildenbrand
2016-08-02 17:28 ` [Qemu-devel] [Patch v1 00/29] s390x CPU models: exposing features Eduardo Habkost
2016-08-02 18:12 ` David Hildenbrand
2016-08-02 20:14 ` Eduardo Habkost
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=20160802170405.57718508@thinkpad-w530 \
--to=dahi@linux.vnet.ibm.com \
--cc=borntraeger@de.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=ehabkost@redhat.com \
--cc=fiuczy@linux.vnet.ibm.com \
--cc=imammedo@redhat.com \
--cc=jdenemar@redhat.com \
--cc=mimu@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/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).