Re: [PATCH 4/4] scsi: core: don't limit per-LUN queue depth for SSD

Sumanesh Samanta
2019-11-21T01:50:17Z

>>You just see large IO size from driver side or device side, and do you
>>know why the big size IO is submitted to driver? Block layer's IO merge
>>contributes a lot for that, and IO merge usually starts to work

May be it contribute to some extent, but I do not think streaming
applications have any incentive/reason to give small IO. An
application like Netflix need to read as much data as soon as possible
and serve to customers, they have no reason to read in small chunks.
In fact, they read in huge chunks.
That is why sequential IO is normally large chunks and random IO (
which is more DB kind of operations ) is small IO.
Only exception I know of is database REDO logs, that are small
sequential IO, because there the DB is logging small transactions --
but they go to SSDs.

>>Yeah, that is why my patches just bypass sdev->device_busy for SSD, and
>>looks you misunderstood the idea behind the patches, right?

No, I got the idea, I am just saying most high end controllers have an
IO size limit , and even if the block layer merges IO, it does not
help, since they have to be broken to the max size the controller
supports. Also, most high end controllers have their own merging
logic, and hence not too much dependent on upper layer merging for
them

On Wed, Nov 20, 2019 at 6:22 PM Ming Lei <ming.lei@redhat.com> wrote:
>
> On Wed, Nov 20, 2019 at 02:58:40PM -0700, Sumanesh Samanta wrote:
> > >Ordinarily I'd prefer a host template attribute as Sumanesh proposed,
> > >but I dislike wrapping the examination of that and the queue flag in
> > >a macro that makes it not obvious how the behavior is affected.
> >
> > I think we can have a host template attribute and discard this check
> > altogether, that is not check device_busy for both SDD and HDDs.
> >
> > As both you and Hannes mentioned, this change affects high end controllers
> > most, and most of them have some storage IO size limit. Also, for HDD
> > sequential IO is almost always large and
> > touch the controller max IO size limit.
>
> You just see large IO size from driver side or device side, and do you
> know why the big size IO is submitted to driver? Block layer's IO merge
> contributes a lot for that, and IO merge usually starts to work
> after queue becomes busy which can be signaled from !blk_mq_get_dispatch_budget().
>
> That is why we implements .get_budget and .put_budget on SCSI for fixing
> sequential IO performance regression.
>
> 0df21c86bdbf scsi: implement .get_budget and .put_budget for blk-mq
> aeec77629a4a scsi: allow passing in null rq to scsi_prep_state_check()
> b347689ffbca blk-mq-sched: improve dispatching from sw queue
> de1482974080 blk-mq: introduce .get_budget and .put_budget in blk_mq_ops
>
> Also HDD may be connected to high end HBA too.
>
> > Thus, I am not sure merge matters
> > for these kind of controllers.
>
> Yeah, that is why my patches just bypass sdev->device_busy for SSD, and
> looks you misunderstood the idea behind the patches, right?
>
>
>
> Thanks,
> Ming
>