1. 27 Jun, 2019 12 commits
  2. 20 Jun, 2019 21 commits
  3. 18 Jun, 2019 7 commits
    • Suganath Prabu S's avatar
      scsi: mpt3sas: Update driver version to 29.100.00.00 · 895d8860
      Suganath Prabu S authored
      Update driver version from 28.100.00.00 to 29.100.00.00
      This is equivalent to Phase 10 OOB driver.
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      895d8860
    • Suganath Prabu S's avatar
      scsi: mpt3sas: Introduce perf_mode module parameter · ca7e1e9d
      Suganath Prabu S authored
      1. Introduce module parameter perf_mode for only Aero/Sea generation HBAs.
      
      2. Update IOC page1 fields according to performance mode.
      
      Below are the performance modes that can be enabled with module parameter
      perf_mode:
      
       0: Balanced - Few high iops reply queues will be enabled.  Interrupt
          coalescing will be enabled only for these high iops reply descriptor
          queues.
      
       1: Iops - Interrupt coalescing will be enabled on all reply queues.
          Coalescing timeout is set to 0x20.This is default value for Aero.
      
       2: Latency - Interrupt coalescing will be enabled on all reply queues.
          Coalescing timeout is set to 0xA.  This is a legacy behavior similar to
          Ventura & Invader HBA series.
      
      Default perf mode set by driver will be balanced mode if the following
      conditions are met:
      
       - CPU vendor = Intel;
       - Aero controller working in 16GT/s pcie speed
      
      Performance mode will be set to latency mode for all other cases.
      
      4k Random Read IO performance numbers on 24 SAS SSD drives for above three
      permormance modes. Performance data is from Intel Skylake and HGST SS300
      (drive model SDLL1DLR400GCCA1).
      
      IOPs:
       -----------------------------------------------------------------------
        |perf_mode    | qd = 1 | qd = 64 |   note                             |
        |-------------|--------|---------|-------------------------------------
        |balanced     |  259K  |  3061k  | Provides max performance numbers   |
        |             |        |         | both on lower QD workload &        |
        |             |        |         | also on higher QD workload         |
        |-------------|--------|---------|-------------------------------------
        |iops         |  220K  |  3100k  | Provides max performance numbers   |
        |             |        |         | only on higher QD workload.        |
        |-------------|--------|---------|-------------------------------------
        |latency      |  246k  |  2226k  | Provides good performance numbers  |
        |             |        |         | only on lower QD worklaod.         |
        -----------------------------------------------------------------------
      
      Avarage Latency:
        -----------------------------------------------------
        |perf_mode    |  qd = 1      |    qd = 64           |
        |-------------|--------------|----------------------|
        |balanced     |  92.05 usec  |    501.12 usec       |
        |-------------|--------------|----------------------|
        |iops         |  108.40 usec |    498.10 usec       |
        |-------------|--------------|----------------------|
        |latency      |  97.10 usec  |    689.26 usec       |
        -----------------------------------------------------
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      ca7e1e9d
    • Suganath Prabu S's avatar
      scsi: mpt3sas: Enable interrupt coalescing on high iops · 2426f209
      Suganath Prabu S authored
      Enable interrupt coalescing only on high iops queues.
      
      In ioc config page 1, offset 0x14 (ProductSpecific field) is used to
      determine interrupt coalescing enabled/disabled on per reply descriptor
      post queue group(8) basis.  If 31st bit is zero, then interrupt coalescing
      is enabled for all reply descriptor post queues. If 31st bit is set to one,
      then user can enable/disable interrupt coalescing on per reply descriptor
      post queue group(8) basis. So to enable interrupt coalescing only on first
      reply descriptor post queue group (i.e. on high iops queues), set bit 0 and
      31.
      
      This configuration should reset during driver unload or shutdown to the
      default settings. For this, the driver takes copy of default ioc page 1 and
      copies back the default or unmodified ioc page1 during unload and
      shutdown. This means that on next driver load (e.g. if older version driver
      is loaded by user), current modified changes on ioc page1 won't take
      effect.
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      2426f209
    • Suganath Prabu S's avatar
      scsi: mpt3sas: Affinity high iops queues IRQs to local node · 728bbc6c
      Suganath Prabu S authored
      High iops queues are mapped to non-managed irqs. Set affinity of
      non-managed irqs to local numa node.  Low latency queues are mapped to
      managed irqs.
      
      Driver reserves some reply queues for max iops (through
      pci_alloc_irq_vectors_affinity and .pre_vectors interface). The rest of
      queues are for low latency.
      
      Based on io workload in io submission path, driver will decide which group
      of reply queues (either high iops queues or low latency queues) to be
      used. High iops queues will be mapped to local numa node of controller and
      low latency queues will be mapped to cpus across numa nodes. In general,
      high iops and low latency queues should fit into 128 reply queues
      which is the max number of reply queues supported by Aero/Sea.
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      728bbc6c
    • Suganath Prabu S's avatar
      scsi: mpt3sas: save and use MSI-X index for posting RD · 998c3001
      Suganath Prabu S authored
      In the IO submission path _base_get_msix_index is called twice. Initially
      while getting the smid and subsequently while posting the request
      descriptor (RD).
      
      Refactor code to query msix index only while posting the request
      descriptor. Save determined msix index in msix_io field.
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      998c3001
    • Suganath Prabu S's avatar
      scsi: mpt3sas: Use high iops queues under some circumstances · 5dd48a55
      Suganath Prabu S authored
      The driver will use round-robin method for io submission in batches within
      the high iops queues when the number of in-flight ios on the target device
      is larger than 8. Otherwise the driver will use low latency reply queues.
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      5dd48a55
    • Suganath Prabu S's avatar
      scsi: mpt3sas: change _base_get_msix_index prototype · 02136516
      Suganath Prabu S authored
      Code refactoring.
      
      In function _base_get_msix_index, add scmd as second argument. This change
      is made in preparation for the next patch where we introduce a new function
      to get the MSI-X index for high iops queues.
      Signed-off-by: default avatarSuganath Prabu S <suganath-prabu.subramani@broadcom.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      02136516