mbox series

[v4,0/2] query-cpu-model-expansion: report deprecated features

Message ID 20240429191059.11806-1-walling@linux.ibm.com
Headers show
Series query-cpu-model-expansion: report deprecated features | expand

Message

Collin Walling April 29, 2024, 7:10 p.m. UTC
Changelog

    v4
        - updated cover letter to show example output
        - deprecated features are now a subset of the full CPU model's
            list of features
            - value: 
                1. no longer listing the deprecated features for CPU
                     models that never had these features available in the
                     first place
                2. deprecated features will not show up for future CPU 
                     models that out-right drop these features
        - updated qapi documentation
            - now reflects that these props are a subset of the full
                model's definition of properties
            - added Since: tag to deprecated-props (assuming 9.1)

    v3
        - removed optional disable-deprecated-feats argument
        - added deprecated-props array to CpuModelInfo struct
        - amended cover letter language to reflect design

    v2 
        - removed "static-recommended" expansion type
        - implemented optional disable-deprecated-feats argument

---

The current implementation of query-cpu-model-expansion is lacking a way to retrieve
CPU models with properties (i.e. features) that are flagged as deprecated.  To remedy
this, a list of deprecated-props has been appended to the CpuModelInfo struct, and
will currently be reported by a query-cpu-model-expansion.  The features reported in
the output are a subset of the full CPU model expansion.

Output example with host-model (z14):

{
  "execute": "query-cpu-model-expansion",
  "arguments": {
    "type": "static",
    "model": {
      "name": "host"
    }
  }
}
{
  "return": {
    "model": {
      "name": "z14.2-base",
      "deprecated-props": [
        "bpb",
        "te",
        "cte",
        "csske"
      ],
      "props": {
        "aen": true,
        "cmmnt": true,
        "aefsi": true,
        "diag318": true,
        "mepoch": true,
        "msa8": true,
        "msa7": true,
        "msa6": true,
        "msa5": true,
        "msa4": true,
        "msa3": true,
        "msa2": true,
        "msa1": true,
        "sthyi": true,
        "edat": true,
        "ri": true,
        "edat2": true,
        "etoken": true,
        "vx": true,
        "ipter": true,
        "mepochptff": true,
        "ap": true,
        "vxeh": true,
        "vxpd": true,
        "esop": true,
        "apqi": true,
        "apft": true,
        "els": true,
        "iep": true,
        "apqci": true,
        "cte": true,
        "ais": true,
        "bpb": true,
        "ctop": true,
        "gs": true,
        "ppa15": true,
        "zpci": true,
        "sea_esop2": true,
        "te": true,
        "cmm": true
      }
    }
  }
}

Example output with an older CPU model:

{
  "execute": "query-cpu-model-expansion",
  "arguments": {
    "type": "static",
    "model": {
      "name": "z10EC"
    }
  }
}
{
  "return": {
    "model": {
      "name": "z10EC-base",
      "deprecated-props": [
        "bpb",
        "csske"
      ],
      "props": {
        "msa2": true,
        "msa1": true,
        "sthyi": true,
        "edat": true,
        "cmm": true
      }
    }
  }
}

A simple interface is designed that contains an array of feature bits that are flagged
as deprecated.  This list may be easily populated with more features in the future.

    void s390_get_deprecated_features(S390FeatBitmap features)
    {
        static const int feats[] = {
             /* CSSKE is deprecated on newer generations */
             S390_FEAT_CONDITIONAL_SSKE,
             S390_FEAT_BPB,
             /* Deprecated on z16 */
             S390_FEAT_CONSTRAINT_TRANSACTIONAL_EXE,
             S390_FEAT_TRANSACTIONAL_EXE
        };
        int i;

        for (i = 0; i < ARRAY_SIZE(feats); i++) {
            set_bit(feats[i], features);
        }
    }

Use case example:

Newer s390 machines may signal the end-of-support for particular CPU features,
rendering guests operating with older CPU models incapable of running on
said machines.  A manual effort to disable certain CPU features would be
required.

Reporting a list of deprecated features allows the user / management app to
take the next steps to ensure the guest is defined in a way that ensures
a migration in the future.

Collin L. Walling (2):
  target/s390x: report deprecated-props in cpu-model-expansion reply
  target/s390x: flag te and cte as deprecated

 qapi/machine-target.json         |  7 ++++++-
 target/s390x/cpu_features.c      | 17 +++++++++++++++++
 target/s390x/cpu_features.h      |  1 +
 target/s390x/cpu_models_sysemu.c |  8 ++++++++
 4 files changed, 32 insertions(+), 1 deletion(-)

Comments

Collin Walling April 30, 2024, 5:17 p.m. UTC | #1
[...]

Thank you all for the valuable feedback.  Since the QEMU interface seems
stable, I will rework my libvirt (not upstream) and post as an RFC.
Thomas Huth May 6, 2024, 12:13 p.m. UTC | #2
On 29/04/2024 21.10, Collin Walling wrote:
> Changelog
> 
>      v4
>          - updated cover letter to show example output
>          - deprecated features are now a subset of the full CPU model's
>              list of features
>              - value:
>                  1. no longer listing the deprecated features for CPU
>                       models that never had these features available in the
>                       first place
>                  2. deprecated features will not show up for future CPU
>                       models that out-right drop these features
>          - updated qapi documentation
>              - now reflects that these props are a subset of the full
>                  model's definition of properties
>              - added Since: tag to deprecated-props (assuming 9.1)
> 
>      v3
>          - removed optional disable-deprecated-feats argument
>          - added deprecated-props array to CpuModelInfo struct
>          - amended cover letter language to reflect design
> 
>      v2
>          - removed "static-recommended" expansion type
>          - implemented optional disable-deprecated-feats argument
> 
> ---
> 
> The current implementation of query-cpu-model-expansion is lacking a way to retrieve
> CPU models with properties (i.e. features) that are flagged as deprecated.  To remedy
> this, a list of deprecated-props has been appended to the CpuModelInfo struct, and
> will currently be reported by a query-cpu-model-expansion.  The features reported in
> the output are a subset of the full CPU model expansion.
> 

Thanks, queued for my next pull request now.

  Thomas
Collin Walling May 7, 2024, 10:35 p.m. UTC | #3
[...]

Thanks everyone!  The RFC for the analogous libvirt patches have been
posted under the subject:

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

Any and all feedback is welcome.