Suwan Kim 4e04005256 virtio-blk: support polling I/O
This patch supports polling I/O via virtio-blk driver. Polling
feature is enabled by module parameter "poll_queues" and it sets
dedicated polling queues for virtio-blk. This patch improves the
polling I/O throughput and latency.

The virtio-blk driver doesn't not have a poll function and a poll
queue and it has been operating in interrupt driven method even if
the polling function is called in the upper layer.

virtio-blk polling is implemented upon 'batched completion' of block
layer. virtblk_poll() queues completed request to io_comp_batch->req_list
and later, virtblk_complete_batch() calls unmap function and ends
the requests in batch.

virtio-blk reads the number of poll queues from module parameter
"poll_queues". If VM sets queue parameter as below,
("num-queues=N" [QEMU property], "poll_queues=M" [module parameter])
It allocates N virtqueues to virtio_blk->vqs[N] and it uses [0..(N-M-1)]
as default queues and [(N-M)..(N-1)] as poll queues. Unlike the default
queues, the poll queues have no callback function.

Regarding HW-SW queue mapping, the default queue mapping uses the
existing method that condsiders MSI irq vector. But the poll queue
doesn't have an irq, so it uses the regular blk-mq cpu mapping.

For verifying the improvement, I did Fio polling I/O performance test
with io_uring engine with the options below.
(io_uring, hipri, randread, direct=1, bs=512, iodepth=64 numjobs=N)
I set 4 vcpu and 4 virtio-blk queues - 2 default queues and 2 poll
queues for VM.

As a result, IOPS and average latency improved about 10%.

Test result:

- Fio io_uring poll without virtio-blk poll support
	-- numjobs=1 : IOPS = 339K, avg latency = 188.33us
	-- numjobs=2 : IOPS = 367K, avg latency = 347.33us
	-- numjobs=4 : IOPS = 383K, avg latency = 682.06us

- Fio io_uring poll with virtio-blk poll support
	-- numjobs=1 : IOPS = 385K, avg latency = 165.94us
	-- numjobs=2 : IOPS = 408K, avg latency = 313.28us
	-- numjobs=4 : IOPS = 424K, avg latency = 613.05us

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>
Signed-off-by: Suwan Kim <suwan.kim027@gmail.com>
Message-Id: <20220406153207.163134-2-suwan.kim027@gmail.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
2022-05-31 12:44:23 -04:00
..
2022-05-23 14:14:50 -07:00
2022-05-27 21:24:19 -07:00
2022-05-31 12:44:23 -04:00
2022-05-26 10:32:47 -07:00
2022-05-15 18:31:28 -06:00
2022-05-29 11:38:27 -07:00
2022-05-26 10:50:30 -07:00
2022-05-28 11:27:17 -07:00
2022-05-29 11:38:27 -07:00
2022-05-25 16:18:27 -07:00
2022-05-28 11:39:01 -07:00
2022-05-25 16:18:27 -07:00
2022-04-28 14:50:09 +02:00
2022-05-24 16:19:30 -07:00
2022-05-26 21:08:40 -07:00
2022-05-25 19:18:36 -07:00
2022-05-26 14:51:38 -07:00
2022-05-27 15:49:30 -07:00
2022-05-25 12:22:58 -07:00
2022-05-28 11:27:17 -07:00
2022-05-30 10:56:18 -07:00
2022-05-24 15:13:30 -07:00
2022-05-26 10:50:30 -07:00
2022-05-27 21:24:19 -07:00
2022-05-26 21:08:40 -07:00
2022-05-25 16:18:27 -07:00
2022-05-25 15:02:26 +02:00
2022-05-28 11:39:01 -07:00
2022-05-23 21:06:11 -07:00
2022-05-30 11:01:50 -07:00
2022-05-24 11:39:54 -07:00
2022-05-09 23:09:10 +02:00
2022-05-23 20:56:17 -07:00
2022-05-27 15:49:30 -07:00
2022-05-28 11:39:01 -07:00
2022-05-11 08:29:11 +03:00
2022-05-25 16:55:16 -07:00
2022-05-25 19:09:48 -07:00
2022-05-26 10:32:47 -07:00
2022-05-30 11:30:16 -07:00
2022-05-25 13:56:57 -07:00
2022-05-25 19:18:36 -07:00