Hi Ming, On Wed, May 13, 2020 at 5:55 PM Ming Lei <ming.lei@xxxxxxxxxx> wrote: > > Hi Guys, > > More and more drivers want to get batching requests queued from > block layer, such as mmc[1], and tcp based storage drivers[2]. Also > current in-tree users have virtio-scsi, virtio-blk and nvme. > > For none, we already support batching dispatch. > > But for io scheduler, every time we just take one request from scheduler > and pass the single request to blk_mq_dispatch_rq_list(). This way makes > batching dispatch not possible when io scheduler is applied. One reason > is that we don't want to hurt sequential IO performance, becasue IO > merge chance is reduced if more requests are dequeued from scheduler > queue. > > Tries to start the support by dequeuing more requests from scheduler > if budget is enough and device isn't busy. > > Simple fio test over virtio-scsi shows IO can get improved by 5~10%. > > Patches can be found from the following tree too: > > https://github.com/ming1/linux/commits/v5.7-rc-blk-mq-batching-submission > > Patch 1 ~ 7 are improvement and cleanup, which can't applied without > supporting batching dispatch. > > Patch 8 ~ 9 starts to support batching dispatch from scheduler. Sorry for late reply. I've tested your patch set and got some better performance. Thanks. Tested-by: Baolin Wang <baolin.wang7@xxxxxxxxx> > Please review and comment! > > > [1] https://lore.kernel.org/linux-block/20200512075501.GF1531898@T590/#r > [2] https://lore.kernel.org/linux-block/fe6bd8b9-6ed9-b225-f80c-314746133722@xxxxxxxxxxx/ > > > Ming Lei (9): > blk-mq: pass request queue into get/put budget callback > blk-mq: pass hctx to blk_mq_dispatch_rq_list > blk-mq: don't predicate last flag in blk_mq_dispatch_rq_list > blk-mq: move getting driver tag and bugget into one helper > blk-mq: move .queue_rq code into one helper > blk-mq: move code for handling partial dispatch into one helper > blk-mq: remove dead check from blk_mq_dispatch_rq_list > blk-mq: pass obtained budget count to blk_mq_dispatch_rq_list > blk-mq: support batching dispatch in case of io scheduler > > block/blk-mq-sched.c | 96 ++++++++++++++-- > block/blk-mq.c | 248 +++++++++++++++++++++------------------- > block/blk-mq.h | 15 +-- > drivers/scsi/scsi_lib.c | 8 +- > include/linux/blk-mq.h | 4 +- > 5 files changed, 226 insertions(+), 145 deletions(-) > > Cc: Sagi Grimberg <sagi@xxxxxxxxxxx> > Cc: Baolin Wang <baolin.wang7@xxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> > > -- > 2.25.2 > -- Baolin Wang