public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [patch 1/2]percpu_ida: fix a live lock
       [not found]                 ` <52F95B73.7030205@kernel.dk>
@ 2014-02-11  9:12                   ` Christoph Hellwig
  2014-02-11 14:42                     ` James Bottomley
  0 siblings, 1 reply; 3+ messages in thread
From: Christoph Hellwig @ 2014-02-11  9:12 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Kent Overstreet, Alexander Gordeev, Shaohua Li, linux-kernel,
	linux-scsi

On Mon, Feb 10, 2014 at 04:06:27PM -0700, Jens Axboe wrote:
> For the common case, I'd assume that anywhere between 31..256 tags
> is "normal". That's where the majority of devices will end up being,
> largely. So single digits would be an anomaly.

Unfortunately that's not true in SCSI land, where most driver do per-lun
tagging, and the the cmd_per_lun values are very low and very often
single digits, as a simple grep for cmd_per_lun will tell.  Now it might
be that the tag space actually is much bigger in the hardware and the
driver authors for some reason want to limit the number of outstanding
commands, but the interface to the drivers doesn't allow them to express
such a difference at the moment.

> >How about we just make the number of tags that are allowed to be stranded an
> >explicit parameter (somehow) - then it can be up to device drivers to do
> >something sensible with it. Half is probably an ideal default for devices where
> >that works, but this way more constrained devices will be able to futz with it
> >however they want.
> 
> I don't think we should involve device drivers in this, that's
> punting a complicated issue to someone who likely has little idea
> what to do about it. This needs to be handled sensibly in the core,
> not in a device driver. If we can't come up with a sensible
> algorithm to handle this, how can we expect someone writing a device
> driver to do so?

Agreed, punting this to the drivers is a bad idea.  But at least
exposing variable for the allowed tag space and allowed outstanding
commands to be able to make a smarter decision might be a good idea.  On
the other hand this will require us to count the outstanding commands
again, introducing more cachelines touched than nessecary.  To make
things worse for complex topologies like SCSI we might have to limit the
outstanding commands at up to three levels in the hierarchy.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [patch 1/2]percpu_ida: fix a live lock
  2014-02-11  9:12                   ` [patch 1/2]percpu_ida: fix a live lock Christoph Hellwig
@ 2014-02-11 14:42                     ` James Bottomley
  2014-02-11 14:53                       ` Christoph Hellwig
  0 siblings, 1 reply; 3+ messages in thread
From: James Bottomley @ 2014-02-11 14:42 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Jens Axboe, Kent Overstreet, Alexander Gordeev, Shaohua Li,
	linux-kernel, linux-scsi

On Tue, 2014-02-11 at 01:12 -0800, Christoph Hellwig wrote:
> On Mon, Feb 10, 2014 at 04:06:27PM -0700, Jens Axboe wrote:
> > For the common case, I'd assume that anywhere between 31..256 tags
> > is "normal". That's where the majority of devices will end up being,
> > largely. So single digits would be an anomaly.
> 
> Unfortunately that's not true in SCSI land, where most driver do per-lun
> tagging, and the the cmd_per_lun values are very low and very often
> single digits, as a simple grep for cmd_per_lun will tell.

Remember we do shared (all queue) tags on qla, aic and a few other
drivers (it's actually the mailbox slot tag for the HBA).

>   Now it might
> be that the tag space actually is much bigger in the hardware and the
> driver authors for some reason want to limit the number of outstanding
> commands, but the interface to the drivers doesn't allow them to express
> such a difference at the moment.

Tag space is dependent on SCSI protocol.  It's 256 for SPI, 65536 for
SAS and I'm not sure for FCP.

> > >How about we just make the number of tags that are allowed to be stranded an
> > >explicit parameter (somehow) - then it can be up to device drivers to do
> > >something sensible with it. Half is probably an ideal default for devices where
> > >that works, but this way more constrained devices will be able to futz with it
> > >however they want.
> > 
> > I don't think we should involve device drivers in this, that's
> > punting a complicated issue to someone who likely has little idea
> > what to do about it. This needs to be handled sensibly in the core,
> > not in a device driver. If we can't come up with a sensible
> > algorithm to handle this, how can we expect someone writing a device
> > driver to do so?
> 
> Agreed, punting this to the drivers is a bad idea.  But at least
> exposing variable for the allowed tag space and allowed outstanding
> commands to be able to make a smarter decision might be a good idea.  On
> the other hand this will require us to count the outstanding commands
> again, introducing more cachelines touched than nessecary.  To make
> things worse for complex topologies like SCSI we might have to limit the
> outstanding commands at up to three levels in the hierarchy.

The list seems to be missing prior context but a few SPI drivers use the
clock algorithm for tag starvation in the driver.  The NCR ones are the
ones I know about: tag allocation is the hands of a clock sweeping
around (one for last tag and one for last outstanding tag).  The hands
are never allowed to cross, so if a tag gets starved the hands try to
cross and the driver stops issuing until the missing tag returns.  Tag
starvation used to be a known problem for Parallel devices; I haven't
seen much in the way of tag starvation algorithms for other types of
devices, so I assume the problem went away.

James

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [patch 1/2]percpu_ida: fix a live lock
  2014-02-11 14:42                     ` James Bottomley
@ 2014-02-11 14:53                       ` Christoph Hellwig
  0 siblings, 0 replies; 3+ messages in thread
From: Christoph Hellwig @ 2014-02-11 14:53 UTC (permalink / raw)
  To: James Bottomley
  Cc: Christoph Hellwig, Jens Axboe, Kent Overstreet, Alexander Gordeev,
	Shaohua Li, linux-kernel, linux-scsi

On Tue, Feb 11, 2014 at 06:42:40AM -0800, James Bottomley wrote:
> > Unfortunately that's not true in SCSI land, where most driver do per-lun
> > tagging, and the the cmd_per_lun values are very low and very often
> > single digits, as a simple grep for cmd_per_lun will tell.
> 
> Remember we do shared (all queue) tags on qla, aic and a few other
> drivers (it's actually the mailbox slot tag for the HBA).

That's why I said most and not all.  We have a fair amount of drivers
using host-wide tags.  Having to support both models actually is a bit
of an issue with the blk-mq support in scsi.

At this point I suspect we'll have to detangle the concept of tag space
and the queueing limits that blk-mq merged into a single problem space
again to support SCSI properly.

> >   Now it might
> > be that the tag space actually is much bigger in the hardware and the
> > driver authors for some reason want to limit the number of outstanding
> > commands, but the interface to the drivers doesn't allow them to express
> > such a difference at the moment.
> 
> Tag space is dependent on SCSI protocol.  It's 256 for SPI, 65536 for
> SAS and I'm not sure for FCP.

But that doesn't mean a HBA can support the full space.  Unless we know
each piece of hardware detailed enough we can't simplify increase the
tag space as we can be sure something will break.

> The list seems to be missing prior context but a few SPI drivers use the
> clock algorithm for tag starvation in the driver.  The NCR ones are the
> ones I know about: tag allocation is the hands of a clock sweeping
> around (one for last tag and one for last outstanding tag).  The hands
> are never allowed to cross, so if a tag gets starved the hands try to
> cross and the driver stops issuing until the missing tag returns.  Tag
> starvation used to be a known problem for Parallel devices; I haven't
> seen much in the way of tag starvation algorithms for other types of
> devices, so I assume the problem went away.

As long as the drivers don't rely on the block layer tag handling they
can keep whatever they want to do.  Given that it's mostly SPI drivers
I doubt the tag allocation is a performance bottle neck of any sort for
them anyway.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-02-11 14:53 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20140104210804.GA24199@kmo-pixel>
     [not found] ` <20140105131300.GB4186@kernel.org>
     [not found]   ` <20140106204641.GB9037@kmo>
     [not found]     ` <52CB1783.4050205@kernel.dk>
     [not found]       ` <20140106214726.GD9037@kmo>
     [not found]         ` <20140209155006.GA16149@dhcp-26-207.brq.redhat.com>
     [not found]           ` <20140210103211.GA28396@infradead.org>
     [not found]             ` <52F8FDA7.7070809@kernel.dk>
     [not found]               ` <20140210224145.GB2362@kmo>
     [not found]                 ` <52F95B73.7030205@kernel.dk>
2014-02-11  9:12                   ` [patch 1/2]percpu_ida: fix a live lock Christoph Hellwig
2014-02-11 14:42                     ` James Bottomley
2014-02-11 14:53                       ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox