[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support |
Date: |
Thu, 14 Sep 2017 19:56:04 +0100 |
User-agent: |
Mutt/1.8.3 (2017-05-23) |
* Peter Xu (address@hidden) wrote:
> This series was born from this one:
>
> https://lists.gnu.org/archive/html/qemu-devel/2017-08/msg04310.html
Are patches 1..6 separable and mergable without the rest ?
Dave
> The design comes from Markus, and also the whole-bunch-of discussions
> in previous thread. My heartful thanks to Markus, Daniel, Dave,
> Stefan, etc. on discussing the topic (...again!), providing shiny
> ideas and suggestions. Finally we got such a solution that seems to
> satisfy everyone.
>
> I re-started the versioning since this series is totally different
> from previous one. Now it's version 1.
>
> In case new reviewers come along the way without reading previous
> discussions, I will try to do a summary on what this is all about.
>
> What is OOB execution?
> ======================
>
> It's the shortcut of Out-Of-Band execution, its name is given by
> Markus. It's a way to quickly execute a QMP request. Say, originally
> QMP is going throw these steps:
>
> JSON Parser --> QMP Dispatcher --> Respond
> /|\ (2) (3) |
> (1) | \|/ (4)
> +--------- main thread --------+
>
> The requests are executed by the so-called QMP-dispatcher after the
> JSON is parsed. If OOB is on, we run the command directly in the
> parser and quickly returns.
>
> Yeah I know in current code the parser calls dispatcher directly
> (please see handle_qmp_command()). However it's not true again after
> this series (parser will has its own IO thread, and dispatcher will
> still be run in main thread). So this OOB does brings something
> different.
>
> There are more details on why OOB and the difference/relationship
> between OOB, async QMP, block/general jobs, etc.. but IMHO that's
> slightly out of topic (and believe me, it's not easy for me to
> summarize that). For more information, please refers to [1].
>
> Summary ends here.
>
> Some Implementation Details
> ===========================
>
> Again, I mentioned that the old QMP workflow is this:
>
> JSON Parser --> QMP Dispatcher --> Respond
> /|\ (2) (3) |
> (1) | \|/ (4)
> +--------- main thread --------+
>
> What this series does is, firstly:
>
> JSON Parser QMP Dispatcher --> Respond
> /|\ | /|\ (4) |
> | | (2) | (3) | (5)
> (1) | +-----> | \|/
> +--------- main thread <-------+
>
> And further:
>
> queue/kick
> JSON Parser ======> QMP Dispatcher --> Respond
> /|\ | (3) /|\ (4) |
> (1) | | (2) | | (5)
> | \|/ | \|/
> IO thread main thread <-------+
>
> Then it introduced the "allow-oob" parameter in QAPI schema to define
> commands, and "run-oob" flag to let oob-allowed command to run in the
> parser.
>
> The last patch enables this for "migrate-incoming" command.
>
> Please review. Thanks.
>
> [1] https://lists.gnu.org/archive/html/qemu-devel/2017-08/msg04310.html
>
> Peter Xu (15):
> char-io: fix possible race on IOWatchPoll
> qobject: allow NULL for qstring_get_str()
> qobject: introduce qobject_to_str()
> monitor: move skip_flush into monitor_data_init
> qjson: add "opaque" field to JSONMessageParser
> monitor: move the cur_mon hack deeper for QMP
> monitor: unify global init
> monitor: create IO thread
> monitor: allow to use IO thread for parsing
> monitor: introduce monitor_qmp_respond()
> monitor: separate QMP parser and dispatcher
> monitor: enable IO thread for (qmp & !mux) typed
> qapi: introduce new cmd option "allow-oob"
> qmp: support out-of-band (oob) execution
> qmp: let migrate-incoming allow out-of-band
>
> chardev/char-io.c | 15 ++-
> docs/devel/qapi-code-gen.txt | 51 ++++++-
> include/monitor/monitor.h | 2 +-
> include/qapi/qmp/dispatch.h | 2 +
> include/qapi/qmp/json-streamer.h | 8 +-
> include/qapi/qmp/qstring.h | 1 +
> monitor.c | 283
> +++++++++++++++++++++++++++++++--------
> qapi/introspect.json | 6 +-
> qapi/migration.json | 3 +-
> qapi/qmp-dispatch.c | 34 +++++
> qga/main.c | 5 +-
> qobject/json-streamer.c | 7 +-
> qobject/qjson.c | 5 +-
> qobject/qstring.c | 13 +-
> scripts/qapi-commands.py | 19 ++-
> scripts/qapi-introspect.py | 10 +-
> scripts/qapi.py | 15 ++-
> scripts/qapi2texi.py | 2 +-
> tests/libqtest.c | 5 +-
> tests/qapi-schema/test-qapi.py | 2 +-
> trace-events | 2 +
> vl.c | 3 +-
> 22 files changed, 398 insertions(+), 95 deletions(-)
>
> --
> 2.7.4
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, (continued)
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Dr. David Alan Gilbert, 2017/09/14
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Peter Xu, 2017/09/15
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Marc-André Lureau, 2017/09/15
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Peter Xu, 2017/09/18
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Marc-André Lureau, 2017/09/18
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Dr. David Alan Gilbert, 2017/09/18
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Marc-André Lureau, 2017/09/18
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Dr. David Alan Gilbert, 2017/09/18
- Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support, Eric Blake, 2017/09/18
Re: [Qemu-devel] [RFC 00/15] QMP: out-of-band (OOB) execution support,
Dr. David Alan Gilbert <=