Update lpfc to revision 12.2.0.0
This first 22 patches in this patch set are a rework of the I/O
submission path in the driver to focus on cpu affinity. This work
raises the performance of the lpfc driver from a level of 1-2M iops
per port to numbers that have reached over 9M per port. The
modifications have been kept in separate function groupings of 1 per
patch. Unfortunately, some of the patches are still a bit daunting.
I've kept them as small as possible.
The changes can be summarized by the following:
- Separate buffer lists, each mapping to an exchange, were
maintained in both NVME and SCSI. This has all been commonized.
- The old lpfc io_channel was stripped out and replaced by
hardware queues. These are wq/cq pairs, 1 per protocol per cpu.
If there are less than cpu count, they are equitably distributed
among sockets/cores.
- MSIX vector allocation is attempted per hardware queue. If fewer
vectors than hardware queues, they are equitably distributed
among sockets/cores.
- XRI allocation is divided up amongst the hardware queues. An
early patch will commonize but place things on a single list.
A later patch will partition the list among the hardware queues
and a subsequent patch will finally implement a sharing scheme
between cpus.
- Interrupt handling and coalescing is closely looked at. The new
irq interfaces are used, several items were corrected, and much
better behaviors with the hardware were implemented.
- The scsi side is closely looked at to tie into SCSI MQ. NVME is
already in place.
- As everything is commonized and shared, NVME and SCSI are both
enabled by default.
- Along the way, other code cleanups and lock avoidance mods were
made.
The latter 2 patches (not including the rev change) are bug fixes
for the nvme target module, whose changes are dependent upon the
submission path rework.
The patches were cut against Martin's 4.21/scsi-queue tree
James Smart (25):
lpfc: cleanup: remove nrport from nvme command structure
lpfc: cleanup: Remove excess check on NVME io submit code path
lpfc: Implement common IO buffers between NVME and SCSI
lpfc: Remove extra vector and SLI4 queue for Expresslane
lpfc: Replace io_channels for nvme and fcp with general hdw_queues per
cpu
lpfc: Partition XRI buffer list across Hardware Queues
lpfc: cleanup: Remove unused FCP_XRI_ABORT_EVENT slowpath event
lpfc: cleanup: Remove lock on SCSI io completion
lpfc: Adapt cpucheck debugfs logic to Hardware Queues
lpfc: Move SCSI and NVME Stats to hardware queue structures
lpfc: Convert ring number to hardware queue for nvme wqe posting.
lpfc: Synchronize hardware queues with SCSI MQ interface
lpfc: Adapt partitioned XRI lists to efficient sharing
lpfc: Allow override of hardware queue selection policies
lpfc: Fix setting affinity hints to correlate with hardware queues
lpfc: Support non-uniform allocation of MSIX vectors to hardware
queues
lpfc: cleanup: convert eq_delay to usdelay
lpfc: Rework EQ/CQ processing to address interrupt coalescing
lpfc: Utilize new IRQ API when allocating MSI-X vectors
lpfc: Resize cpu maps structures based on possible cpus
lpfc: Enable SCSI and NVME fc4s by default
lpfc: Fix default driver parameter collision for allowing NPIV support
lpfc: Correct upcalling nvmet_fc transport during io done downcall
lpfc: Fix nvmet issues when link bounce under IO load
lpfc: Update lpfc version to 12.2.0.0
drivers/scsi/lpfc/lpfc.h | 96 +-
drivers/scsi/lpfc/lpfc_attr.c | 477 +++++---
drivers/scsi/lpfc/lpfc_crtn.h | 34 +-
drivers/scsi/lpfc/lpfc_ct.c | 16 +-
drivers/scsi/lpfc/lpfc_debugfs.c | 1047 ++++++++++++----
drivers/scsi/lpfc/lpfc_debugfs.h | 71 +-
drivers/scsi/lpfc/lpfc_els.c | 4 +-
drivers/scsi/lpfc/lpfc_hbadisc.c | 38 +-
drivers/scsi/lpfc/lpfc_hw4.h | 14 +-
drivers/scsi/lpfc/lpfc_init.c | 2251 ++++++++++++++++++----------------
drivers/scsi/lpfc/lpfc_nportdisc.c | 8 +-
drivers/scsi/lpfc/lpfc_nvme.c | 698 +++--------
drivers/scsi/lpfc/lpfc_nvme.h | 64 +-
drivers/scsi/lpfc/lpfc_nvmet.c | 446 ++++---
drivers/scsi/lpfc/lpfc_nvmet.h | 2 +
drivers/scsi/lpfc/lpfc_scsi.c | 821 ++++---------
drivers/scsi/lpfc/lpfc_scsi.h | 61 +-
drivers/scsi/lpfc/lpfc_sli.c | 2332 +++++++++++++++++++++++-------------
drivers/scsi/lpfc/lpfc_sli.h | 86 ++
drivers/scsi/lpfc/lpfc_sli4.h | 302 ++++-
drivers/scsi/lpfc/lpfc_version.h | 2 +-
drivers/scsi/lpfc/lpfc_vport.c | 25 +-
22 files changed, 5054 insertions(+), 3841 deletions(-)
--
2.13.7