Re: [RFC PATCH 0/1] support deprecated-props from query-cpu-model-expansion

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

 



On Tue, Jun 04, 2024 at 11:42:25 -0400, Collin Walling wrote:
> The QEMU portion is designed for s390x such that there is a static list
> of hardcoded feature bits that are flagged for deprecation.  This list
> can be updated in follow-up patches as more features need to be flagged.

Good, a single static list should definitely be easier to handle.

> The query-cpu-model-expansion *response* has been modified to now
> include an /optional/ "deprecated props" string array (no additional
> parameter is required in the query JSON).  This array will be present if
> and only if there is data to be reported.  If an architecture does not
> support reporting deprecated features, or if there are no deprecated
> features to report, then array is simply omitted from the response.
> 
> The deprecated features are filtered against the full-expansion features
> for the particular CPU model.  In the example for a z14, we would expect
> all four currently deprecated features reported: bpb, csske, cte, and
> te, since those features are part of the z14 full expansion.  On an
> older model, say a z900, you'd only see bpb because the others are not
> present in the full-expansion.

In that case I think it would be nice if QEMU provided a way of getting
the list itself without any filtering. Mainly to make sure we're
providing a completely list for users which may decide to avoid using
such features in their non-host-model CPU definitions. And I can imagine
management layers might want to get a complete list too.

> >> Another conflict is setting this option to "on" would have no
> >> effect on the CPU model (I can't think of a reason why someone
> >> would want to explicitly enable these features).  This may not
> >> communicate well to the user.
> > 
> > I think have a separate configuration is better as it does not limit the
> > used to just a single CPU model. But a nested element with a text node
> > looks strange. An optional attribute for the <cpu> element would be
> > better.
> >> For host-model the expected behavior would be to either keep or
> > drop deprecated features from the CPU definition. When combined with
> > custom CPU mode where such feature may be already present I can imagine
> > three different options. Either keep deprecated features (that is do
> > nothing, just like we do now), drop such features silently, or fail to
> > start a domain in case the definition uses a deprecated feature.
> 
> I fear the last option may break some things?

The idea is the behavior would be controllable via a special value in
that attribute, which a used would have to explicitly specify to get
such behavior. In other words, a user would provide a custom CPU
definition and ask for deprecated features to be removed no matter what
they are currently. But I don't think we need to care about it now
because...

> > We could even create the attribute, but limit it only to host-model,
> > which would be mostly equivalent to your "host-recomended" mode, but
> > extensible to other modes in the future.
> 
> I think this is the better approach.

Agreed. Just do the minimal required thing while making it extensible.

> In tandem to your suggestion to add a new attribute to the cpu element,
> a quick mock-up of it could look like this:
> 
> <cpu mode='host-model' deprecated_features='off'>

Right. Although you may have fun coming with an attribute name, because
we are not very consistent with naming multi-word attributes. Some
people don't like underscores while others don't like camelCase :-)
Anyway, I think you should at least be consistent and use a single name
for the attribute in domain XML and the element in domcapabilities XML.

> >> To report these features, a <deprecatedProperties> tag could be
> >> added to the domcapabilities output using the same format I use in
> >> my proposed patch for the qemu capabilities file:
> >>
> >>   <cpu>
> >>     <mode name='host-passthrough' supported='yes'>
> >>       ...
> >>     </mode>
> >>     ...
> >>     <mode name='host-model' supported='yes'>
> >>       ...
> >>     </mode>
> >>     <deprecatedProperties>
> >>       <property name='bpb'/>
> >>       <property name='te'/>
> >>       <property name='cte'/>
> >>       <property name='csske'/>
> >>     </deprecatedProperties>
> >>   </cpu>
> > 
> > We should stick with "features" rather than calling them "properties"
> > here to avoid confusion. Also this schema would mean the list of
> > deprecated features is indeed the same for all CPU models, which does
> > not seem to be the case here.
> 
> Noted to use "features" instead of "properties".
> 
> And you are correct that this makes the assumption that these features
> are available for *all* CPU models -- I did not think of this
> perspective.  This is populated from a query-cpu-model-expansion based
> on "host-model".
> 
> What would be a better way to report these features in the
> domcapabilities response?  Perhaps they should only be nested under the
> host-model?

Well, the list is static and common to all CPU models so keeping it as
another element under <cpu> as you suggested looks fine.

> ...another thought would be to implement a new feature policy
> "deprecated" that would allow these XML features to be applied to any
> CPU model.  This would flag the feature to either be disabled if it's
> available for that model, or ignore it otherwise.  The validity of the
> feature would be checked against the list of deprecated features (to
> avoid typos or having a user define an imaginary feature).
> Additionally, the feature policy would evaluate to "disabled" for a live
> guest XML to alleviate migration issues on machines that do not know
> about this new policy.
> 
> Consider the following for domcapabilities output:
> 
>    <cpu>
>      <mode name='host-passthrough' supported='yes'>
>        ...
>      </mode>
>      ...
>      <mode name='host-model' supported='yes'>
>        ...
>      </mode>
>      <deprecatedFeatures>
>        <feature policy='deprecated' name='bpb'/>
>        <feature policy='deprecated' name='te'/>
>        <feature policy='deprecated' name='cte'/>
>        <feature policy='deprecated' name='csske'/>
>      </deprecatedProperties>
>    </cpu>

I think this is a little bit too complicated.

> The benefit here is that this would let a user easily copy+paste these
> features into their guest XML and not have to consider whether or not
> these features are available for the CPU model they wish to use.

They should always be able to mark all deprecated features as disabled
if they want. I mean a feature not used by a specific CPU model is
disabled and disabling it explicitly in the XML does not change
anything. Or is s390x different and using a specific CPU model would
also limit what extra features you can list even if you just disable
them?

> Alternatively, the <mode name='host-model' ...> could include the
> aforementioned deprecated_features='off' attribute and the nested
> features would include the analogous features with policy='disabled'.
> This provides the benefit of having a near ready-to-use CPU model XML
> with deprecated features that can be provided to the baseline input.

Introducing a new value for an attribute would cause parse failures when
the XML is passed to an older libvirt. I think we should just take
host-model CPUs from all hosts, compute the baseline and drop deprecated
features from the result. This would of course need a new flag for the
baseline API. This way we could also take host-model from a single host
and let deprecated features be removed from it. Internally either the
baseline QMP command would also provide a list of deprecated features or
we could just take the result and let QEMU expand it to get the list.

> The way I imagined this working was to either use the "host-recommended"
> CPU model by default (but I believe we are nix'ing that approach), OR
> just use the host-model as-is today and rely on the input XML containing
> the appropriate list of deprecated features (with policy=disabled).  The
> input XML containing this CPU model could be extracted from a live guest
> that has deprecated features disabled.

Or we could perhaps add a flag for domcapabilities API to show the
host-model with deprecated features already disabled. This way we could
avoid introducing a new policy while letting the originating host limit
the disabled features itself. Or we could do both... limit the input and
also removed the deprecated features from the result :-)

> To echo part of the discussion from Daniel's feedback, he seems in favor
> of providing an explicit indication on the cpu definition that
> deprecated features are on|off.  I think this works in tandem with a
> deprecated_features attribute in the <cpu> element?

Yeah, I think that's exactly what the attribute can do.

Jirka



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux