linux/drivers/scsi/lpfc
James Smart d74a89aab9 scsi: lpfc: Separate CQ processing for nvmet_fc upcalls
Currently the driver is notified of new command frame receipt by CQEs. As
part of the CQE processing, the driver upcalls the nvmet_fc transport to
deliver the command. nvmet_fc, as part of receiving the command builds out
a context for it, where one of the first steps is to allocate memory for
the io.

When running with tests that do large ios (1MB), it was found on some
systems, the total number of outstanding I/O's, at 1MB per, completely
consumed the system's memory. Thus additional ios were getting blocked in
the memory allocator.  Given that this blocked the lpfc thread processing
CQEs, there were lots of other commands that were received and which are
then held up, and given CQEs are serially processed, the aggregate delays
for an IO waiting behind the others became cummulative - enough so that the
initiator hit timeouts for the ios.

The basic fix is to avoid the direct upcall and instead schedule a work
item for each io as it is received. This allows the cq processing to
complete very quickly, and each io can then run or block on it's own.
However, this general solution hurts latency when there are few ios.  As
such, implemented the fix such that the driver watches how many CQEs it has
processed sequentially in one run. As long as the count is below a
threshold, the direct nvmet_fc upcall will be made. Only when the count is
exceeded will it revert to work scheduling.

Given that debug of this showed a surprisingly long delay in cq processing,
the io timer stats were updated to better reflect the processing of the
different points.

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2019-06-18 19:46:21 -04:00
..
Makefile scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc.h scsi: lpfc: Correct boot bios information to FDMI registration 2019-03-19 13:15:09 -04:00
lpfc_attr.c scsi: lpfc: Move trunk_errmsg[] from a header file into a .c file 2019-04-03 23:11:36 -04:00
lpfc_attr.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_bsg.c scsi: lpfc: Update Copyright in driver version 2019-03-19 13:15:10 -04:00
lpfc_bsg.h scsi: lpfc: Update Copyright in driver version 2019-03-19 13:15:10 -04:00
lpfc_compat.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_crtn.h scsi: lpfc: Separate CQ processing for nvmet_fc upcalls 2019-06-18 19:46:21 -04:00
lpfc_ct.c scsi: lpfc: Annotate switch/case fall-through 2019-04-03 23:11:35 -04:00
lpfc_debugfs.c scsi: lpfc: change snprintf to scnprintf for possible overflow 2019-03-25 22:14:16 -04:00
lpfc_debugfs.h scsi: lpfc: change snprintf to scnprintf for possible overflow 2019-03-25 22:14:16 -04:00
lpfc_disc.h scsi: lpfc: Fix discovery failures during port failovers with lots of vports 2018-12-07 22:35:32 -05:00
lpfc_els.c scsi: lpfc: add support for posting FC events on FPIN reception 2019-04-08 21:29:16 -04:00
lpfc_hbadisc.c scsi: scsi_transport_fc: nvme: display FC-NVMe port roles 2019-04-12 20:09:34 -04:00
lpfc_hw.h scsi: lpfc: add support for posting FC events on FPIN reception 2019-04-08 21:29:16 -04:00
lpfc_hw4.h scsi: lpfc: Move trunk_errmsg[] from a header file into a .c file 2019-04-03 23:11:36 -04:00
lpfc_ids.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_init.c scsi: lpfc: Make lpfc_sli4_oas_verify static 2019-04-18 20:35:58 -04:00
lpfc_logmsg.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_mbox.c SCSI misc on 20190306 2019-03-09 16:53:47 -08:00
lpfc_mem.c scsi: lpfc: refactor mailbox structure context fields 2018-12-07 22:35:32 -05:00
lpfc_nl.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00
lpfc_nportdisc.c scsi: lpfc: Remove set-but-not-used variables 2019-04-03 23:11:36 -04:00
lpfc_nvme.c scsi: lpfc: Revise message when stuck due to unresponsive adapter 2019-06-18 19:46:21 -04:00
lpfc_nvme.h SCSI misc on 20190306 2019-03-09 16:53:47 -08:00
lpfc_nvmet.c scsi: lpfc: Separate CQ processing for nvmet_fc upcalls 2019-06-18 19:46:21 -04:00
lpfc_nvmet.h scsi: lpfc: Correct localport timeout duration error 2019-03-19 13:15:08 -04:00
lpfc_scsi.c scsi: lpfc: Fix alloc context on oas lun creations 2019-06-18 19:46:20 -04:00
lpfc_scsi.h scsi: lpfc: Update 12.2.0.0 file copyrights to 2019 2019-02-05 22:29:50 -05:00
lpfc_sli.c scsi: lpfc: Separate CQ processing for nvmet_fc upcalls 2019-06-18 19:46:21 -04:00
lpfc_sli.h scsi: lpfc: Coordinate adapter error handling with offline handling 2019-03-19 12:57:02 -04:00
lpfc_sli4.h scsi: lpfc: Separate CQ processing for nvmet_fc upcalls 2019-06-18 19:46:21 -04:00
lpfc_version.h scsi: lpfc: Update lpfc version to 12.2.0.1 2019-03-19 13:15:10 -04:00
lpfc_vport.c scsi: lpfc: Update 12.2.0.0 file copyrights to 2019 2019-02-05 22:29:50 -05:00
lpfc_vport.h scsi: lpfc: Revise copyright for new company language 2018-07-10 22:15:09 -04:00