On 1/18/21 1:25 PM, Jason Wang wrote: > > On 2021/1/18 上午11:58, Joseph Qi wrote: >> 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. > > > I wonder if it's better to use sysfs instead (or whether it has already > had something like this in the blocker layer). > "/sys/block/<dev>/queue/nr_requests" indeed works, but isn't better to set queue_depth according to the hardware capability at the very first? AFAIK, nvme just set per-device queue_depth at initializing phase. Thanks, Jeffle > > >> >> Signed-off-by: Joseph Qi <joseph.qi@xxxxxxxxxxxxxxxxx> >> --- >> 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 = -- Thanks, Jeffle _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization