84d61e5f36
virtio-blk and virtio-scsi invoke virtio_irqfd_notify() to send Used Buffer Notifications from an IOThread. This involves an eventfd write(2) syscall. Calling this repeatedly when completing multiple I/O requests in a row is wasteful. Use the defer_call() API to batch together virtio_irqfd_notify() calls made during thread pool (aio=threads), Linux AIO (aio=native), and io_uring (aio=io_uring) completion processing. Behavior is unchanged for emulated devices that do not use defer_call_begin()/defer_call_end() since defer_call() immediately invokes the callback when called outside a defer_call_begin()/defer_call_end() region. fio rw=randread bs=4k iodepth=64 numjobs=8 IOPS increases by ~9% with a single IOThread and 8 vCPUs. iodepth=1 decreases by ~1% but this could be noise. Detailed performance data and configuration specifics are available here: https://gitlab.com/stefanha/virt-playbooks/-/tree/blk_io_plug-irqfd This duplicates the BH that virtio-blk uses for batching. The next commit will remove it. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Message-ID: <20230913200045.1024233-4-stefanha@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> |
||
---|---|---|
.. | ||
Kconfig | ||
meson.build | ||
trace-events | ||
trace.h | ||
vdpa-dev-pci.c | ||
vdpa-dev.c | ||
vhost-backend.c | ||
vhost-iova-tree.c | ||
vhost-iova-tree.h | ||
vhost-scsi-pci.c | ||
vhost-shadow-virtqueue.c | ||
vhost-shadow-virtqueue.h | ||
vhost-stub.c | ||
vhost-user-blk-pci.c | ||
vhost-user-device-pci.c | ||
vhost-user-device.c | ||
vhost-user-fs-pci.c | ||
vhost-user-fs.c | ||
vhost-user-gpio-pci.c | ||
vhost-user-gpio.c | ||
vhost-user-i2c-pci.c | ||
vhost-user-i2c.c | ||
vhost-user-input-pci.c | ||
vhost-user-rng-pci.c | ||
vhost-user-rng.c | ||
vhost-user-scmi-pci.c | ||
vhost-user-scmi.c | ||
vhost-user-scsi-pci.c | ||
vhost-user-vsock-pci.c | ||
vhost-user-vsock.c | ||
vhost-user.c | ||
vhost-vdpa.c | ||
vhost-vsock-common.c | ||
vhost-vsock-pci.c | ||
vhost-vsock.c | ||
vhost.c | ||
virtio-9p-pci.c | ||
virtio-balloon-pci.c | ||
virtio-balloon.c | ||
virtio-blk-pci.c | ||
virtio-bus.c | ||
virtio-config-io.c | ||
virtio-crypto-pci.c | ||
virtio-crypto.c | ||
virtio-hmp-cmds.c | ||
virtio-input-host-pci.c | ||
virtio-input-pci.c | ||
virtio-iommu-pci.c | ||
virtio-iommu.c | ||
virtio-md-pci.c | ||
virtio-mem-pci.c | ||
virtio-mem-pci.h | ||
virtio-mem.c | ||
virtio-mmio.c | ||
virtio-net-pci.c | ||
virtio-pci.c | ||
virtio-pmem-pci.c | ||
virtio-pmem-pci.h | ||
virtio-pmem.c | ||
virtio-qmp.c | ||
virtio-qmp.h | ||
virtio-rng-pci.c | ||
virtio-rng.c | ||
virtio-scsi-pci.c | ||
virtio-serial-pci.c | ||
virtio-stub.c | ||
virtio.c |