On Thu, Dec 7, 2023 at 3:52 PM Stefan Hajnoczi <stefanha@xxxxxxxxxx> wrote: > > On Thu, Dec 07, 2023 at 12:31:05PM +0800, Li Feng wrote: > > virtio-blk is generally used in cloud computing scenarios, where the > > performance of virtual disks is very important. The mq-deadline scheduler > > has a big performance drop compared to none with single queue. In my tests, > > mq-deadline 4k readread iops were 270k compared to 450k for none. So here > > the default scheduler of virtio-blk is set to "none". > > > > Signed-off-by: Li Feng <fengli@xxxxxxxxxx> > > --- > > drivers/block/virtio_blk.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > This seems similar to commit f8b12e513b95 ("virtio_blk: revert > QUEUE_FLAG_VIRT addition") where changing the default sounded good in > theory but exposed existing users to performance regressions. [...] > I don't want to be overly conservative. The virtio_blk driver has > undergone changes in this regard from the legacy block layer to blk-mq > (without an I/O scheduler) to blk-mq (mq-deadline). IIRC there were also regressions in both virtio-blk and virtio-scsi when switching from the legacy block layer to blk-mq. So perhaps I *am* a bit more conservative, but based on past experience, this patch seems not to be a great idea for practical use cases. Paolo > Performance changed > at each step and that wasn't a showstopper, so I think we could default > to 'none' without a lot of damage. Let's just get more data. > > Stefan > > > > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > > index d53d6aa8ee69..5183ec8e00be 100644 > > --- a/drivers/block/virtio_blk.c > > +++ b/drivers/block/virtio_blk.c > > @@ -1367,7 +1367,7 @@ static int virtblk_probe(struct virtio_device *vdev) > > vblk->tag_set.ops = &virtio_mq_ops; > > 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.flags = BLK_MQ_F_SHOULD_MERGE | BLK_MQ_F_NO_SCHED_BY_DEFAULT; > > vblk->tag_set.cmd_size = > > sizeof(struct virtblk_req) + > > sizeof(struct scatterlist) * VIRTIO_BLK_INLINE_SG_CNT; > > -- > > 2.42.0 > >