mbox series

[v4,0/7] Submit zoned writes in order

Message ID 20230621201237.796902-1-bvanassche@acm.org (mailing list archive)
Headers show
Series Submit zoned writes in order | expand

Message

Bart Van Assche June 21, 2023, 8:12 p.m. UTC
Hi Jens,

Tests with a zoned UFS prototype have shown that the block layer may reorder
zoned writes (REQ_OP_WRITE). The UFS driver is more likely to trigger reordering
than other SCSI drivers because it reports BLK_STS_DEV_RESOURCE more often, e.g.
during clock scaling. This patch series makes sure that zoned writes are
submitted in order without affecting other workloads significantly.

Please consider this patch series for the next merge window.

Thanks,

Bart.

Changes compared to v3:
- Dropped the changes for sending already dispatched requests back to the I/O
  scheduler if the block driver is busy.
- Dropped several patches that aren't needed to preserve the order of zoned
  writes.
- Only send requeued writes to the I/O scheduler. Send requeued reads straight
  to the dispatch queue.
- Changed the approach from one requeue list per request queue into one requeue
  list per hardware queue.

Changes compared to v2:
- Changed the approach from one requeue list per hctx into preserving one
  requeue list per request queue.
- Rebased on top of Jens' for-next branch. Left out the mq-deadline patches
  since these are already in the for-next branch.
- Modified patch "block: Requeue requests if a CPU is unplugged" such that it
  always uses the requeue list.
- Added a patch that removes blk_mq_kick_requeue_list() and
  blk_mq_delay_kick_requeue_list().
- Dropped patch "block: mq-deadline: Disable head insertion for zoned writes".
- Dropped patch "block: mq-deadline: Introduce a local variable".

Changes compared to v1:
- Fixed two issues detected by the kernel test robot.

Bart Van Assche (7):
  block: Rename a local variable in blk_mq_requeue_work()
  block: Simplify blk_mq_requeue_work()
  block: Send requeued requests to the I/O scheduler
  block: One requeue list per hctx
  block: Preserve the order of requeued requests
  dm: Inline __dm_mq_kick_requeue_list()
  block: Inline blk_mq_{,delay_}kick_requeue_list()

 block/blk-flush.c            | 28 +++++++------
 block/blk-mq-debugfs.c       | 66 ++++++++++++++---------------
 block/blk-mq.c               | 81 ++++++++++++++----------------------
 drivers/block/ublk_drv.c     |  6 +--
 drivers/block/xen-blkfront.c |  1 -
 drivers/md/dm-rq.c           | 11 ++---
 drivers/nvme/host/core.c     |  2 +-
 drivers/s390/block/scm_blk.c |  2 +-
 drivers/scsi/scsi_lib.c      |  2 +-
 include/linux/blk-mq.h       | 11 +++--
 include/linux/blkdev.h       |  5 ---
 11 files changed, 96 insertions(+), 119 deletions(-)