Message ID | 1462558292-2126-8-git-send-email-ehabkost@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Eduardo Habkost <ehabkost@redhat.com> writes: > Extend query-cpu-definitions schema to allow it to return two new > optional fields: "runnable" and "unavailable-features". > "runnable" will tell if the CPU model can be run in the current > host. "unavailable-features" will contain a list of CPU > properties that are preventing the CPU model from running in the > current host. > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > Cc: Jiri Denemark <jdenemar@redhat.com> > Cc: libvir-list@redhat.com > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > --- > qapi-schema.json | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/qapi-schema.json b/qapi-schema.json > index 54634c4..450e6e7 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -2948,11 +2948,19 @@ > # Virtual CPU definition. > # > # @name: the name of the CPU definition > +# @runnable: true if the CPU model is runnable using the current > +# machine and accelerator. Optional. Since 2.6. > +# @unavailable-features: List of properties that prevent the CPU > +# model from running in the current host, > +# if @runnable is false. Optional. > +# Since 2.6. > # > # Since: 1.2.0 > ## > { 'struct': 'CpuDefinitionInfo', > - 'data': { 'name': 'str' } } > + 'data': { 'name': 'str', > + '*runnable': 'bool', > + '*unavailable-features': [ 'str' ] } } > > ## > # @query-cpu-definitions: Can @unavailable-features be empty or missing when @runnable is true?
> Extend query-cpu-definitions schema to allow it to return two new > optional fields: "runnable" and "unavailable-features". > "runnable" will tell if the CPU model can be run in the current > host. "unavailable-features" will contain a list of CPU > properties that are preventing the CPU model from running in the > current host. > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > Cc: Jiri Denemark <jdenemar@redhat.com> > Cc: libvir-list@redhat.com > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > --- > qapi-schema.json | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/qapi-schema.json b/qapi-schema.json > index 54634c4..450e6e7 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -2948,11 +2948,19 @@ > # Virtual CPU definition. > # > # @name: the name of the CPU definition > +# @runnable: true if the CPU model is runnable using the current > +# machine and accelerator. Optional. Since 2.6. > +# @unavailable-features: List of properties that prevent the CPU > +# model from running in the current host, > +# if @runnable is false. Optional. > +# Since 2.6. Just FYI, on other architectures (e.g. s390x), other conditions (e.g. cpu generation) also define if a CPU model is runnable, so the pure availability of features does not mean that a cpu model is runnable. We could have runnable=false and unavailable-features being an empty list. > # > # Since: 1.2.0 > ## > { 'struct': 'CpuDefinitionInfo', > - 'data': { 'name': 'str' } } > + 'data': { 'name': 'str', > + '*runnable': 'bool', > + '*unavailable-features': [ 'str' ] } } > > ## > # @query-cpu-definitions: David
On Mon, May 09, 2016 at 10:54:53AM +0200, David Hildenbrand wrote: > > Extend query-cpu-definitions schema to allow it to return two new > > optional fields: "runnable" and "unavailable-features". > > "runnable" will tell if the CPU model can be run in the current > > host. "unavailable-features" will contain a list of CPU > > properties that are preventing the CPU model from running in the > > current host. > > > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > > Cc: Jiri Denemark <jdenemar@redhat.com> > > Cc: libvir-list@redhat.com > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > > --- > > qapi-schema.json | 10 +++++++++- > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > > diff --git a/qapi-schema.json b/qapi-schema.json > > index 54634c4..450e6e7 100644 > > --- a/qapi-schema.json > > +++ b/qapi-schema.json > > @@ -2948,11 +2948,19 @@ > > # Virtual CPU definition. > > # > > # @name: the name of the CPU definition > > +# @runnable: true if the CPU model is runnable using the current > > +# machine and accelerator. Optional. Since 2.6. > > +# @unavailable-features: List of properties that prevent the CPU > > +# model from running in the current host, > > +# if @runnable is false. Optional. > > +# Since 2.6. > > Just FYI, on other architectures (e.g. s390x), other conditions (e.g. cpu > generation) also define if a CPU model is runnable, so the pure availability of > features does not mean that a cpu model is runnable. > > We could have runnable=false and unavailable-features being an empty list. Even on those cases, can't the root cause be mapped to a QOM property name (e.g. "cpu-generation"), even if it's property that can't be changed by the user? We could replace this with something more generic, like: @runnability-blockers: List of attributes that prevent the CPU model from running in the current host. A list of QOM property names that represent CPU model attributes that prevent the CPU from running. If the QOM property is read-only, that means the CPU model can never run in the current host. If the property is read-write, it means that it MAY be possible to run the CPU model in the current host if that property is changed. Management software can use it as hints to suggest or choose an alternative for the user, or just to generate meaningful error messages explaining why the CPU model can't be used. (I am looking for a better name than "runnability-blockers").
> On Mon, May 09, 2016 at 10:54:53AM +0200, David Hildenbrand wrote: > > > Extend query-cpu-definitions schema to allow it to return two new > > > optional fields: "runnable" and "unavailable-features". > > > "runnable" will tell if the CPU model can be run in the current > > > host. "unavailable-features" will contain a list of CPU > > > properties that are preventing the CPU model from running in the > > > current host. > > > > > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > > > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > > > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > > > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > > > Cc: Jiri Denemark <jdenemar@redhat.com> > > > Cc: libvir-list@redhat.com > > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > > > --- > > > qapi-schema.json | 10 +++++++++- > > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > > > > diff --git a/qapi-schema.json b/qapi-schema.json > > > index 54634c4..450e6e7 100644 > > > --- a/qapi-schema.json > > > +++ b/qapi-schema.json > > > @@ -2948,11 +2948,19 @@ > > > # Virtual CPU definition. > > > # > > > # @name: the name of the CPU definition > > > +# @runnable: true if the CPU model is runnable using the current > > > +# machine and accelerator. Optional. Since 2.6. > > > +# @unavailable-features: List of properties that prevent the CPU > > > +# model from running in the current host, > > > +# if @runnable is false. Optional. > > > +# Since 2.6. > > > > Just FYI, on other architectures (e.g. s390x), other conditions (e.g. cpu > > generation) also define if a CPU model is runnable, so the pure availability of > > features does not mean that a cpu model is runnable. > > > > We could have runnable=false and unavailable-features being an empty list. > > Even on those cases, can't the root cause be mapped to a QOM > property name (e.g. "cpu-generation"), even if it's property that > can't be changed by the user? In the current state, no. So I think for runnable=false: a) unavailable-features set -> can be made runnable b) unavailable-features not set -> cannot be made runnable would be enough. > > We could replace this with something more generic, like: > > @runnability-blockers: List of attributes that prevent the CPU > model from running in the current host. > > A list of QOM property names that represent CPU model > attributes that prevent the CPU from running. If the QOM > property is read-only, that means the CPU model can never run > in the current host. If the property is read-write, it means > that it MAY be possible to run the CPU model in the current > host if that property is changed. > > Management software can use it as hints to suggest or choose an > alternative for the user, or just to generate meaningful error > messages explaining why the CPU model can't be used. > > (I am looking for a better name than "runnability-blockers"). > David
On Mon, May 09, 2016 at 02:05:05PM +0200, David Hildenbrand wrote: > > On Mon, May 09, 2016 at 10:54:53AM +0200, David Hildenbrand wrote: > > > > Extend query-cpu-definitions schema to allow it to return two new > > > > optional fields: "runnable" and "unavailable-features". > > > > "runnable" will tell if the CPU model can be run in the current > > > > host. "unavailable-features" will contain a list of CPU > > > > properties that are preventing the CPU model from running in the > > > > current host. > > > > > > > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > > > > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > > > > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > > > > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > > > > Cc: Jiri Denemark <jdenemar@redhat.com> > > > > Cc: libvir-list@redhat.com > > > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > > > > --- > > > > qapi-schema.json | 10 +++++++++- > > > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/qapi-schema.json b/qapi-schema.json > > > > index 54634c4..450e6e7 100644 > > > > --- a/qapi-schema.json > > > > +++ b/qapi-schema.json > > > > @@ -2948,11 +2948,19 @@ > > > > # Virtual CPU definition. > > > > # > > > > # @name: the name of the CPU definition > > > > +# @runnable: true if the CPU model is runnable using the current > > > > +# machine and accelerator. Optional. Since 2.6. > > > > +# @unavailable-features: List of properties that prevent the CPU > > > > +# model from running in the current host, > > > > +# if @runnable is false. Optional. > > > > +# Since 2.6. > > > > > > Just FYI, on other architectures (e.g. s390x), other conditions (e.g. cpu > > > generation) also define if a CPU model is runnable, so the pure availability of > > > features does not mean that a cpu model is runnable. > > > > > > We could have runnable=false and unavailable-features being an empty list. > > > > Even on those cases, can't the root cause be mapped to a QOM > > property name (e.g. "cpu-generation"), even if it's property that > > can't be changed by the user? > > In the current state, no. But it could be implemented by s390x in the future, if it's considered useful, right? > > So I think for runnable=false: > a) unavailable-features set -> can be made runnable > b) unavailable-features not set -> cannot be made runnable > > would be enough. I understand it would be enough, but I would like to at least define semantics that would make sense for all architectures in case it gets implemented in the future. Would the proposal below make sense? > > > > We could replace this with something more generic, like: > > > > @runnability-blockers: List of attributes that prevent the CPU > > model from running in the current host. > > > > A list of QOM property names that represent CPU model > > attributes that prevent the CPU from running. If the QOM > > property is read-only, that means the CPU model can never run > > in the current host. If the property is read-write, it means > > that it MAY be possible to run the CPU model in the current > > host if that property is changed. > > > > Management software can use it as hints to suggest or choose an > > alternative for the user, or just to generate meaningful error > > messages explaining why the CPU model can't be used. > > > > (I am looking for a better name than "runnability-blockers"). > > > > > > David >
> > > > > > > > Just FYI, on other architectures (e.g. s390x), other conditions (e.g. cpu > > > > generation) also define if a CPU model is runnable, so the pure availability of > > > > features does not mean that a cpu model is runnable. > > > > > > > > We could have runnable=false and unavailable-features being an empty list. > > > > > > Even on those cases, can't the root cause be mapped to a QOM > > > property name (e.g. "cpu-generation"), even if it's property that > > > can't be changed by the user? > > > > In the current state, no. > > But it could be implemented by s390x in the future, if it's > considered useful, right? Yes, we could fit that into read-only properties if we would ever need it (like cpu-generation you mentioned and cpu-ga-level - both will always be read-only). However we could come up with more optional fields for that in the future. (like unsupported-values or sth. like that). I actually prefer unavailable-features over runnability-blockers. > > > > > So I think for runnable=false: > > a) unavailable-features set -> can be made runnable > > b) unavailable-features not set -> cannot be made runnable > > > > would be enough. > > I understand it would be enough, but I would like to at least > define semantics that would make sense for all architectures in > case it gets implemented in the future. Would the proposal below > make sense? > Yes, I think so. However to really make good hints, upper layers would most likely need more information about the exact problem with a property - maybe something like an enum value per problematic property. (UNAVAILABLE_FEATURE, VALUE_TOO_BIG, VALUE_TOO_SMALL, UNSUPPORTED_VALUE) ... > > > > > > We could replace this with something more generic, like: > > > > > > @runnability-blockers: List of attributes that prevent the CPU > > > model from running in the current host. > > > > > > A list of QOM property names that represent CPU model > > > attributes that prevent the CPU from running. If the QOM > > > property is read-only, that means the CPU model can never run > > > in the current host. If the property is read-write, it means > > > that it MAY be possible to run the CPU model in the current > > > host if that property is changed. > > > > > > Management software can use it as hints to suggest or choose an > > > alternative for the user, or just to generate meaningful error > > > messages explaining why the CPU model can't be used. > > > > > > (I am looking for a better name than "runnability-blockers"). > > > Not sure which approach would be better. David
On 05/06/2016 12:11 PM, Eduardo Habkost wrote: > Extend query-cpu-definitions schema to allow it to return two new > optional fields: "runnable" and "unavailable-features". > "runnable" will tell if the CPU model can be run in the current > host. "unavailable-features" will contain a list of CPU > properties that are preventing the CPU model from running in the > current host. > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > Cc: Jiri Denemark <jdenemar@redhat.com> > Cc: libvir-list@redhat.com > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > --- > qapi-schema.json | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/qapi-schema.json b/qapi-schema.json > index 54634c4..450e6e7 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -2948,11 +2948,19 @@ > # Virtual CPU definition. > # > # @name: the name of the CPU definition > +# @runnable: true if the CPU model is runnable using the current > +# machine and accelerator. Optional. Since 2.6. You've missed 2.6. Also, the typical spelling for a per-member designation is '(since 2.7)', not 'Since 2.7' Why is it optional? Would it hurt to always be present in qemu new enough to understand why it is needed? > +# @unavailable-features: List of properties that prevent the CPU > +# model from running in the current host, > +# if @runnable is false. Optional. > +# Since 2.6. > # > # Since: 1.2.0 > ## > { 'struct': 'CpuDefinitionInfo', > - 'data': { 'name': 'str' } } > + 'data': { 'name': 'str', > + '*runnable': 'bool', > + '*unavailable-features': [ 'str' ] } } > > ## > # @query-cpu-definitions: >
On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: > On 05/06/2016 12:11 PM, Eduardo Habkost wrote: > > Extend query-cpu-definitions schema to allow it to return two new > > optional fields: "runnable" and "unavailable-features". > > "runnable" will tell if the CPU model can be run in the current > > host. "unavailable-features" will contain a list of CPU > > properties that are preventing the CPU model from running in the > > current host. > > > > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > > Cc: Jiri Denemark <jdenemar@redhat.com> > > Cc: libvir-list@redhat.com > > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > > --- > > qapi-schema.json | 10 +++++++++- > > 1 file changed, 9 insertions(+), 1 deletion(-) > > > > diff --git a/qapi-schema.json b/qapi-schema.json > > index 54634c4..450e6e7 100644 > > --- a/qapi-schema.json > > +++ b/qapi-schema.json > > @@ -2948,11 +2948,19 @@ > > # Virtual CPU definition. > > # > > # @name: the name of the CPU definition > > +# @runnable: true if the CPU model is runnable using the current > > +# machine and accelerator. Optional. Since 2.6. > > You've missed 2.6. Also, the typical spelling for a per-member > designation is '(since 2.7)', not 'Since 2.7' Oops! I meant 2.7, and I didn't notice that it was not using the typical format. I will fix it, thanks. > > Why is it optional? Would it hurt to always be present in qemu new > enough to understand why it is needed? It is optional because not all architectures will return the field. This series implements it only for x86.
On Mon, May 09, 2016 at 03:06:18PM +0200, David Hildenbrand wrote: > > > > > > > > > > Just FYI, on other architectures (e.g. s390x), other conditions (e.g. cpu > > > > > generation) also define if a CPU model is runnable, so the pure availability of > > > > > features does not mean that a cpu model is runnable. > > > > > > > > > > We could have runnable=false and unavailable-features being an empty list. > > > > > > > > Even on those cases, can't the root cause be mapped to a QOM > > > > property name (e.g. "cpu-generation"), even if it's property that > > > > can't be changed by the user? > > > > > > In the current state, no. > > > > But it could be implemented by s390x in the future, if it's > > considered useful, right? > > Yes, we could fit that into read-only properties if we would ever need it > (like cpu-generation you mentioned and cpu-ga-level - both will always be > read-only). > > However we could come up with more optional fields for that in the future. > (like unsupported-values or sth. like that). I actually prefer > unavailable-features over runnability-blockers. > > > > > > > > > So I think for runnable=false: > > > a) unavailable-features set -> can be made runnable > > > b) unavailable-features not set -> cannot be made runnable > > > > > > would be enough. > > > > I understand it would be enough, but I would like to at least > > define semantics that would make sense for all architectures in > > case it gets implemented in the future. Would the proposal below > > make sense? > > > > Yes, I think so. However to really make good hints, upper layers would most > likely need more information about the exact problem with a property - > maybe something like an enum value per problematic property. > (UNAVAILABLE_FEATURE, VALUE_TOO_BIG, VALUE_TOO_SMALL, UNSUPPORTED_VALUE) ... If a more powerful interface is needed, we can add extra fields, yes. Although I'm not sure we really start providing that level of detail in a generic way (I guess it will depend on how much arch-independent code libvirt will use to handle runnability information). > > > > > > > > > We could replace this with something more generic, like: > > > > > > > > @runnability-blockers: List of attributes that prevent the CPU > > > > model from running in the current host. > > > > > > > > A list of QOM property names that represent CPU model > > > > attributes that prevent the CPU from running. If the QOM > > > > property is read-only, that means the CPU model can never run > > > > in the current host. If the property is read-write, it means > > > > that it MAY be possible to run the CPU model in the current > > > > host if that property is changed. > > > > > > > > Management software can use it as hints to suggest or choose an > > > > alternative for the user, or just to generate meaningful error > > > > messages explaining why the CPU model can't be used. > > > > > > > > (I am looking for a better name than "runnability-blockers"). > > > > > > Not sure which approach would be better. Note that this is only a change in documentation of the new field, to allow it to cover extra cases without any changes in the interface. I also don't like the "runnability-blockers" name, but I prefer the new documentation I wrote above because it is more explicit about what exactly the field means. I plan to keep the "unavailable-features" name but use the above documentation text in the next version. Does that sound OK?
> > Yes, I think so. However to really make good hints, upper layers would most > > likely need more information about the exact problem with a property - > > maybe something like an enum value per problematic property. > > (UNAVAILABLE_FEATURE, VALUE_TOO_BIG, VALUE_TOO_SMALL, UNSUPPORTED_VALUE) ... > > If a more powerful interface is needed, we can add extra fields, > yes. Although I'm not sure we really start providing that level > of detail in a generic way (I guess it will depend on how much > arch-independent code libvirt will use to handle runnability > information). And I would actually (later) prefer to have something like bool too_new; (name tbd) to cover the cpu-generation problem instead of having to expose read-only properties just for the sake of communicating that a cpu model is simply too new and cannot be made runnable toggling features. > > > > > > > > > > > > > We could replace this with something more generic, like: > > > > > > > > > > @runnability-blockers: List of attributes that prevent the CPU > > > > > model from running in the current host. > > > > > > > > > > A list of QOM property names that represent CPU model > > > > > attributes that prevent the CPU from running. If the QOM > > > > > property is read-only, that means the CPU model can never run > > > > > in the current host. If the property is read-write, it means > > > > > that it MAY be possible to run the CPU model in the current > > > > > host if that property is changed. > > > > > > > > > > Management software can use it as hints to suggest or choose an > > > > > alternative for the user, or just to generate meaningful error > > > > > messages explaining why the CPU model can't be used. > > > > > > > > > > (I am looking for a better name than "runnability-blockers"). > > > > > > > > > Not sure which approach would be better. > > Note that this is only a change in documentation of the new > field, to allow it to cover extra cases without any changes in > the interface. > > I also don't like the "runnability-blockers" name, but I prefer > the new documentation I wrote above because it is more explicit > about what exactly the field means. I plan to keep the > "unavailable-features" name but use the above documentation text > in the next version. Does that sound OK? > I like the read-only part about that, but still you should somehow clarify that we are dealing with boolean properties a.k.a features. At least that's my opinion. Apart from that, this is fine with me! David
Eduardo Habkost <ehabkost@redhat.com> writes: > On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: >> On 05/06/2016 12:11 PM, Eduardo Habkost wrote: >> > Extend query-cpu-definitions schema to allow it to return two new >> > optional fields: "runnable" and "unavailable-features". >> > "runnable" will tell if the CPU model can be run in the current >> > host. "unavailable-features" will contain a list of CPU >> > properties that are preventing the CPU model from running in the >> > current host. >> > >> > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> >> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> >> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> >> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> >> > Cc: Jiri Denemark <jdenemar@redhat.com> >> > Cc: libvir-list@redhat.com >> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> >> > --- >> > qapi-schema.json | 10 +++++++++- >> > 1 file changed, 9 insertions(+), 1 deletion(-) >> > >> > diff --git a/qapi-schema.json b/qapi-schema.json >> > index 54634c4..450e6e7 100644 >> > --- a/qapi-schema.json >> > +++ b/qapi-schema.json >> > @@ -2948,11 +2948,19 @@ >> > # Virtual CPU definition. >> > # >> > # @name: the name of the CPU definition >> > +# @runnable: true if the CPU model is runnable using the current >> > +# machine and accelerator. Optional. Since 2.6. >> >> You've missed 2.6. Also, the typical spelling for a per-member >> designation is '(since 2.7)', not 'Since 2.7' > > Oops! I meant 2.7, and I didn't notice that it was not using the > typical format. I will fix it, thanks. > >> >> Why is it optional? Would it hurt to always be present in qemu new >> enough to understand why it is needed? > > It is optional because not all architectures will return the > field. This series implements it only for x86. Its documentation seems to suggest missing runnable has the same meaning as runnable: false. Is that correct?
On Tue, May 10, 2016 at 10:23:16 +0200, Markus Armbruster wrote: > Eduardo Habkost <ehabkost@redhat.com> writes: > > > On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: > >> On 05/06/2016 12:11 PM, Eduardo Habkost wrote: > >> > Extend query-cpu-definitions schema to allow it to return two new > >> > optional fields: "runnable" and "unavailable-features". > >> > "runnable" will tell if the CPU model can be run in the current > >> > host. "unavailable-features" will contain a list of CPU > >> > properties that are preventing the CPU model from running in the > >> > current host. > >> > > >> > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > >> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > >> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > >> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > >> > Cc: Jiri Denemark <jdenemar@redhat.com> > >> > Cc: libvir-list@redhat.com > >> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > >> > --- > >> > qapi-schema.json | 10 +++++++++- > >> > 1 file changed, 9 insertions(+), 1 deletion(-) > >> > > >> > diff --git a/qapi-schema.json b/qapi-schema.json > >> > index 54634c4..450e6e7 100644 > >> > --- a/qapi-schema.json > >> > +++ b/qapi-schema.json > >> > @@ -2948,11 +2948,19 @@ > >> > # Virtual CPU definition. > >> > # > >> > # @name: the name of the CPU definition > >> > +# @runnable: true if the CPU model is runnable using the current > >> > +# machine and accelerator. Optional. Since 2.6. > >> > >> You've missed 2.6. Also, the typical spelling for a per-member > >> designation is '(since 2.7)', not 'Since 2.7' > > > > Oops! I meant 2.7, and I didn't notice that it was not using the > > typical format. I will fix it, thanks. > > > >> > >> Why is it optional? Would it hurt to always be present in qemu new > >> enough to understand why it is needed? > > > > It is optional because not all architectures will return the > > field. This series implements it only for x86. > > Its documentation seems to suggest missing runnable has the same meaning > as runnable: false. Is that correct? I think it would be a bug if missing runnable had the same meaning as runnable=false. To maintain backward compatibility with older QEMU missing runnable should mean the CPU may or may not be runnable, i.e., we don't know which and the user has to try to figure it out. Jirka
On Tue, May 10, 2016 at 10:23:16AM +0200, Markus Armbruster wrote: > Eduardo Habkost <ehabkost@redhat.com> writes: > > > On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: > >> On 05/06/2016 12:11 PM, Eduardo Habkost wrote: > >> > Extend query-cpu-definitions schema to allow it to return two new > >> > optional fields: "runnable" and "unavailable-features". > >> > "runnable" will tell if the CPU model can be run in the current > >> > host. "unavailable-features" will contain a list of CPU > >> > properties that are preventing the CPU model from running in the > >> > current host. > >> > > >> > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > >> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > >> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > >> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > >> > Cc: Jiri Denemark <jdenemar@redhat.com> > >> > Cc: libvir-list@redhat.com > >> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > >> > --- > >> > qapi-schema.json | 10 +++++++++- > >> > 1 file changed, 9 insertions(+), 1 deletion(-) > >> > > >> > diff --git a/qapi-schema.json b/qapi-schema.json > >> > index 54634c4..450e6e7 100644 > >> > --- a/qapi-schema.json > >> > +++ b/qapi-schema.json > >> > @@ -2948,11 +2948,19 @@ > >> > # Virtual CPU definition. > >> > # > >> > # @name: the name of the CPU definition > >> > +# @runnable: true if the CPU model is runnable using the current > >> > +# machine and accelerator. Optional. Since 2.6. > >> > >> You've missed 2.6. Also, the typical spelling for a per-member > >> designation is '(since 2.7)', not 'Since 2.7' > > > > Oops! I meant 2.7, and I didn't notice that it was not using the > > typical format. I will fix it, thanks. > > > >> > >> Why is it optional? Would it hurt to always be present in qemu new > >> enough to understand why it is needed? > > > > It is optional because not all architectures will return the > > field. This series implements it only for x86. > > Its documentation seems to suggest missing runnable has the same meaning > as runnable: false. Is that correct? No, it means the architecture code doesn't implement the feature yet and we don't know if the CPU model is runnable or not. The day we implement the new field in all architectures, we can stop making it optional.
On Tue, May 10, 2016 at 08:32:53AM +0200, David Hildenbrand wrote: > > > > Yes, I think so. However to really make good hints, upper layers would most > > > likely need more information about the exact problem with a property - > > > maybe something like an enum value per problematic property. > > > (UNAVAILABLE_FEATURE, VALUE_TOO_BIG, VALUE_TOO_SMALL, UNSUPPORTED_VALUE) ... > > > > If a more powerful interface is needed, we can add extra fields, > > yes. Although I'm not sure we really start providing that level > > of detail in a generic way (I guess it will depend on how much > > arch-independent code libvirt will use to handle runnability > > information). > > And I would actually (later) prefer to have something like > bool too_new; (name tbd) > > to cover the cpu-generation problem instead of having to expose read-only > properties just for the sake of communicating that a cpu model is simply too new > and cannot be made runnable toggling features. That could work. Or a "CPUNotRunnableReason" enum with values like MISSING_FEATURES, TOO_NEW, etc. > > > > > > > > > > > > > > > > > > We could replace this with something more generic, like: > > > > > > > > > > > > @runnability-blockers: List of attributes that prevent the CPU > > > > > > model from running in the current host. > > > > > > > > > > > > A list of QOM property names that represent CPU model > > > > > > attributes that prevent the CPU from running. If the QOM > > > > > > property is read-only, that means the CPU model can never run > > > > > > in the current host. If the property is read-write, it means > > > > > > that it MAY be possible to run the CPU model in the current > > > > > > host if that property is changed. > > > > > > > > > > > > Management software can use it as hints to suggest or choose an > > > > > > alternative for the user, or just to generate meaningful error > > > > > > messages explaining why the CPU model can't be used. > > > > > > > > > > > > (I am looking for a better name than "runnability-blockers"). > > > > > > > > > > > > Not sure which approach would be better. > > > > Note that this is only a change in documentation of the new > > field, to allow it to cover extra cases without any changes in > > the interface. > > > > I also don't like the "runnability-blockers" name, but I prefer > > the new documentation I wrote above because it is more explicit > > about what exactly the field means. I plan to keep the > > "unavailable-features" name but use the above documentation text > > in the next version. Does that sound OK? > > > > I like the read-only part about that, but still you should somehow clarify that > we are dealing with boolean properties a.k.a features. At least that's my > opinion. The point is to not restrict it to boolean properties, if the architecture code wants to return other properties. The information is less useful for them, but they would still be allowed.
Eduardo Habkost <ehabkost@redhat.com> writes: > On Tue, May 10, 2016 at 10:23:16AM +0200, Markus Armbruster wrote: >> Eduardo Habkost <ehabkost@redhat.com> writes: >> >> > On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: >> >> On 05/06/2016 12:11 PM, Eduardo Habkost wrote: >> >> > Extend query-cpu-definitions schema to allow it to return two new >> >> > optional fields: "runnable" and "unavailable-features". >> >> > "runnable" will tell if the CPU model can be run in the current >> >> > host. "unavailable-features" will contain a list of CPU >> >> > properties that are preventing the CPU model from running in the >> >> > current host. >> >> > >> >> > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> >> >> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> >> >> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> >> >> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> >> >> > Cc: Jiri Denemark <jdenemar@redhat.com> >> >> > Cc: libvir-list@redhat.com >> >> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> >> >> > --- >> >> > qapi-schema.json | 10 +++++++++- >> >> > 1 file changed, 9 insertions(+), 1 deletion(-) >> >> > >> >> > diff --git a/qapi-schema.json b/qapi-schema.json >> >> > index 54634c4..450e6e7 100644 >> >> > --- a/qapi-schema.json >> >> > +++ b/qapi-schema.json >> >> > @@ -2948,11 +2948,19 @@ >> >> > # Virtual CPU definition. >> >> > # >> >> > # @name: the name of the CPU definition >> >> > +# @runnable: true if the CPU model is runnable using the current >> >> > +# machine and accelerator. Optional. Since 2.6. >> >> >> >> You've missed 2.6. Also, the typical spelling for a per-member >> >> designation is '(since 2.7)', not 'Since 2.7' >> > >> > Oops! I meant 2.7, and I didn't notice that it was not using the >> > typical format. I will fix it, thanks. >> > >> >> >> >> Why is it optional? Would it hurt to always be present in qemu new >> >> enough to understand why it is needed? >> > >> > It is optional because not all architectures will return the >> > field. This series implements it only for x86. >> >> Its documentation seems to suggest missing runnable has the same meaning >> as runnable: false. Is that correct? > > No, it means the architecture code doesn't implement the feature > yet and we don't know if the CPU model is runnable or not. > > The day we implement the new field in all architectures, we can > stop making it optional. Please clarify that in the docs. Here's my try: # @runnable: #optional whether the CPU model us usable with the current # machine and accelerator, only present if we know (since 2.6)
On Wed, May 11, 2016 at 09:11:33AM +0200, Markus Armbruster wrote: > Eduardo Habkost <ehabkost@redhat.com> writes: > > > On Tue, May 10, 2016 at 10:23:16AM +0200, Markus Armbruster wrote: > >> Eduardo Habkost <ehabkost@redhat.com> writes: > >> > >> > On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: > >> >> On 05/06/2016 12:11 PM, Eduardo Habkost wrote: > >> >> > Extend query-cpu-definitions schema to allow it to return two new > >> >> > optional fields: "runnable" and "unavailable-features". > >> >> > "runnable" will tell if the CPU model can be run in the current > >> >> > host. "unavailable-features" will contain a list of CPU > >> >> > properties that are preventing the CPU model from running in the > >> >> > current host. > >> >> > > >> >> > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> > >> >> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> > >> >> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> > >> >> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> > >> >> > Cc: Jiri Denemark <jdenemar@redhat.com> > >> >> > Cc: libvir-list@redhat.com > >> >> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> > >> >> > --- > >> >> > qapi-schema.json | 10 +++++++++- > >> >> > 1 file changed, 9 insertions(+), 1 deletion(-) > >> >> > > >> >> > diff --git a/qapi-schema.json b/qapi-schema.json > >> >> > index 54634c4..450e6e7 100644 > >> >> > --- a/qapi-schema.json > >> >> > +++ b/qapi-schema.json > >> >> > @@ -2948,11 +2948,19 @@ > >> >> > # Virtual CPU definition. > >> >> > # > >> >> > # @name: the name of the CPU definition > >> >> > +# @runnable: true if the CPU model is runnable using the current > >> >> > +# machine and accelerator. Optional. Since 2.6. > >> >> > >> >> You've missed 2.6. Also, the typical spelling for a per-member > >> >> designation is '(since 2.7)', not 'Since 2.7' > >> > > >> > Oops! I meant 2.7, and I didn't notice that it was not using the > >> > typical format. I will fix it, thanks. > >> > > >> >> > >> >> Why is it optional? Would it hurt to always be present in qemu new > >> >> enough to understand why it is needed? > >> > > >> > It is optional because not all architectures will return the > >> > field. This series implements it only for x86. > >> > >> Its documentation seems to suggest missing runnable has the same meaning > >> as runnable: false. Is that correct? > > > > No, it means the architecture code doesn't implement the feature > > yet and we don't know if the CPU model is runnable or not. > > > > The day we implement the new field in all architectures, we can > > stop making it optional. > > Please clarify that in the docs. Here's my try: > > # @runnable: #optional whether the CPU model us usable with the current > # machine and accelerator, only present if we know (since 2.6) Updated to: ## # @CpuDefinitionInfo: # # Virtual CPU definition. # # @name: the name of the CPU definition # @runnable: #optional. whether the CPU model us usable with the # current machine and accelerator. Omitted if we don't # know the answer. (since 2.7) # @unavailable-features: List of attributes that prevent the CPU # model from running in the current host. # (since 2.7) # # @unavailable-features is a list of QOM property names that # represent CPU model attributes that prevent the CPU from running. # If the QOM property is read-only, that means the CPU model can # never run in the current host. If the property is read-write, it # means that it MAY be possible to run the CPU model in the current # host if that property is changed. Management software can use it # as hints to suggest or choose an alternative for the user, or # just to generate meaningful error messages explaining why the CPU # model can't be used. # # Since: 1.2.0 ##
> Updated to: > > ## > # @CpuDefinitionInfo: > # > # Virtual CPU definition. > # > # @name: the name of the CPU definition > # @runnable: #optional. whether the CPU model us usable with the > # current machine and accelerator. Omitted if we don't > # know the answer. (since 2.7) > # @unavailable-features: List of attributes that prevent the CPU "List of properties" ? > # model from running in the current host. > # (since 2.7) > # > # @unavailable-features is a list of QOM property names that > # represent CPU model attributes that prevent the CPU from running. > # If the QOM property is read-only, that means the CPU model can > # never run in the current host. If the property is read-write, it > # means that it MAY be possible to run the CPU model in the current > # host if that property is changed. Management software can use it > # as hints to suggest or choose an alternative for the user, or > # just to generate meaningful error messages explaining why the CPU > # model can't be used. > # > # Since: 1.2.0 > ## > what about changing unavailable-features to problematic-properties responsible-properties ... anything else making clear that we are dealing with properties, not only features? Apart from that, sounds good to me. David
On Wed, May 11, 2016 at 16:35:50 -0300, Eduardo Habkost wrote: > # @CpuDefinitionInfo: > # > # Virtual CPU definition. > # > # @name: the name of the CPU definition > # @runnable: #optional. whether the CPU model us usable with the s/ us / is / > # current machine and accelerator. Omitted if we don't > # know the answer. (since 2.7) > # @unavailable-features: List of attributes that prevent the CPU > # model from running in the current host. > # (since 2.7) > # > # @unavailable-features is a list of QOM property names that > # represent CPU model attributes that prevent the CPU from running. > # If the QOM property is read-only, that means the CPU model can > # never run in the current host. If the property is read-write, it > # means that it MAY be possible to run the CPU model in the current > # host if that property is changed. Management software can use it > # as hints to suggest or choose an alternative for the user, or > # just to generate meaningful error messages explaining why the CPU > # model can't be used. Any chance this could be extended to provide data about every single machine type rather than just the current one? Jirka
Eduardo Habkost <ehabkost@redhat.com> writes: > On Wed, May 11, 2016 at 09:11:33AM +0200, Markus Armbruster wrote: >> Eduardo Habkost <ehabkost@redhat.com> writes: >> >> > On Tue, May 10, 2016 at 10:23:16AM +0200, Markus Armbruster wrote: >> >> Eduardo Habkost <ehabkost@redhat.com> writes: >> >> >> >> > On Mon, May 09, 2016 at 09:20:15AM -0600, Eric Blake wrote: >> >> >> On 05/06/2016 12:11 PM, Eduardo Habkost wrote: >> >> >> > Extend query-cpu-definitions schema to allow it to return two new >> >> >> > optional fields: "runnable" and "unavailable-features". >> >> >> > "runnable" will tell if the CPU model can be run in the current >> >> >> > host. "unavailable-features" will contain a list of CPU >> >> >> > properties that are preventing the CPU model from running in the >> >> >> > current host. >> >> >> > >> >> >> > Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> >> >> >> > Cc: Michael Mueller <mimu@linux.vnet.ibm.com> >> >> >> > Cc: Christian Borntraeger <borntraeger@de.ibm.com> >> >> >> > Cc: Cornelia Huck <cornelia.huck@de.ibm.com> >> >> >> > Cc: Jiri Denemark <jdenemar@redhat.com> >> >> >> > Cc: libvir-list@redhat.com >> >> >> > Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> >> >> >> > --- >> >> >> > qapi-schema.json | 10 +++++++++- >> >> >> > 1 file changed, 9 insertions(+), 1 deletion(-) >> >> >> > >> >> >> > diff --git a/qapi-schema.json b/qapi-schema.json >> >> >> > index 54634c4..450e6e7 100644 >> >> >> > --- a/qapi-schema.json >> >> >> > +++ b/qapi-schema.json >> >> >> > @@ -2948,11 +2948,19 @@ >> >> >> > # Virtual CPU definition. >> >> >> > # >> >> >> > # @name: the name of the CPU definition >> >> >> > +# @runnable: true if the CPU model is runnable using the current >> >> >> > +# machine and accelerator. Optional. Since 2.6. >> >> >> >> >> >> You've missed 2.6. Also, the typical spelling for a per-member >> >> >> designation is '(since 2.7)', not 'Since 2.7' >> >> > >> >> > Oops! I meant 2.7, and I didn't notice that it was not using the >> >> > typical format. I will fix it, thanks. >> >> > >> >> >> >> >> >> Why is it optional? Would it hurt to always be present in qemu new >> >> >> enough to understand why it is needed? >> >> > >> >> > It is optional because not all architectures will return the >> >> > field. This series implements it only for x86. >> >> >> >> Its documentation seems to suggest missing runnable has the same meaning >> >> as runnable: false. Is that correct? >> > >> > No, it means the architecture code doesn't implement the feature >> > yet and we don't know if the CPU model is runnable or not. >> > >> > The day we implement the new field in all architectures, we can >> > stop making it optional. >> >> Please clarify that in the docs. Here's my try: >> >> # @runnable: #optional whether the CPU model us usable with the current >> # machine and accelerator, only present if we know (since 2.6) > > Updated to: > > ## > # @CpuDefinitionInfo: > # > # Virtual CPU definition. > # > # @name: the name of the CPU definition > # @runnable: #optional. whether the CPU model us usable with the > # current machine and accelerator. Omitted if we don't > # know the answer. (since 2.7) > # @unavailable-features: List of attributes that prevent the CPU Unless you drop the * sigil from '*unavailable-features', you need to insert #optional after the colon. > # model from running in the current host. > # (since 2.7) > # > # @unavailable-features is a list of QOM property names that > # represent CPU model attributes that prevent the CPU from running. > # If the QOM property is read-only, that means the CPU model can > # never run in the current host. If the property is read-write, it > # means that it MAY be possible to run the CPU model in the current > # host if that property is changed. Management software can use it > # as hints to suggest or choose an alternative for the user, or > # just to generate meaningful error messages explaining why the CPU > # model can't be used. > # > # Since: 1.2.0 > ## Better. Next issue: how @runnable and @unavailable-features are related isn't fully documented. Here's my guess: Combinations possible? @runnable @unavailable-features absent false true absent yes ? ? present, empty ? ? ? present, non-empty ? yes no The '?' need to be answered, too.
On Thu, May 12, 2016 at 09:19:48AM +0200, Jiri Denemark wrote: > On Wed, May 11, 2016 at 16:35:50 -0300, Eduardo Habkost wrote: > > # @CpuDefinitionInfo: > > # > > # Virtual CPU definition. > > # > > # @name: the name of the CPU definition > > # @runnable: #optional. whether the CPU model us usable with the > > s/ us / is / Thanks! > > > # current machine and accelerator. Omitted if we don't > > # know the answer. (since 2.7) > > # @unavailable-features: List of attributes that prevent the CPU > > # model from running in the current host. > > # (since 2.7) > > # > > # @unavailable-features is a list of QOM property names that > > # represent CPU model attributes that prevent the CPU from running. > > # If the QOM property is read-only, that means the CPU model can > > # never run in the current host. If the property is read-write, it > > # means that it MAY be possible to run the CPU model in the current > > # host if that property is changed. Management software can use it > > # as hints to suggest or choose an alternative for the user, or > > # just to generate meaningful error messages explaining why the CPU > > # model can't be used. > > Any chance this could be extended to provide data about every single > machine type rather than just the current one? I want to do that, but it would require reorganizing CPU/machine/accelerator code to allow probing to happen without depending on global data (including: machine state, accelerator state, global properties). This will probably take a while to be implemented. But: at least for x86, we now guarantee that runnability shouldn't change depending on the machine-type. If a CPU model is runnable with a machine version, it should be runnable with other versions of the same family. That guarantee is not documented above because I still don't know if we can enforce it on all other architectures.
Just noticed that I hadn't replied to this yet. Sorry for the long delay! On Thu, May 12, 2016 at 09:46:25AM +0200, Markus Armbruster wrote: > Eduardo Habkost <ehabkost@redhat.com> writes: [...] > > ## > > # @CpuDefinitionInfo: > > # > > # Virtual CPU definition. > > # > > # @name: the name of the CPU definition > > # @runnable: #optional. whether the CPU model us usable with the > > # current machine and accelerator. Omitted if we don't > > # know the answer. (since 2.7) > > # @unavailable-features: List of attributes that prevent the CPU > > Unless you drop the * sigil from '*unavailable-features', you need to > insert #optional after the colon. Fixed. > > > # model from running in the current host. > > # (since 2.7) > > # > > # @unavailable-features is a list of QOM property names that > > # represent CPU model attributes that prevent the CPU from running. > > # If the QOM property is read-only, that means the CPU model can > > # never run in the current host. If the property is read-write, it > > # means that it MAY be possible to run the CPU model in the current > > # host if that property is changed. Management software can use it > > # as hints to suggest or choose an alternative for the user, or > > # just to generate meaningful error messages explaining why the CPU > > # model can't be used. > > # > > # Since: 1.2.0 > > ## > > Better. > > Next issue: how @runnable and @unavailable-features are related isn't > fully documented. Here's my guess: > > Combinations possible? @runnable > @unavailable-features absent false true > absent yes ? ? > present, empty ? ? ? > present, non-empty ? yes no unavailable-features should be present only if runnable is false. It may be absent or empty if the architecture code still doesn't provide detailed info. Once we have additional architectures implementing the new fields, we can consider requiring unavailable-features to be always present (and non-empty) if runnable is false. In other words: Combinations possible? @runnable @unavailable-features absent false true absent yes yes[1] yes present, empty no yes[1] no present, non-empty no yes no [1] I would like it to be "no", but I prefer to make it mandatory only after we get some experience with other architectures. I'm making the following changes to the documentation: # Virtual CPU definition. # # @name: the name of the CPU definition -# @runnable: #optional. whether the CPU model us usable with the +# @runnable: #optional Whether the CPU model us usable with the # current machine and accelerator. Omitted if we don't # know the answer. (since 2.7) -# @unavailable-features: List of attributes that prevent the CPU -# model from running in the current host. +# @unavailable-features: #optional List of attributes that prevent +# the CPU model from running in the current +# host. Present only if @runnable is false. # (since 2.7) # # @unavailable-features is a list of QOM property names that
Eduardo Habkost <ehabkost@redhat.com> writes: > Just noticed that I hadn't replied to this yet. Sorry for the > long delay! > > On Thu, May 12, 2016 at 09:46:25AM +0200, Markus Armbruster wrote: >> Eduardo Habkost <ehabkost@redhat.com> writes: > [...] >> > ## >> > # @CpuDefinitionInfo: >> > # >> > # Virtual CPU definition. >> > # >> > # @name: the name of the CPU definition >> > # @runnable: #optional. whether the CPU model us usable with the >> > # current machine and accelerator. Omitted if we don't >> > # know the answer. (since 2.7) >> > # @unavailable-features: List of attributes that prevent the CPU >> >> Unless you drop the * sigil from '*unavailable-features', you need to >> insert #optional after the colon. > > Fixed. > >> >> > # model from running in the current host. >> > # (since 2.7) >> > # >> > # @unavailable-features is a list of QOM property names that >> > # represent CPU model attributes that prevent the CPU from running. >> > # If the QOM property is read-only, that means the CPU model can >> > # never run in the current host. If the property is read-write, it >> > # means that it MAY be possible to run the CPU model in the current >> > # host if that property is changed. Management software can use it >> > # as hints to suggest or choose an alternative for the user, or >> > # just to generate meaningful error messages explaining why the CPU >> > # model can't be used. >> > # >> > # Since: 1.2.0 >> > ## >> >> Better. >> >> Next issue: how @runnable and @unavailable-features are related isn't >> fully documented. Here's my guess: >> >> Combinations possible? @runnable >> @unavailable-features absent false true >> absent yes ? ? >> present, empty ? ? ? >> present, non-empty ? yes no > > unavailable-features should be present only if runnable is false. > It may be absent or empty if the architecture code still doesn't > provide detailed info. > > Once we have additional architectures implementing the new > fields, we can consider requiring unavailable-features to be > always present (and non-empty) if runnable is false. > > In other words: > > Combinations possible? @runnable > @unavailable-features absent false true > absent yes yes[1] yes > present, empty no yes[1] no > present, non-empty no yes no > > [1] I would like it to be "no", but I prefer to make it mandatory > only after we get some experience with other architectures. > > > I'm making the following changes to the documentation: > > # Virtual CPU definition. > # > # @name: the name of the CPU definition > -# @runnable: #optional. whether the CPU model us usable with the > +# @runnable: #optional Whether the CPU model us usable with the > # current machine and accelerator. Omitted if we don't > # know the answer. (since 2.7) > -# @unavailable-features: List of attributes that prevent the CPU > -# model from running in the current host. > +# @unavailable-features: #optional List of attributes that prevent > +# the CPU model from running in the current > +# host. Present only if @runnable is false. > # (since 2.7) > # > # @unavailable-features is a list of QOM property names that "Present only if @runnable is false" makes me wonder why we need two separate optional members tied together with constraints. I dislike such constraints, and avoid them whenever practical. The new members encode an answer to the question whether a certain CPU usable with the current machine an accelerator, and if no, why. The possible answers are: (1) Don't know. (2) Yes. (3) No, but we can't say why. (4) No, and here's a list of reasons. The two "dunno" answers (1) and (3) exist so we don't have to boil the CPU ocean now. Without them, the natural solution is a single member, where (4) is encoded as nonempty list, and (2) could be encoded as empty list or absent. Now let me try to fit in (1) and (3). The obvious way to do (1) is absent. So let's use empty list for (2). That leaves (3). I think the simplest solution that could possibly work is to treat it as a special "dunno" reason: encode it just like (4), but with a special "dunno" list element. I'd use the empty string. Could even be used if we need to distinguish (4a) No, and here's the *complete* list of reasons. (4b) No, and here's a possibly incomplete list of reasons. For (4b), include the "dunno" element with the others. Unlike the proposed solution, this one doesn't leave interface crud behind if we succeed in getting rid of (1) and (3): * When (1) goes away, the single member becomes mandatory. * When (3) goes away, the special "dunno" list element no longer occurs.
On Mon, May 30, 2016 at 11:33:38AM +0200, Markus Armbruster wrote: > Eduardo Habkost <ehabkost@redhat.com> writes: > > > Just noticed that I hadn't replied to this yet. Sorry for the > > long delay! > > > > On Thu, May 12, 2016 at 09:46:25AM +0200, Markus Armbruster wrote: > >> Eduardo Habkost <ehabkost@redhat.com> writes: > > [...] > >> > ## > >> > # @CpuDefinitionInfo: > >> > # > >> > # Virtual CPU definition. > >> > # > >> > # @name: the name of the CPU definition > >> > # @runnable: #optional. whether the CPU model us usable with the > >> > # current machine and accelerator. Omitted if we don't > >> > # know the answer. (since 2.7) > >> > # @unavailable-features: List of attributes that prevent the CPU > >> > >> Unless you drop the * sigil from '*unavailable-features', you need to > >> insert #optional after the colon. > > > > Fixed. > > > >> > >> > # model from running in the current host. > >> > # (since 2.7) > >> > # > >> > # @unavailable-features is a list of QOM property names that > >> > # represent CPU model attributes that prevent the CPU from running. > >> > # If the QOM property is read-only, that means the CPU model can > >> > # never run in the current host. If the property is read-write, it > >> > # means that it MAY be possible to run the CPU model in the current > >> > # host if that property is changed. Management software can use it > >> > # as hints to suggest or choose an alternative for the user, or > >> > # just to generate meaningful error messages explaining why the CPU > >> > # model can't be used. > >> > # > >> > # Since: 1.2.0 > >> > ## > >> > >> Better. > >> > >> Next issue: how @runnable and @unavailable-features are related isn't > >> fully documented. Here's my guess: > >> > >> Combinations possible? @runnable > >> @unavailable-features absent false true > >> absent yes ? ? > >> present, empty ? ? ? > >> present, non-empty ? yes no > > > > unavailable-features should be present only if runnable is false. > > It may be absent or empty if the architecture code still doesn't > > provide detailed info. > > > > Once we have additional architectures implementing the new > > fields, we can consider requiring unavailable-features to be > > always present (and non-empty) if runnable is false. > > > > In other words: > > > > Combinations possible? @runnable > > @unavailable-features absent false true > > absent yes yes[1] yes > > present, empty no yes[1] no > > present, non-empty no yes no > > > > [1] I would like it to be "no", but I prefer to make it mandatory > > only after we get some experience with other architectures. > > > > > > I'm making the following changes to the documentation: > > > > # Virtual CPU definition. > > # > > # @name: the name of the CPU definition > > -# @runnable: #optional. whether the CPU model us usable with the > > +# @runnable: #optional Whether the CPU model us usable with the > > # current machine and accelerator. Omitted if we don't > > # know the answer. (since 2.7) > > -# @unavailable-features: List of attributes that prevent the CPU > > -# model from running in the current host. > > +# @unavailable-features: #optional List of attributes that prevent > > +# the CPU model from running in the current > > +# host. Present only if @runnable is false. > > # (since 2.7) > > # > > # @unavailable-features is a list of QOM property names that > > "Present only if @runnable is false" makes me wonder why we need two > separate optional members tied together with constraints. I dislike > such constraints, and avoid them whenever practical. > > The new members encode an answer to the question whether a certain CPU > usable with the current machine an accelerator, and if no, why. > The possible answers are: > > (1) Don't know. > (2) Yes. > (3) No, but we can't say why. > (4) No, and here's a list of reasons. > > The two "dunno" answers (1) and (3) exist so we don't have to boil the > CPU ocean now. > > Without them, the natural solution is a single member, where (4) is > encoded as nonempty list, and (2) could be encoded as empty list or > absent. > > Now let me try to fit in (1) and (3). > > The obvious way to do (1) is absent. So let's use empty list for (2). > > That leaves (3). I think the simplest solution that could possibly work > is to treat it as a special "dunno" reason: encode it just like (4), but > with a special "dunno" list element. I'd use the empty string. > > Could even be used if we need to distinguish > > (4a) No, and here's the *complete* list of reasons. > (4b) No, and here's a possibly incomplete list of reasons. > > For (4b), include the "dunno" element with the others. > > Unlike the proposed solution, this one doesn't leave interface crud > behind if we succeed in getting rid of (1) and (3): > > * When (1) goes away, the single member becomes mandatory. > > * When (3) goes away, the special "dunno" list element no longer occurs. I like your suggestion. I suggest "type" as the "dunno" element. It would keep the existing "QOM property name" semantics, and it would just mean "sorry, the only advice we can currently give you is to choose a different CPU type". It even matches the previous documentation I sent describing the meaning of read-only property names. Rewriting the docs again: # Virtual CPU definition. # # @name: the name of the CPU definition -# @runnable: #optional Whether the CPU model us usable with the -# current machine and accelerator. Omitted if we don't -# know the answer. (since 2.7) -# @unavailable-features: #optional List of attributes that prevent +# @unavailable-features: #optional List of properties that prevent # the CPU model from running in the current -# host. Present only if @runnable is false. -# (since 2.7) +# host. (since 2.7) # # @unavailable-features is a list of QOM property names that # represent CPU model attributes that prevent the CPU from running. -# If the QOM property is read-only, that means the CPU model can -# never run in the current host. If the property is read-write, it +# If the QOM property is read-only, that means there's no known +# way to make the CPU model run in the current host. +# If the property is read-write, it # means that it MAY be possible to run the CPU model in the current # host if that property is changed. Management software can use it # as hints to suggest or choose an alternative for the user, or # just to generate meaningful error messages explaining why the CPU # model can't be used. +# If @unavailable-features is an empty list, the CPU model is +# runnable using the current host and machine-type. +# If @unavailable-features is not present, runnability +# information for the CPU model is not available. # # Since: 1.2.0 ##
Eduardo Habkost <ehabkost@redhat.com> writes: > On Mon, May 30, 2016 at 11:33:38AM +0200, Markus Armbruster wrote: [...] >> The new members encode an answer to the question whether a certain CPU >> usable with the current machine an accelerator, and if no, why. >> The possible answers are: >> >> (1) Don't know. >> (2) Yes. >> (3) No, but we can't say why. >> (4) No, and here's a list of reasons. >> >> The two "dunno" answers (1) and (3) exist so we don't have to boil the >> CPU ocean now. >> >> Without them, the natural solution is a single member, where (4) is >> encoded as nonempty list, and (2) could be encoded as empty list or >> absent. >> >> Now let me try to fit in (1) and (3). >> >> The obvious way to do (1) is absent. So let's use empty list for (2). >> >> That leaves (3). I think the simplest solution that could possibly work >> is to treat it as a special "dunno" reason: encode it just like (4), but >> with a special "dunno" list element. I'd use the empty string. >> >> Could even be used if we need to distinguish >> >> (4a) No, and here's the *complete* list of reasons. >> (4b) No, and here's a possibly incomplete list of reasons. >> >> For (4b), include the "dunno" element with the others. >> >> Unlike the proposed solution, this one doesn't leave interface crud >> behind if we succeed in getting rid of (1) and (3): >> >> * When (1) goes away, the single member becomes mandatory. >> >> * When (3) goes away, the special "dunno" list element no longer occurs. > > I like your suggestion. > > I suggest "type" as the "dunno" element. It would keep the > existing "QOM property name" semantics, and it would just mean > "sorry, the only advice we can currently give you is to choose a > different CPU type". It even matches the previous documentation I > sent describing the meaning of read-only property names. > > Rewriting the docs again: > > # Virtual CPU definition. > # > # @name: the name of the CPU definition > -# @runnable: #optional Whether the CPU model us usable with the > -# current machine and accelerator. Omitted if we don't > -# know the answer. (since 2.7) > -# @unavailable-features: #optional List of attributes that prevent > +# @unavailable-features: #optional List of properties that prevent > # the CPU model from running in the current > -# host. Present only if @runnable is false. > -# (since 2.7) > +# host. (since 2.7) > # > # @unavailable-features is a list of QOM property names that > # represent CPU model attributes that prevent the CPU from running. > -# If the QOM property is read-only, that means the CPU model can > -# never run in the current host. If the property is read-write, it > +# If the QOM property is read-only, that means there's no known > +# way to make the CPU model run in the current host. > +# If the property is read-write, it > # means that it MAY be possible to run the CPU model in the current > # host if that property is changed. Management software can use it > # as hints to suggest or choose an alternative for the user, or > # just to generate meaningful error messages explaining why the CPU > # model can't be used. Should we spell out the special case "type"? > +# If @unavailable-features is an empty list, the CPU model is > +# runnable using the current host and machine-type. > +# If @unavailable-features is not present, runnability > +# information for the CPU model is not available. > # > # Since: 1.2.0 > ## I'm happy with this interface. Thanks!
On Tue, May 31, 2016 at 03:24:50PM +0200, Markus Armbruster wrote: > Eduardo Habkost <ehabkost@redhat.com> writes: > > > On Mon, May 30, 2016 at 11:33:38AM +0200, Markus Armbruster wrote: > [...] > >> The new members encode an answer to the question whether a certain CPU > >> usable with the current machine an accelerator, and if no, why. > >> The possible answers are: > >> > >> (1) Don't know. > >> (2) Yes. > >> (3) No, but we can't say why. > >> (4) No, and here's a list of reasons. > >> > >> The two "dunno" answers (1) and (3) exist so we don't have to boil the > >> CPU ocean now. > >> > >> Without them, the natural solution is a single member, where (4) is > >> encoded as nonempty list, and (2) could be encoded as empty list or > >> absent. > >> > >> Now let me try to fit in (1) and (3). > >> > >> The obvious way to do (1) is absent. So let's use empty list for (2). > >> > >> That leaves (3). I think the simplest solution that could possibly work > >> is to treat it as a special "dunno" reason: encode it just like (4), but > >> with a special "dunno" list element. I'd use the empty string. > >> > >> Could even be used if we need to distinguish > >> > >> (4a) No, and here's the *complete* list of reasons. > >> (4b) No, and here's a possibly incomplete list of reasons. > >> > >> For (4b), include the "dunno" element with the others. > >> > >> Unlike the proposed solution, this one doesn't leave interface crud > >> behind if we succeed in getting rid of (1) and (3): > >> > >> * When (1) goes away, the single member becomes mandatory. > >> > >> * When (3) goes away, the special "dunno" list element no longer occurs. > > > > I like your suggestion. > > > > I suggest "type" as the "dunno" element. It would keep the > > existing "QOM property name" semantics, and it would just mean > > "sorry, the only advice we can currently give you is to choose a > > different CPU type". It even matches the previous documentation I > > sent describing the meaning of read-only property names. > > > > Rewriting the docs again: > > > > # Virtual CPU definition. > > # > > # @name: the name of the CPU definition > > -# @runnable: #optional Whether the CPU model us usable with the > > -# current machine and accelerator. Omitted if we don't > > -# know the answer. (since 2.7) > > -# @unavailable-features: #optional List of attributes that prevent > > +# @unavailable-features: #optional List of properties that prevent > > # the CPU model from running in the current > > -# host. Present only if @runnable is false. > > -# (since 2.7) > > +# host. (since 2.7) > > # > > # @unavailable-features is a list of QOM property names that > > # represent CPU model attributes that prevent the CPU from running. > > -# If the QOM property is read-only, that means the CPU model can > > -# never run in the current host. If the property is read-write, it > > +# If the QOM property is read-only, that means there's no known > > +# way to make the CPU model run in the current host. > > +# If the property is read-write, it > > # means that it MAY be possible to run the CPU model in the current > > # host if that property is changed. Management software can use it > > # as hints to suggest or choose an alternative for the user, or > > # just to generate meaningful error messages explaining why the CPU > > # model can't be used. > > Should we spell out the special case "type"? It is not exactly a special case (it is a read-only property like any other), but it's worth mentioning. I will change it to: # If the QOM property is read-only, that means there's no known # way to make the CPU model run in the current host. If # absolutely no extra information will be returned to explain why # the CPU model is not runnable, implementations may simply # return "type" as the property name. > > > +# If @unavailable-features is an empty list, the CPU model is > > +# runnable using the current host and machine-type. > > +# If @unavailable-features is not present, runnability > > +# information for the CPU model is not available. > > # > > # Since: 1.2.0 > > ## > > I'm happy with this interface. Thanks! Thanks!
> It is not exactly a special case (it is a read-only property like > any other), but it's worth mentioning. I will change it to: > > # If the QOM property is read-only, that means there's no known > # way to make the CPU model run in the current host. If > # absolutely no extra information will be returned to explain why > # the CPU model is not runnable, implementations may simply > # return "type" as the property name. > > > > > > +# If @unavailable-features is an empty list, the CPU model is > > > +# runnable using the current host and machine-type. > > > +# If @unavailable-features is not present, runnability > > > +# information for the CPU model is not available. > > > # > > > # Since: 1.2.0 > > > ## > > > > I'm happy with this interface. Thanks! > > Thanks! > Yes, sounds also good to me. For "hw generation too new" and similar errors we will simply return "type". Thanks. David
diff --git a/qapi-schema.json b/qapi-schema.json index 54634c4..450e6e7 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -2948,11 +2948,19 @@ # Virtual CPU definition. # # @name: the name of the CPU definition +# @runnable: true if the CPU model is runnable using the current +# machine and accelerator. Optional. Since 2.6. +# @unavailable-features: List of properties that prevent the CPU +# model from running in the current host, +# if @runnable is false. Optional. +# Since 2.6. # # Since: 1.2.0 ## { 'struct': 'CpuDefinitionInfo', - 'data': { 'name': 'str' } } + 'data': { 'name': 'str', + '*runnable': 'bool', + '*unavailable-features': [ 'str' ] } } ## # @query-cpu-definitions:
Extend query-cpu-definitions schema to allow it to return two new optional fields: "runnable" and "unavailable-features". "runnable" will tell if the CPU model can be run in the current host. "unavailable-features" will contain a list of CPU properties that are preventing the CPU model from running in the current host. Cc: David Hildenbrand <dahi@linux.vnet.ibm.com> Cc: Michael Mueller <mimu@linux.vnet.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Cornelia Huck <cornelia.huck@de.ibm.com> Cc: Jiri Denemark <jdenemar@redhat.com> Cc: libvir-list@redhat.com Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- qapi-schema.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)