On 09/03/2018 08:31 AM, Markus Armbruster wrote:
Example:
client sends in-band command #1
QEMU reads and queues
QEMU dequeues in-band command #1
in-band command #1 starts executing, but it's slooow
client sends in-band command #2
QEMU reads and queues
...
client sends in-band command #8
QEMU reads, queues and suspends the monitor
client sends out-of-band command
--> time passes...
in-band command #1 completes, QEMU sends reply
QEMU dequeues in-band command #2, resumes the monitor
in-band command #2 starts executing
QEMU reads and executes out-of-band command
out-of-band command completes, QEMU sends reply
in-band command #2 completes, QEMU sends reply
... same for remaining in-band commands ...
The out-of-band command gets stuck behind the in-band commands.
The client can avoid this by managing the flow of in-band commands: have
no more than 7 in flight, so the monitor never gets suspended.
This is a potentially useful thing to do for clients, isn't it?
Eric, Daniel, is it something libvirt would do?
Right now, libvirt serializes commands - it never sends a QMP command
until the previous command's response has been processed. But that may
not help much, since libvirt does not send OOB commands.
I guess when we are designing what libvirt should do, and deciding WHEN
it should send OOB commands, we have the luxury of designing libvirt to
enforce how many in-flight in-band commands it will ever have pending at
once (whether the current 'at most 1', or even if we make it more
parallel to 'at most 7'), so that we can still be ensured that the OOB
command will be processed without being stuck in the queue of suspended
in-band commands. If we never send more than one in-band at a time,
then it's not a concern how deep the qemu queue is; but if we do want
libvirt to start parallel in-band commands, then you are right that
having a way to learn the qemu queue depth is programmatically more
precise than just guessing the maximum depth. But it's also hard to
argue we need that complexity if we don't have an immediate use
envisioned for it.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org