Date: Thu, 14 Oct 1999 00:44:50 +0200 (MET DST) From: Gerard Roudier <groudier@club-internet.fr> To: Randell Jesup <rjesup@wgate.com> Cc: "Justin T. Gibbs" <gibbs@caspian.plutotech.com>, scsi@FreeBSD.ORG Subject: Re: Driver for GDT6517RD RAID controller Message-ID: <Pine.LNX.3.95.991014000724.375A-100000@localhost> In-Reply-To: <ybuu2nvxn2f.fsf@jesup.eng.tvol.net.jesup.eng.tvol.net>
index | next in thread | previous in thread | raw e-mail
On 13 Oct 1999, Randell Jesup wrote: > "Justin T. Gibbs" <gibbs@caspian.plutotech.com> writes: [ ... ] > >If the accept occurs when all resources are consumed, sure, you know to return > >busy. But that need not be the case. It could be that you receive the command > >from the initiator, ship it off to your peripheral driver, and by the time it > >can respond, other peripheral drivers have queued work that will take all of > >your resources. > > Aha. That makes some more sense. > > > Since FreeBSD-CAM imposes a scheduling for resources, and > >the XPT knows the total number of resources you have, the peripheral driver > >you really want to have a resource doesn't happen to get it. The result is > >deadlock. To avoid this, the peripheral driver needs to understand that > >it should raise its response to the highest priority level so it is guaranteed > >to get a resource. > > I'll need to look at the FreeBSD-CAM/XPT. None of the driver > designs I've ever done have had any inherent limitations on the number of > active requests (other than physical memory). I wonder if the XPT (or SIM) > could reserve resources for target-mode driver responses... Part of the > problem is not understanding FreeBSD's XPT's resource-allocation code. I > think I really need to start looking at the code; perhaps this weekend. CAM requires SIM to accept any number of requests from peripheral drivers. There is no status SIM can return on internal resource shortage. For HBAs (or SIM design) that require a limited number of requests queued to the controller (or devices), the SIM has to maintain in memory a queue of not yet actually queued IOs. All the logical device IO queueing/freezing is to be performed by SIM. On this point, FreeBSD-CAM is _very_ different from CAM. Justin preferred to handle all queuing from memory in the XPT. SIMs indicates the maximum number of outstanding IOs they can handle to XPT. This allows SIMs not to have to handle queues in memory and allows peripheral drivers (and/or XPT) to implement some sophisticated scheduling any SIM will never want to provide. Such an approach has advantages and disadvantages. I have exchanged several mails with Justin about this topic. Being different from CAM does not mean being not as good as CAM (or worse in essence :) ). I noticed the differences, but donnot have any preferences. I just would have designed the sym_hipd driver differently if the logical device queue handling has had to be performed by SIM. Btw, FreeBSD-CAM looks quite fine to me. Gérard. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-scsi" in the body of the messagehome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.3.95.991014000724.375A-100000>
