[libvirt] [PATCH v4 00/37] BaselineHypervisorCPU using QEMU QMP exchanges

Chris Venteicher cventeic at redhat.com
Fri Nov 9 16:27:20 UTC 2018


Quoting Chris Venteicher (2018-11-02 22:13:01)
> 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
> 
> Version 4 attempts to address all issues from V1,2,3 including making the
> QEMU process activation for QMP Queries generic (not specific to capabilities)
> and moving that code from qemu_capabilities to qemu_process.
> 
> Version 4 greatly expands the number of patches to make the set easier
> to review.
>
> The patches to do hypervisor baseline using QEMU are primarily in
> qemu_driver.c
>
Patches 1-2 create the cpumodel to/from Json conversion code.
Patches 3-4 modify the cpu expansion interface.
Patches 28-36 are the actual baseline changes.

> The patches to make the process code generic (not capabilities specific)
> are mostly in qemu_process.c

Patches 5 -> 27 move the process code from qemu_capabilities to
qemu_process.

A lot of these are code move or rename patches so the patches with real
implementation changes are easy to identify.

I might have ended up with too many patches though.
Want to mention... the whole "process" block could be moved to it's own
series if that would be easier to review.

> Many of the patches are cut / paste of existing code.  The patches that
> change functionality are as modular and minimal as possible to make
> reviewing easier.
> 
> I attempted to make the new qemu_process functions
> consistent with the existing domain activation qemu_process functions.
> 
> 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 last patch is based on past discussion of QEMU cpu
> expansion only returning migratable features except for one x86 case where
> non-migratable features are explicitly requested.  The patch records that features
> are migratable based on QEMU only returning migratable features.  The main result
> is the CPU xml for S390 CPU's contains the same migratability info the X86 currently
> does.  The testcases were updated to reflect the change.
> 
> Every patch should compile independently if applied in sequence.
> 
> Thanks,
> Chris
> 
> 
> Chris Venteicher (37):
>   qemu_monitor: Introduce qemuMonitorCPUModelInfoNew
>   qemu_monitor: Introduce qemuMonitorCPUModelInfo / JSON conversion
>   qemu_capabilities: Introduce virQEMuCapsMigratablePropsDiff
>   qemu_monitor: qemuMonitorGetCPUModelExpansion inputs and outputs
>     CPUModelInfo
>   qemu_process: Move process code from qemu_capabilities to qemu_process
>   qemu_process: Use qemuProcess prefix
>   qemu_process: Limit qemuProcessNew 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 qemuProcess struct for a single process
>   qemu_process: Persist stderr in qemuProcess struct
>   qemu_capabilities: Detect caps probe failure by checking monitor ptr
>   qemu_process: Introduce qemuProcessStartQmp
>   qemu_process: Add debug message in qemuProcessLaunchQmp
>   qemu_process: Collect monitor code in single function
>   qemu_process: Store libDir in qemuProcess struct
>   qemu_process: Setup paths within qemuProcessInitQmp
>   qemu_process: Stop retaining Qemu Monitor config in qemuProcess
>   qemu_process: Don't open monitor if process failed
>   qemu_process: Cleanup qemuProcess alloc function
>   qemu_process: Cleanup qemuProcessStopQmp function
>   qemu_process: Catch process free before process stop
>   qemu_monitor: Make monitor callbacks optional
>   qemu_process: Enter QMP command mode when starting QEMU Process
>   qemu_process: Use unique directories for QMP processes
>   qemu_process: Stop locking QMP process monitor immediately
>   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_driver: Remove unsupported props in expanded hypervisor baseline
>     output
>   qemu_monitor: Default props to migratable when expanding cpu model
> 
>  src/qemu/qemu_capabilities.c                  | 567 ++++++++----------
>  src/qemu/qemu_capabilities.h                  |   4 +
>  src/qemu/qemu_driver.c                        | 219 ++++++-
>  src/qemu/qemu_monitor.c                       | 184 +++++-
>  src/qemu/qemu_monitor.h                       |  29 +-
>  src/qemu/qemu_monitor_json.c                  | 226 +++++--
>  src/qemu/qemu_monitor_json.h                  |  12 +-
>  src/qemu/qemu_process.c                       | 359 +++++++++++
>  src/qemu/qemu_process.h                       |  37 ++
>  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, 1388 insertions(+), 571 deletions(-)
> 
> -- 
> 2.17.1
> 




More information about the libvir-list mailing list