[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