[PATCH 00/14] lpfc multiqueue performance fixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

here's a patchset to improve lpfc multiqueue performance.
They are a reworked version of those which I've used for
the performance tests I've presented at VAULT 2016.

The patches address two issues in the lpfc driver:
- Decouple abort I/O handling.
  Currently the lpfc driver has to synchronize I/O completions
  with pending aborts, which involves taking a spinlock during
  I/O completion. With this patchset aborts can run independent
  of the I/O completion, and the spinlock can be avoided.
- Array-based command allocation.
  The original driver was using a list-based command allocation,
  which required us to take a lock during command submission.
  This patchset implements an array-based command allocation where
  each element is addressed by the command tag. As the blocklayer
  ensures that we'll never see busy tags we can avoid the spinlock.

To decoupling aborts and I/O completion works as the firmware will
always send an I/O completion, even if the command has been aborted.
So we can as well keep the I/O running when an abort is active (ie
the block timeout function will return BLK_EH_RESET_TIMER), and
complete the command _after_ the aborts are finished. This way
we can ensure that no aborts will be running by the time the I/O
completion (ie ->scsi_done()) is called.
As there are potentially other drivers which could benefit from this
I've added a new SCSI host template flag 'abort_completions'.

The patchset is based on linux v4.7, and can be found at

http://git.kernel.org/hare/scsi-devel/h/lpfc.v3

As usual, comments and reviews are welcome.

Hannes Reinecke (14):
  block: don't check request size in blk_cloned_rq_check_limits()
  lpfc: remove unused 'pring' argument
  lpfc: Add config option 'lpfc_enable_stats'
  scsi: add 'abort_completions' host template flag
  lpfc: do not wait for completion when aborting commands
  lpfc: display manual queue assignment
  scsi: modify can_queue after calling mq_allocate()
  blk-mq: add blk_mq_resize_tag_set()
  scsi: Implement scsi_mq_resize_tags()
  lpfc: use bitflag for exch_busy
  lpfc: set LPFC_CMD_ABORTED when a command is put on the aborted list
  lpfc: move to array based command allocation for SLI-4
  lpfc: LPFC_CMD_RRQ_ACTIVE flag to mark commands
  lpfc: Complete scsi commands after RRQ has completed

 block/blk-core.c              |   5 -
 block/blk-mq.c                |  15 +++
 drivers/scsi/lpfc/lpfc.h      |   2 +
 drivers/scsi/lpfc/lpfc_attr.c |  20 +++-
 drivers/scsi/lpfc/lpfc_init.c |  54 +++++++++-
 drivers/scsi/lpfc/lpfc_scsi.c | 222 +++++++++++++++++++++++++++++-------------
 drivers/scsi/lpfc/lpfc_scsi.h |   7 +-
 drivers/scsi/lpfc/lpfc_sli.c  |  77 ++++++++++++---
 drivers/scsi/scsi_error.c     |   7 +-
 drivers/scsi/scsi_lib.c       |  14 ++-
 include/linux/blk-mq.h        |   1 +
 include/scsi/scsi_host.h      |   7 ++
 12 files changed, 337 insertions(+), 94 deletions(-)

-- 
1.8.5.6

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux