[PATCH 0/3] virtio_blk: blk-mq io_poll support

From: Stefan Hajnoczi
Date: Thu May 20 2021 - 10:14:36 EST


This patch series implements blk_mq_ops->poll() so REQ_HIPRI requests can be
polled. IOPS for 4k and 16k block sizes increases by 5-18% on a virtio-blk
device with 4 virtqueues backed by an NVMe drive.

- Benchmark: fio ioengine=pvsync2 numjobs=4 direct=1
- Guest: 4 vCPUs with one virtio-blk device (4 virtqueues)
- Disk: Intel Corporation NVMe Datacenter SSD [Optane] [8086:2701]
- CPU: Intel(R) Xeon(R) Silver 4214 CPU @ 2.20GHz

rw bs hipri=0 hipri=1
------------------------------
randread 4k 149,426 170,763 +14%
randread 16k 118,939 134,269 +12%
randread 64k 34,886 34,906 0%
randread 128k 17,655 17,667 0%
randwrite 4k 138,578 163,600 +18%
randwrite 16k 102,089 120,950 +18%
randwrite 64k 32,364 32,561 0%
randwrite 128k 16,154 16,237 0%
read 4k 146,032 170,620 +16%
read 16k 117,097 130,437 +11%
read 64k 34,834 35,037 0%
read 128k 17,680 17,658 0%
write 4k 134,562 151,422 +12%
write 16k 101,796 107,606 +5%
write 64k 32,364 32,594 0%
write 128k 16,259 16,265 0%

Larger block sizes do not benefit from polling as much but the
improvement is worthwhile for smaller block sizes.

Stefan Hajnoczi (3):
virtio: add virtioqueue_more_used()
virtio_blk: avoid repeating vblk->vqs[qid]
virtio_blk: implement blk_mq_ops->poll()

include/linux/virtio.h | 2 +
drivers/block/virtio_blk.c | 126 +++++++++++++++++++++++++++++------
drivers/virtio/virtio_ring.c | 17 +++++
3 files changed, 123 insertions(+), 22 deletions(-)

--
2.31.1