cxlflash: Increase cmd_per_lun for better throughput
authorManoj N. Kumar <manoj@linux.vnet.ibm.com>
Fri, 4 Mar 2016 21:55:20 +0000 (15:55 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 26 Mar 2017 10:13:17 +0000 (12:13 +0200)
commit 83430833b4d4a9c9b23964babbeb1f36450f8136 upstream.

With the current value of cmd_per_lun at 16, the throughput
over a single adapter is limited to around 150kIOPS.

Increase the value of cmd_per_lun to 256 to improve
throughput. With this change a single adapter is able to
attain close to the maximum throughput (380kIOPS).
Also change the number of RRQ entries that can be queued.

Signed-off-by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>
Acked-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Reviewed-by: Uma Krishnan <ukrishn@linux.vnet.ibm.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/cxlflash/common.h
drivers/scsi/cxlflash/main.c

index 5ada9268a450db224663f2fa28e43fc79701c886..a8ac4c0a14937fb7754c5a7fc073258647619139 100644 (file)
@@ -34,7 +34,6 @@ extern const struct file_operations cxlflash_cxl_fops;
                                                                   sectors
                                                                */
 
-#define NUM_RRQ_ENTRY    16     /* for master issued cmds */
 #define MAX_RHT_PER_CONTEXT (PAGE_SIZE / sizeof(struct sisl_rht_entry))
 
 /* AFU command retry limit */
@@ -48,9 +47,12 @@ extern const struct file_operations cxlflash_cxl_fops;
                                                           index derivation
                                                         */
 
-#define CXLFLASH_MAX_CMDS               16
+#define CXLFLASH_MAX_CMDS               256
 #define CXLFLASH_MAX_CMDS_PER_LUN       CXLFLASH_MAX_CMDS
 
+/* RRQ for master issued cmds */
+#define NUM_RRQ_ENTRY                   CXLFLASH_MAX_CMDS
+
 
 static inline void check_sizes(void)
 {
@@ -149,7 +151,7 @@ struct afu_cmd {
 struct afu {
        /* Stuff requiring alignment go first. */
 
-       u64 rrq_entry[NUM_RRQ_ENTRY];   /* 128B RRQ */
+       u64 rrq_entry[NUM_RRQ_ENTRY];   /* 2K RRQ */
        /*
         * Command & data for AFU commands.
         */
index c86847c6844824ef1105286dba94b73af6fde998..2882bcac918a05732f6a8c36d84bcfaf3b9ef049 100644 (file)
@@ -2305,7 +2305,7 @@ static struct scsi_host_template driver_template = {
        .eh_device_reset_handler = cxlflash_eh_device_reset_handler,
        .eh_host_reset_handler = cxlflash_eh_host_reset_handler,
        .change_queue_depth = cxlflash_change_queue_depth,
-       .cmd_per_lun = 16,
+       .cmd_per_lun = CXLFLASH_MAX_CMDS_PER_LUN,
        .can_queue = CXLFLASH_MAX_CMDS,
        .this_id = -1,
        .sg_tablesize = SG_NONE,        /* No scatter gather support */