Thread (12 messages) flat view 12 messages, 4 authors, 2021-01-22

Re: [PATCH RFC] virtio-blk: support per-device queue depth

From: Joseph Qi <joseph.qi@linux.alibaba.com>
Date: 2021-01-22 01:44:57

Hi Michael,

Any comments on this patch?

Thanks,
Joseph

On 1/19/21 12:14 PM, Jason Wang wrote:
On 2021/1/18 上午11:58, Joseph Qi wrote:
quoted
module parameter 'virtblk_queue_depth' was firstly introduced for
testing/benchmarking purposes described in commit fc4324b4597c
("virtio-blk: base queue-depth on virtqueue ringsize or module param").
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 <redacted>

quoted
---
  drivers/block/virtio_blk.c | 12 +++++++-----
  1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 145606d..f83a417 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -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",
@@ -755,17 +756,18 @@ static int virtblk_probe(struct virtio_device *vdev)
          goto out_free_vq;
      }
  -    /* 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 =
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help