This is indeed a difference between the ioq-based and block-based
backends. ioq could submit more than one request with the same
io_submit system call.
We can implement (advisory) calls like bdrv_plug/bdrv_unplug in order to
restore the previous levels of performance.
Note that some fallout of the conversion was expected. Dataplane told
us experimentally what level of performance could be reached, but was a
dead end in terms of functionality. Now Stefan added a whole lot of
functionality to dataplane (accounting, throttling, file formats and
protocols, thread-pool based I/O, etc.) and we need to bring back any
performance we lost in the process.
Out of curiosity, how does aio=threads (after the patch) fare in
comparison to aio=native (before the patch)?
Paolo