* 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