[libvirt] [PATCH RFC 00/22] Move process code to qemu_process
Chris Venteicher
cventeic at redhat.com
Wed Nov 14 18:17:56 UTC 2018
Quoting Michal Privoznik (2018-11-14 09:45:06)
> On 11/11/2018 08:59 PM, Chris Venteicher wrote:
> > Make process code usable outside qemu_capabilities by moving code
> > from qemu_capabilities to qemu_process and exposing public functions.
> >
> > The process code is used to activate a non domain QEMU process for QMP
> > message exchanges.
> >
> > This patch set modifies capabilities to use the new public functions.
> >
> > --
> >
> > The process code is being decoupled from qemu_capabilities now to
> > support hypervisor baseline and comparison using QMP commands.
> >
> > This patch set was originally submitted as part of the baseline patch set:
> > [libvirt] [PATCH v4 00/37] BaselineHypervisorCPU using QEMU QMP exchanges
> > https://www.redhat.com/archives/libvir-list/2018-November/msg00091.html
>
> Okay, so you want to implement cpu-baseline for s390. But that doesn't
> really explain the code movement. Also, somehow the code movement makes
> the code bigger? I guess what I am saying is that I don't see much
> justification for these patches.
>
Here is the feedback from an earlier hypervisor baseline review that
resulted in this patch set.
https://www.redhat.com/archives/libvir-list/2018-July/msg00881.html
I think Jiri correctly identified capabilities, and now baseline and
comparison, are unrelated services that all independently need to start
a non-domain QEMU process for QMP messaging.
I am not sure, but it seems likely there could be other (S390...)
commands in the future that use QMP messages outside of a domain context
to get info or do work at the QEMU level.
All the baseline code I had in qemu_capabilities didn't make sense there
anymore once I moved the process code from qemu_capabilities to
qemu_process.
Here is the latest baseline patch set:
https://www.redhat.com/archives/libvir-list/2018-November/msg00091.html
In the latest baseline patch set, all the baseline code is in qemu_driver
and uses the process functions exposed now from qemu_process.
So as best I can tell there main choice is...
1) Leave process code in qemu_capabilities and make the 4 core
process functions (new, start, stop, free) and data strut public
so they can also be used by baseline and comparison from qemu_driver.
2) Move the process code from qemu_capabilities to qemu_process.
(this patch set) and expose the functions / data struct from
qemu_process.
In case 1 functions have the virQemuCaps prefix.
In case 2 functions have the qemuProcess prefix.
In either approach there are some changes needed to the process code to
decouple it from the capabilities code to support both capabilities and
baseline.
I did spend a few patches in this patch set breaking out the init,
process launch and monitor connection code into different static
functions in the style used elsewhere in qemu_process. That could be
reversed if it doesn't add enough value if the decision is to move the
process code to qemu_process.
>
> >
> > The baseline and comparison requirements are described here:
> > https://bugzilla.redhat.com/show_bug.cgi?id=1511999
> > https://bugzilla.redhat.com/show_bug.cgi?id=1511996
> >
> >
> > I am extracting and resubmitting just the process changes as a stand
> > alone series to try to make review easier.
> >
> > The patch set shows capabilities using the public functions.
> > To see baseline using the public functions...
> > Look at the "qemu_driver:" patches at the end of
> > https://www.redhat.com/archives/libvir-list/2018-November/msg00091.html
> >
> > Also,
> > The "qemu_driver: Support feature expansion via QEMU when baselining cpu"
> > patch might be of particular interest because the same QEMU process is
> > used for both baseline and expansion using QMP commands.
> >
> > --
> >
> > Many patches were used to isolate code moves and name changes from other
> > actual implementation changes.
> >
> > The patches reuse the pattern of public qemuProcess{Start,Stop} functions
> > and internal static qemuProcess{Init,Launch,ConnectMonitor} functions
> > but adds a "Qmp" suffix to make them unique.
> >
> > A number of patches are about re-partitioning the code into static
> > functions for initialization, process launch and connection monitor
> > stuff. This matches the established pattern in qemu_process and seemed
> > to make sense to do.
> >
> > For concurrency...
> > 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.
> >
> > Every patch should compile independently if applied in sequence.
>
> Oh, but it doesn't. I'm running 'make -j10 all syntax-check check' and I
> am hitting compilation/syntax error occasionally.
>
Yep. My bad.
I thought I was careful about making and checking every patch... but
stuff got through.
At least one of the errors looks like a slip when I did a merge as part
of a rebase where I changed the patch order to make it easier to review.
It's clear now I need to manualy or by script
'make -j10 all syntax-check check'
on each patch before I submit.
>
> >
> >
> > Chris Venteicher (22):
> > 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: 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
> >
> > src/qemu/qemu_capabilities.c | 300 +++++------------------------
> > src/qemu/qemu_monitor.c | 4 +-
> > src/qemu/qemu_process.c | 356 +++++++++++++++++++++++++++++++++++
> > src/qemu/qemu_process.h | 37 ++++
> > tests/qemucapabilitiestest.c | 7 +
> > 5 files changed, 444 insertions(+), 260 deletions(-)
> >
>
> Michal
More information about the libvir-list
mailing list