[libvirt] [PATCH v6 00/33] BaselineHypervisorCPU using QEMU QMP exchanges

Chris Venteicher posted 33 patches 5 years, 2 months ago
Test syntax-check passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20190113005032.17880-1-cventeic@redhat.com
src/qemu/qemu_capabilities.c                  | 631 ++++++++----------
src/qemu/qemu_capabilities.h                  |   4 +
src/qemu/qemu_driver.c                        | 216 +++++-
src/qemu/qemu_monitor.c                       | 165 ++++-
src/qemu/qemu_monitor.h                       |  29 +-
src/qemu/qemu_monitor_json.c                  | 223 +++++--
src/qemu/qemu_monitor_json.h                  |  10 +-
src/qemu/qemu_process.c                       | 345 ++++++++++
src/qemu/qemu_process.h                       |  32 +
tests/cputest.c                               |  11 +-
.../caps_2.10.0.s390x.xml                     |  60 +-
.../caps_2.11.0.s390x.xml                     |  58 +-
.../caps_2.12.0.s390x.xml                     |  56 +-
.../qemucapabilitiesdata/caps_2.8.0.s390x.xml |  32 +-
.../qemucapabilitiesdata/caps_2.9.0.s390x.xml |  34 +-
.../qemucapabilitiesdata/caps_3.0.0.s390x.xml |  64 +-
tests/qemucapabilitiestest.c                  |   7 +
17 files changed, 1375 insertions(+), 602 deletions(-)
[libvirt] [PATCH v6 00/33] BaselineHypervisorCPU using QEMU QMP exchanges
Posted by Chris Venteicher 5 years, 2 months ago
Some architectures (S390) depend on QEMU to compute baseline CPU model and
expand a models feature set.

Interacting with QEMU requires starting the QEMU process and completing one or
more query-cpu-model-baseline QMP exchanges with QEMU in addition to a
query-cpu-model-expansion QMP exchange to expand all features in the model.

See "s390x CPU models: exposing features" patch set on Qemu-devel for discussion
of QEMU aspects.

This is part of resolution of: https://bugzilla.redhat.com/show_bug.cgi?id=1511999

-----
v6 addresses these issues from v5:

qemu_process: Move process code from qemu_capabilities to qemu_process
    [x] Remove exception statement from commit message

qemu_process: Use qemuProcessQmp prefix
    [x] s/ProcessQmp/ProcessQMP/ in this and all subsequent patches

qemu_process: Refer to proc not cmd in process code
    [x] Back port indentation fix in qemuProcessQMPRun

qemu_capabilities: Stop QEMU process before freeing
    [x] Back port !proc check in qemuProcessQmpStop

qemu_process: Use qemuProcessQmp struct for a single process
    [x] Remove extra empty lines

qemu_process: All ProcessQMP errors are fatal
    [x] Split into multiple patches

qemu_process: Introduce qemuProcessQmpStart
    [x] Log function parameters separately in the first function debug message
    [x] Removed NULLSTR check on proc-binary (would fail previously on proc activate)
    [x] Back port referring to stderr rather than qmperr in comment
    [ ] Combine qemuProcessQmpStop and qemuProcessQmpFree (See reply to v5 email)

emu_process: Collect monitor code in single function
    [x] Back port qemuMonitorOpen indent fix to earlier patch

qemu_process: Don't open monitor if process failed
    [x] Drop patch

qemu_process: Cleanup qemuProcessQmp alloc function
    [x] s/Qemu/QEMU/ in comments for qemuProcessQMPNew
    [x] Remove unneeded use of NULLSTR and NULL check before calling qemuProcessQmpFree

qemu_process: Cleanup qemuProcessQmpStop function
    [x] Remove lines from from commit message
    [x] Remove capitalization from comment
    [x] Fix func def to match coding style
    [x] Back port !proc check to earlier patch

qemu_process: Catch process free before process stop
    [x] Remove capitalization from comment
    [x] Don't do proc NULL check in VIR_DEBUG
    [ ] Combine qemuProcessQmpStop and qemuProcessQmpFree (See reply to v5 email)

qemu_monitor: Make monitor callbacks optional
    [x] Drop patch

qemu_process: Enter QMP command mode when starting QEMU Process
    [ ] Don't call qemuMonitorSetCapabilities in qemuProcessQMPConnectMonitor (See reply to v5 email)

qemu_process: Use unique directories for QMP processes
    [x] s/qemu./qmp-/ for QMP process directory name prefix
    [x] Catch mkdtemp returns NULL

qemu_process: Stop locking QMP process monitor immediately
    [x] Drop patch

qemu_monitor: Introduce qemuMonitorCPUModelInfoNew
    [x] Use qemuMonitorCPUModelInfoNew to set model name
    [x] Drop variable initialization
    [x] Use qemuMonitorCPUModelInfoNew in qemuMonitorJSONGetCPUModelExpansion (Pull forward)
    [ ] Remove orig NULL check (Unit tests fail if I do this)

qemu_monitor: Introduce qemuMonitorCPUModelInfo / JSON conversion
    [x] Make variable initialization easier to read in PropAdd
    [x] Require at least one "prop" (don't allow zero in this commit)

qemu_capabilities: Introduce virQEMuCapsMigratablePropsDiff
    [x] Remove template txt in commit message
    [x] Change function name
    [x] Distinguish nmProp from mProp
    [x] Don't set cpuData->info to NULL
    [ ] Don't use tmp (defer to next patch set... out of time)

qemu_monitor: qemuMonitorGetCPUModelExpansion inputs and outputs CPUModelInfo
    [x] Remove extra line from commit message
    [x] Change parameter order
    [x] Don't use VIR_STEAL_PTR

qemu_capabilities: Introduce CPUModelInfo to virCPUDef function
    [x] Change comment
    [x] Change parameter order
    [x] Separate lines
    [x] Move debug message before alloc
    [x] Back port function spacing fix from next patch

qemu_capabilities: Introduce virCPUDef to CPUModelInfo function
    [x] Change comment
    [x] Move debug message before alloc
    [x] Remove NULL check on feature->name
    [x] Document prop value semantics

Reviewed in v5 but no changes required:
qemu_process: Limit qemuProcessQmpNew to const input strings
qemu_process: Use consistent name for stop process function
qemu_process: Persist stderr in qemuProcessQmp struct
qemu_process: Store libDir in qemuProcessQmp struct
qemu_process: Setup paths within qemuProcessQmpInit
qemu_process: Stop retaining Monitor config in qemuProcessQmp

Not reviewed in v5:
qemu_monitor: Support query-cpu-model-baseline QMP command
qemu_driver: Consolidate code to baseline using libvirt
qemu_driver: Decouple code for baseline using libvirt
qemu_driver: Identify using libvirt as a distinct way to compute baseline
qemu_driver: Support baseline calculation using QEMU
qemu_driver: Support feature expansion via QEMU when baselining cpu
qemu_driver: Remove unsupported props in expanded hypervisor baseline output
qemu_monitor: Default props to migratable when expanding cpu model


-----
v5:

Fixes all process issues identified here:
https://www.redhat.com/archives/libvir-list/2018-November/msg00349.html

- Make the process code generic (not capabilities specific) for use by
BaselineHypervisorCPU

- Many of the process patches are simple code moves with implementation
changes in other distinct patches

- A thread safe library function creates a unique directory under libDir for each QEMU
process (for QMP messaging) to decouple processes in terms of sockets and
file system footprint.

The remaining (non-process) patches in v4 address all issues in v1-v4 of
'BaselineHypervisorCPU using QEMU QMP exchanges'


Thanks,
Chris


*** BLURB HERE ***

Chris Venteicher (33):
  qEmu_process: Move process code from qemu_capabilities to qemu_process
  qemu_process: Use qemuProcessQMP prefix
  qemu_process: Limit qemuProcessQMPNew to const input strings
  qemu_process: Refer to proc not cmd in process code
  qemu_process: Use consistent name for stop process function
  qemu_capabilities: Stop QEMU process before freeing
  qemu_process: Use qemuProcessQMP struct for a single process
  qemu_process: All ProcessQMP errors are fatal
  qemu_process: Expose process exit status code
  qemu_process: Persist stderr in qemuProcessQMP struct
  qemu_process: Introduce qemuProcessQMPStart
  qemu_process: Collect monitor code in single function
  qemu_process: Store libDir in qemuProcessQMP struct
  qemu_process: Setup paths within qemuProcessQMPInit
  qemu_process: Stop retaining Monitor config in qemuProcessQMP
  qemu_process: Cleanup qemuProcessQMP alloc function
  qemu_process: Cleanup qemuProcessQMPStop function
  qemu_process: Catch process free before process stop
  qemu_process: Enter QMP command mode when starting QEMU Process
  qemu_process: Use unique directories for QMP processes
  qemu_monitor: Introduce qemuMonitorCPUModelInfoNew
  qemu_monitor: Introduce qemuMonitorCPUModelInfo / JSON conversion
  qemu_capabilities: Introduce virQEMuCapsMigratablePropsCalc
  qemu_monitor: qemuMonitorGetCPUModelExpansion inputs and outputs
    CPUModelInfo
  qemu_capabilities: Introduce CPUModelInfo to virCPUDef function
  qemu_capabilities: Introduce virCPUDef to CPUModelInfo function
  qemu_monitor: Support query-cpu-model-baseline QMP command
  qemu_driver: Consolidate code to baseline using libvirt
  qemu_driver: Decouple code for baseline using libvirt
  qemu_driver: Identify using libvirt as a distinct way to compute
    baseline
  qemu_driver: Support baseline calculation using QEMU
  qemu_driver: Support feature expansion via QEMU when baselining cpu
  qemu_monitor: Default props to migratable when expanding cpu model

 src/qemu/qemu_capabilities.c                  | 631 ++++++++----------
 src/qemu/qemu_capabilities.h                  |   4 +
 src/qemu/qemu_driver.c                        | 216 +++++-
 src/qemu/qemu_monitor.c                       | 165 ++++-
 src/qemu/qemu_monitor.h                       |  29 +-
 src/qemu/qemu_monitor_json.c                  | 223 +++++--
 src/qemu/qemu_monitor_json.h                  |  10 +-
 src/qemu/qemu_process.c                       | 345 ++++++++++
 src/qemu/qemu_process.h                       |  32 +
 tests/cputest.c                               |  11 +-
 .../caps_2.10.0.s390x.xml                     |  60 +-
 .../caps_2.11.0.s390x.xml                     |  58 +-
 .../caps_2.12.0.s390x.xml                     |  56 +-
 .../qemucapabilitiesdata/caps_2.8.0.s390x.xml |  32 +-
 .../qemucapabilitiesdata/caps_2.9.0.s390x.xml |  34 +-
 .../qemucapabilitiesdata/caps_3.0.0.s390x.xml |  64 +-
 tests/qemucapabilitiestest.c                  |   7 +
 17 files changed, 1375 insertions(+), 602 deletions(-)

-- 
2.17.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v6 00/33] BaselineHypervisorCPU using QEMU QMP exchanges
Posted by Collin Walling 4 years, 11 months ago
May I ask what the current status of this item is? Is this still
being worked on or has it been shelved?

On 1/12/19 7:49 PM, Chris Venteicher wrote:
> Some architectures (S390) depend on QEMU to compute baseline CPU model and
> expand a models feature set.
> 
> Interacting with QEMU requires starting the QEMU process and completing one or
> more query-cpu-model-baseline QMP exchanges with QEMU in addition to a
> query-cpu-model-expansion QMP exchange to expand all features in the model.
> 
> See "s390x CPU models: exposing features" patch set on Qemu-devel for discussion
> of QEMU aspects.
> 
> This is part of resolution of: https://bugzilla.redhat.com/show_bug.cgi?id=1511999
> 
> -----
> v6 addresses these issues from v5:
> 
> qemu_process: Move process code from qemu_capabilities to qemu_process
>      [x] Remove exception statement from commit message
> 
> qemu_process: Use qemuProcessQmp prefix
>      [x] s/ProcessQmp/ProcessQMP/ in this and all subsequent patches
> 
> qemu_process: Refer to proc not cmd in process code
>      [x] Back port indentation fix in qemuProcessQMPRun
> 
> qemu_capabilities: Stop QEMU process before freeing
>      [x] Back port !proc check in qemuProcessQmpStop
> 
> qemu_process: Use qemuProcessQmp struct for a single process
>      [x] Remove extra empty lines
> 
> qemu_process: All ProcessQMP errors are fatal
>      [x] Split into multiple patches
> 
> qemu_process: Introduce qemuProcessQmpStart
>      [x] Log function parameters separately in the first function debug message
>      [x] Removed NULLSTR check on proc-binary (would fail previously on proc activate)
>      [x] Back port referring to stderr rather than qmperr in comment
>      [ ] Combine qemuProcessQmpStop and qemuProcessQmpFree (See reply to v5 email)
> 
> emu_process: Collect monitor code in single function
>      [x] Back port qemuMonitorOpen indent fix to earlier patch
> 
> qemu_process: Don't open monitor if process failed
>      [x] Drop patch
> 
> qemu_process: Cleanup qemuProcessQmp alloc function
>      [x] s/Qemu/QEMU/ in comments for qemuProcessQMPNew
>      [x] Remove unneeded use of NULLSTR and NULL check before calling qemuProcessQmpFree
> 
> qemu_process: Cleanup qemuProcessQmpStop function
>      [x] Remove lines from from commit message
>      [x] Remove capitalization from comment
>      [x] Fix func def to match coding style
>      [x] Back port !proc check to earlier patch
> 
> qemu_process: Catch process free before process stop
>      [x] Remove capitalization from comment
>      [x] Don't do proc NULL check in VIR_DEBUG
>      [ ] Combine qemuProcessQmpStop and qemuProcessQmpFree (See reply to v5 email)
> 
> qemu_monitor: Make monitor callbacks optional
>      [x] Drop patch
> 
> qemu_process: Enter QMP command mode when starting QEMU Process
>      [ ] Don't call qemuMonitorSetCapabilities in qemuProcessQMPConnectMonitor (See reply to v5 email)
> 
> qemu_process: Use unique directories for QMP processes
>      [x] s/qemu./qmp-/ for QMP process directory name prefix
>      [x] Catch mkdtemp returns NULL
> 
> qemu_process: Stop locking QMP process monitor immediately
>      [x] Drop patch
> 
> qemu_monitor: Introduce qemuMonitorCPUModelInfoNew
>      [x] Use qemuMonitorCPUModelInfoNew to set model name
>      [x] Drop variable initialization
>      [x] Use qemuMonitorCPUModelInfoNew in qemuMonitorJSONGetCPUModelExpansion (Pull forward)
>      [ ] Remove orig NULL check (Unit tests fail if I do this)
> 
> qemu_monitor: Introduce qemuMonitorCPUModelInfo / JSON conversion
>      [x] Make variable initialization easier to read in PropAdd
>      [x] Require at least one "prop" (don't allow zero in this commit)
> 
> qemu_capabilities: Introduce virQEMuCapsMigratablePropsDiff
>      [x] Remove template txt in commit message
>      [x] Change function name
>      [x] Distinguish nmProp from mProp
>      [x] Don't set cpuData->info to NULL
>      [ ] Don't use tmp (defer to next patch set... out of time)
> 
> qemu_monitor: qemuMonitorGetCPUModelExpansion inputs and outputs CPUModelInfo
>      [x] Remove extra line from commit message
>      [x] Change parameter order
>      [x] Don't use VIR_STEAL_PTR
> 
> qemu_capabilities: Introduce CPUModelInfo to virCPUDef function
>      [x] Change comment
>      [x] Change parameter order
>      [x] Separate lines
>      [x] Move debug message before alloc
>      [x] Back port function spacing fix from next patch
> 
> qemu_capabilities: Introduce virCPUDef to CPUModelInfo function
>      [x] Change comment
>      [x] Move debug message before alloc
>      [x] Remove NULL check on feature->name
>      [x] Document prop value semantics
> 
> Reviewed in v5 but no changes required:
> qemu_process: Limit qemuProcessQmpNew to const input strings
> qemu_process: Use consistent name for stop process function
> qemu_process: Persist stderr in qemuProcessQmp struct
> qemu_process: Store libDir in qemuProcessQmp struct
> qemu_process: Setup paths within qemuProcessQmpInit
> qemu_process: Stop retaining Monitor config in qemuProcessQmp
> 
> Not reviewed in v5:
> qemu_monitor: Support query-cpu-model-baseline QMP command
> qemu_driver: Consolidate code to baseline using libvirt
> qemu_driver: Decouple code for baseline using libvirt
> qemu_driver: Identify using libvirt as a distinct way to compute baseline
> qemu_driver: Support baseline calculation using QEMU
> qemu_driver: Support feature expansion via QEMU when baselining cpu
> qemu_driver: Remove unsupported props in expanded hypervisor baseline output
> qemu_monitor: Default props to migratable when expanding cpu model
> 
> 
> -----
> v5:
> 
> Fixes all process issues identified here:
> https://www.redhat.com/archives/libvir-list/2018-November/msg00349.html
> 
> - Make the process code generic (not capabilities specific) for use by
> BaselineHypervisorCPU
> 
> - Many of the process patches are simple code moves with implementation
> changes in other distinct patches
> 
> - A thread safe library function creates a unique directory under libDir for each QEMU
> process (for QMP messaging) to decouple processes in terms of sockets and
> file system footprint.
> 
> The remaining (non-process) patches in v4 address all issues in v1-v4 of
> 'BaselineHypervisorCPU using QEMU QMP exchanges'
> 
> 
> Thanks,
> Chris
> 
> 
> *** BLURB HERE ***
> 
> Chris Venteicher (33):
>    qEmu_process: Move process code from qemu_capabilities to qemu_process
>    qemu_process: Use qemuProcessQMP prefix
>    qemu_process: Limit qemuProcessQMPNew to const input strings
>    qemu_process: Refer to proc not cmd in process code
>    qemu_process: Use consistent name for stop process function
>    qemu_capabilities: Stop QEMU process before freeing
>    qemu_process: Use qemuProcessQMP struct for a single process
>    qemu_process: All ProcessQMP errors are fatal
>    qemu_process: Expose process exit status code
>    qemu_process: Persist stderr in qemuProcessQMP struct
>    qemu_process: Introduce qemuProcessQMPStart
>    qemu_process: Collect monitor code in single function
>    qemu_process: Store libDir in qemuProcessQMP struct
>    qemu_process: Setup paths within qemuProcessQMPInit
>    qemu_process: Stop retaining Monitor config in qemuProcessQMP
>    qemu_process: Cleanup qemuProcessQMP alloc function
>    qemu_process: Cleanup qemuProcessQMPStop function
>    qemu_process: Catch process free before process stop
>    qemu_process: Enter QMP command mode when starting QEMU Process
>    qemu_process: Use unique directories for QMP processes
>    qemu_monitor: Introduce qemuMonitorCPUModelInfoNew
>    qemu_monitor: Introduce qemuMonitorCPUModelInfo / JSON conversion
>    qemu_capabilities: Introduce virQEMuCapsMigratablePropsCalc
>    qemu_monitor: qemuMonitorGetCPUModelExpansion inputs and outputs
>      CPUModelInfo
>    qemu_capabilities: Introduce CPUModelInfo to virCPUDef function
>    qemu_capabilities: Introduce virCPUDef to CPUModelInfo function
>    qemu_monitor: Support query-cpu-model-baseline QMP command
>    qemu_driver: Consolidate code to baseline using libvirt
>    qemu_driver: Decouple code for baseline using libvirt
>    qemu_driver: Identify using libvirt as a distinct way to compute
>      baseline
>    qemu_driver: Support baseline calculation using QEMU
>    qemu_driver: Support feature expansion via QEMU when baselining cpu
>    qemu_monitor: Default props to migratable when expanding cpu model
> 
>   src/qemu/qemu_capabilities.c                  | 631 ++++++++----------
>   src/qemu/qemu_capabilities.h                  |   4 +
>   src/qemu/qemu_driver.c                        | 216 +++++-
>   src/qemu/qemu_monitor.c                       | 165 ++++-
>   src/qemu/qemu_monitor.h                       |  29 +-
>   src/qemu/qemu_monitor_json.c                  | 223 +++++--
>   src/qemu/qemu_monitor_json.h                  |  10 +-
>   src/qemu/qemu_process.c                       | 345 ++++++++++
>   src/qemu/qemu_process.h                       |  32 +
>   tests/cputest.c                               |  11 +-
>   .../caps_2.10.0.s390x.xml                     |  60 +-
>   .../caps_2.11.0.s390x.xml                     |  58 +-
>   .../caps_2.12.0.s390x.xml                     |  56 +-
>   .../qemucapabilitiesdata/caps_2.8.0.s390x.xml |  32 +-
>   .../qemucapabilitiesdata/caps_2.9.0.s390x.xml |  34 +-
>   .../qemucapabilitiesdata/caps_3.0.0.s390x.xml |  64 +-
>   tests/qemucapabilitiestest.c                  |   7 +
>   17 files changed, 1375 insertions(+), 602 deletions(-)
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list