On Sun, Jul 10, 2022 at 08:08:49PM +0800, Chao Gao wrote: > When we measure FIO read performance (cache=writethrough, bs=4k, > iodepth=64) in VMs, ~80K/s notifications (e.g., EPT_MISCONFIG) are observed > from guest to qemu. > > It turns out those frequent notificatons are caused by interference from > worker threads. Worker threads queue bottom halves after completing IO > requests. Pending bottom halves may lead to either aio_compute_timeout() > zeros timeout and pass it to try_poll_mode() or run_poll_handlers() returns > no progress after noticing pending aio_notify() events. Both cause > run_poll_handlers() to call poll_set_started(false) to disable poll mode. > However, for both cases, as timeout is already zeroed, the event loop > (i.e., aio_poll()) just processes bottom halves and then starts the next > event loop iteration. So, disabling poll mode has no value but leads to > unnecessary notifications from guest. > > To minimize unnecessary notifications from guest, defer disabling poll > mode to when the event loop is about to be blocked. > > With this patch applied, FIO seq-read performance (bs=4k, iodepth=64, > cache=writethrough) in VMs increases from 330K/s to 413K/s IOPS. > > Suggested-by: Stefan Hajnoczi <stefa...@redhat.com> > Signed-off-by: Chao Gao <chao....@intel.com> > --- > util/aio-posix.c | 21 +++++++++++++++------ > 1 file changed, 15 insertions(+), 6 deletions(-)
I just noticed that I forgot to send a pull request with this for QEMU 7.1. It's my fault that this missed QEMU 7.1, sorry. It will be merged once the 7.2 merge window opens. Stefan
signature.asc
Description: PGP signature