Am 14.01.2020 um 19:45 hat Daniel P. Berrangé geschrieben: > On Tue, Jan 14, 2020 at 07:27:31PM +0100, Kevin Wolf wrote: > > Some QMP command handlers can block the main loop for a relatively long > > time, for example because they perform some I/O. This is quite nasty. > > Allowing such handlers to run in a coroutine where they can yield (and > > therefore release the BQL) while waiting for an event such as I/O > > completion solves the problem. > > Am I right that with this approach, there's no functional difference > to QMP from a mgmt app POV ? ie this is purely focused on avoiding > stalls in the main event loop which impact the guest OS and other > parts of QEMU ? > > IOW, the response to the QMP command being executed will get sent > back to the mgmt app as normal when the command completes, and the > QMP monitor still serializes execution of commands ?
Yes, the QMP dispatcher still processes one request after another. The only visible effect should be that the guest and other background tasks aren't blocked. > > This series adds the infrastructure to allow this and switches > > block_resize to run in a coroutine as a first example. > > > > This is an alternative solution to Marc-André's "monitor: add > > asynchronous command type" series. > > Where as this is an actual functional improvement to QMP from > the mgmt app POV in allowing background commands & thus > concurrent execution ? > > If this is correct, then the two proposals are somewhat > complementary Marc-André's first proposal (maybe two years ago) actually added real asynchronous commands to the protocol. But his latest versions gave up on this and made commands only internally asynchronous, with pretty much the same effect as this series. If we ever do want to extend the protocol to have async commands on the protocol level, this can still be done on top. There is no fundamental problem that would prevent just launching a coroutine for each parallel request. In fact, this series is probably the first step that you would make anyway to even have something that can be parallelised. Kevin