qemu/hw/block
Stefan Hajnoczi d0435bc513 virtio: don't enable notifications during polling
Virtqueue notifications are not necessary during polling, so we disable
them.  This allows the guest driver to avoid MMIO vmexits.
Unfortunately the virtio-blk and virtio-scsi handler functions re-enable
notifications, defeating this optimization.

Fix virtio-blk and virtio-scsi emulation so they leave notifications
disabled.  The key thing to remember for correctness is that polling
always checks one last time after ending its loop, therefore it's safe
to lose the race when re-enabling notifications at the end of polling.

There is a measurable performance improvement of 5-10% with the null-co
block driver.  Real-life storage configurations will see a smaller
improvement because the MMIO vmexit overhead contributes less to
latency.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20191209210957.65087-1-stefanha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2020-01-05 07:03:03 -05:00
..
dataplane virtio-blk: fix out-of-bounds access to bitmap in notify_guest_bh 2019-12-19 16:20:25 +00:00
block.c pflash: Require backend size to match device, improve errors 2019-03-26 08:16:24 +01:00
cdrom.c Include qemu-common.h exactly where needed 2019-06-12 13:20:20 +02:00
ecc.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
fdc.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
hd-geometry.c block: Remove blk_pread_unthrottled() 2019-08-16 10:25:16 +02:00
Kconfig hw/m68k: add a dummy SWIM floppy controller 2019-10-28 19:06:51 +01:00
m25p80.c m25p80: Add support for w25q512jv 2019-10-15 18:09:05 +01:00
Makefile.objs hw/m68k: add a dummy SWIM floppy controller 2019-10-28 19:06:51 +01:00
nand.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
nvme.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
nvme.h nvme: add Get/Set Feature Timestamp support 2019-06-04 15:22:09 +02:00
onenand.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
pflash_cfi01.c hw/block/pflash: Remove dynamic field width from trace events 2019-11-19 14:45:58 +01:00
pflash_cfi02.c hw/block/pflash: Remove dynamic field width from trace events 2019-11-19 14:45:58 +01:00
swim.c hw/m68k: add a dummy SWIM floppy controller 2019-10-28 19:06:51 +01:00
tc58128.c Include hw/hw.h exactly where needed 2019-08-16 13:31:52 +02:00
trace-events hw/block/pflash: Remove dynamic field width from trace events 2019-11-19 14:45:58 +01:00
vhost-user-blk.c vhost-user-blk: prevent using uninitialized vqs 2019-09-16 06:27:35 -04:00
virtio-blk.c virtio: don't enable notifications during polling 2020-01-05 07:03:03 -05:00
xen_blkif.h xen: Import other xen/io/*.h 2019-06-24 10:42:30 +01:00
xen-block.c xen-block: treat XenbusStateUnknown the same as XenbusStateClosed 2019-09-24 12:21:11 +01:00