mirror of https://gitee.com/openkylin/linux.git
virtio-blk: support per-device queue depth
module parameter 'virtblk_queue_depth' was firstly introduced for
testing/benchmarking purposes described in commit fc4324b459
("virtio-blk: base queue-depth on virtqueue ringsize or module param").
And currently 'virtblk_queue_depth' is used as a saved value for the
first probed device.
Since we have different virtio-blk devices which have different
capabilities, it requires that we support per-device queue depth instead
of per-module. So defaultly use vq free elements if module parameter
'virtblk_queue_depth' is not set.
Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/r/1611307306-71067-1-git-send-email-joseph.qi@linux.alibaba.com
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
1628c6877f
commit
d1e9aa9c34
|
@ -705,6 +705,7 @@ static int virtblk_probe(struct virtio_device *vdev)
|
|||
u32 v, blk_size, max_size, sg_elems, opt_io_size;
|
||||
u16 min_io_size;
|
||||
u8 physical_block_exp, alignment_offset;
|
||||
unsigned int queue_depth;
|
||||
|
||||
if (!vdev->config->get) {
|
||||
dev_err(&vdev->dev, "%s failure: config access disabled\n",
|
||||
|
@ -756,16 +757,18 @@ static int virtblk_probe(struct virtio_device *vdev)
|
|||
}
|
||||
|
||||
/* Default queue sizing is to fill the ring. */
|
||||
if (!virtblk_queue_depth) {
|
||||
virtblk_queue_depth = vblk->vqs[0].vq->num_free;
|
||||
if (likely(!virtblk_queue_depth)) {
|
||||
queue_depth = vblk->vqs[0].vq->num_free;
|
||||
/* ... but without indirect descs, we use 2 descs per req */
|
||||
if (!virtio_has_feature(vdev, VIRTIO_RING_F_INDIRECT_DESC))
|
||||
virtblk_queue_depth /= 2;
|
||||
queue_depth /= 2;
|
||||
} else {
|
||||
queue_depth = virtblk_queue_depth;
|
||||
}
|
||||
|
||||
memset(&vblk->tag_set, 0, sizeof(vblk->tag_set));
|
||||
vblk->tag_set.ops = &virtio_mq_ops;
|
||||
vblk->tag_set.queue_depth = virtblk_queue_depth;
|
||||
vblk->tag_set.queue_depth = queue_depth;
|
||||
vblk->tag_set.numa_node = NUMA_NO_NODE;
|
||||
vblk->tag_set.flags = BLK_MQ_F_SHOULD_MERGE;
|
||||
vblk->tag_set.cmd_size =
|
||||
|
|
Loading…
Reference in New Issue