Re: [PATCH RFC] hisi_sas_v3: multiqueue support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 31, 2019 at 10:32:04AM +0200, Hannes Reinecke wrote:
> On 5/31/19 10:21 AM, Ming Lei wrote:
> > 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 <hare@xxxxxxxx>
> >> ---
> >>  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?
> > 
> slot_index_alloc() is only used for commands which do _not_ have a tag
> (eg internal commands), or for v2 hardware which has weird allocation rules.

But this patch has switched to this allocation unconditionally for all commands:

> -       if (scsi_cmnd)
> -               return scsi_cmnd->request->tag;
> -

Otherwise duplicated slot can be used from different blk-mq hw queue.

> 
> > 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).
> > 
> Well, this patch is an RFC to demonstrate my idea. Of course the queue
> depth should be identical before and after the conversion.

That is why I call it is hard to partition the hostwide tags to MQ.

> 
> > Big contention is caused on hisi_sas_slot_index_alloc(), meantime huge> memory is wasted for request pool.
> > 
> See above. That allocation is only used if no blk tag is available.

This patch switches the allocation for all commands.

> 
> Or, at least, that was the idea :-)

Agree, :-)


thanks,
Ming



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux