On Fri, May 31, 2019 at 09:41:58AM +0200, Hannes Reinecke wrote:
> (Resending due to missing mailing list submission)
> 
> Update v3 to support SCSI multiqueue.
> 
> Signed-off-by: Hannes Reinecke <h...@suse.com>
> ---
>  drivers/scsi/hisi_sas/hisi_sas.h       |  1 -
>  drivers/scsi/hisi_sas/hisi_sas_main.c  | 45 
> +++++++++++++++++-----------------
>  drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 44 +++++++++++----------------------
>  3 files changed, 36 insertions(+), 54 deletions(-)
> 
> diff --git a/drivers/scsi/hisi_sas/hisi_sas.h 
> b/drivers/scsi/hisi_sas/hisi_sas.h
> index fc87994b5d73..4b6f32f60689 100644
> --- a/drivers/scsi/hisi_sas/hisi_sas.h
> +++ b/drivers/scsi/hisi_sas/hisi_sas.h
> @@ -378,7 +378,6 @@ struct hisi_hba {
>       u32 intr_coal_count;    /* Interrupt count to coalesce */
>  
>       int cq_nvecs;
> -     unsigned int *reply_map;
>  
>       /* debugfs memories */
>       u32 *debugfs_global_reg;
> diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c 
> b/drivers/scsi/hisi_sas/hisi_sas_main.c
> index 8a7feb8ed8d6..f4237c4754a4 100644
> --- a/drivers/scsi/hisi_sas/hisi_sas_main.c
> +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
> @@ -200,16 +200,12 @@ static void hisi_sas_slot_index_set(struct hisi_hba 
> *hisi_hba, int slot_idx)
>       set_bit(slot_idx, bitmap);
>  }
>  
> -static int hisi_sas_slot_index_alloc(struct hisi_hba *hisi_hba,
> -                                  struct scsi_cmnd *scsi_cmnd)
> +static int hisi_sas_slot_index_alloc(struct hisi_hba *hisi_hba)
>  {
>       int index;
>       void *bitmap = hisi_hba->slot_index_tags;
>       unsigned long flags;
>  
> -     if (scsi_cmnd)
> -             return scsi_cmnd->request->tag;
> -
>       spin_lock_irqsave(&hisi_hba->lock, flags);
>       index = find_next_zero_bit(bitmap, hisi_hba->slot_index_count,
>                                  hisi_hba->last_slot_index + 1);

Then you switch to hisi_sas_slot_index_alloc() for allocating the unique
tag via spin_lock & find_next_zero_bit(). Do you think this way is more
efficient than blk-mq's sbitmap?

The worsen thing is that V3's actual max queue depth is (4096 - 96), but
this patch claims that the device can support (4096 - 96) * 32 command
slots, finally hisi_sas_slot_index_alloc() is used to respect the actual
max queue depth(4000).

Big contention is caused on hisi_sas_slot_index_alloc(), meantime huge
memory is wasted for request pool.



Thanks,
Ming

Reply via email to