Re: [PATCH] SCSI sym53c8xx_2: bigger transfer limits

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

 



On Thu, Mar 02 2006, Kai Makisara wrote:
> On Wed, 1 Mar 2006, Jens Axboe wrote:
> 
> > On Wed, Mar 01 2006, Kai Makisara wrote:
> > > On Wed, 1 Mar 2006, Jens Axboe wrote:
> > > 
> > > > On Tue, Feb 28 2006, Kai Makisara wrote:
> > > > > This patch enables clustering and sets max_sectors to 0xffff to enable 
> > > > > reading and writing of large blocks with tapes (and large transfers with 
> > > > > sg). This change is needed after the sg and st drivers started using 
> > > > > chained bios through scsi_request_async() in 2.6.16.
> > > > > 
> > > > > Signed-off-by: Kai Makisara <kai.makisara@xxxxxxxxxxx>
> > > > > 
> > > > > --- linux-2.6.16-rc5/drivers/scsi/sym53c8xx_2/sym_glue.c	2006-02-04 13:25:48.000000000 +0200
> > > > > +++ linux-2.6.16-rc5-k1/drivers/scsi/sym53c8xx_2/sym_glue.c	2006-02-18 09:45:24.000000000 +0200
> > > > > @@ -1978,7 +1978,8 @@ static struct scsi_host_template sym2_te
> > > > >  	.eh_bus_reset_handler	= sym53c8xx_eh_bus_reset_handler,
> > > > >  	.eh_host_reset_handler	= sym53c8xx_eh_host_reset_handler,
> > > > >  	.this_id		= 7,
> > > > > -	.use_clustering		= DISABLE_CLUSTERING,
> > > > > +	.use_clustering		= ENABLE_CLUSTERING,
> > > > > +	.max_sectors		= 0xFFFF,
> > > > 
> > > > Strictly speaking, the clustering bit is unrelated.
> > > 
> > > It is related. The number of scatter/gather segments in the SCSI HBAs is 
> > > limited. In order to fit the large requests into these limits, the 
> > > adjacent pages (that have been split to bios) have to be recombined.
> > 
> > As James also described, you cannot rely on clustering at all to get you
> > bigger requests. I'm thinking you are perhaps misunderstanding what that
> > option does - it only potentially limits the number of sg segments in a
> > request, if the pages happen to be physically contig. So it'll only help
> > you to a certain degree, IFF the pages are indeed adjacent in memory.
> > It's an extra optimization that isn't deterministic at all.
> > 
> The computer is deterministic. In this case we know what pages are
> physically contiguous because they have been allocated in kernel space
> with alloc_pages(). The st driver has made sure that the buffer can be
> described with the scatter/gather list supported by the SCSI HBA.
> 
> In general, you should not rely on coalescing. Here I agree with you.
> If you know what the buffer structure is, then you may be able to rely
> on coalescing.

Yes your case is special, since you are the producer of the pages and
thus can control them.

> > And it definitely is unrelated to how many sectors you can support. As
> > such, these two unrelated patches should submitted seperately. The
> > clustering bit is potentially more dangerous, as the hardware can have
> > all sorts of 'issues' related to the size and alignment of sg segments.
> > 
> They are related if in the sense that both are needed in order to support 
> large requests. However, I don't mind if someone splits those changes into 
> two patches if both go in. Otherwise I don't recommend sym53c8xx_2 and/or 
> sym53c8xx chips for any serious work any more.

For debug and bisect reasons alone I think it should be two patches. The
cluster change cannot go into 2.6.16, it's way too late for that (I
would not personally be against the max_sectors changes...).

> > > >                                                     I seem to recall
> > > > Gerard years ago talking about some sym chips that did not like
> > > > clustering, hence it was disabled.
> > > > 
> > > Facts?
> > 
> > I'm just reporting what Gerald (who definitely knows this hardware very
> > well) told me, when I submitted a patch to him enabling clustering a
> > long time ago. This might have been about 5 years ago, I seem to recall
> > it happening when I used a un ultra10 workstation which had a sym scsi
> > board.
> > 
> A bit vague but I guess this is all we know. Unless Matthew knows more?

So I dig out the old mail from Gerard from April 2000, it's pasted
below.

--------------

Hi Jens,

On Sun, 23 Apr 2000, Jens Axboe wrote:

> Hi Gerard,
> 
> I've been using my onboard adaptec 7890, but since it does not want to
> do TCQ for me, I switched adapters and I'm now using your driver. Now
> I'm wondering, what is the reason that you disable clustering in the
> host template??

This had been numerous historical reasons for that. :)
(Note that the 53c7,8xx driver also disables clustering and clustering 
does guarantee larger IO to be always possible given a max number of SG
entries).

The initial reasons were the following:

1) The ncr drivers uses a simple array of MOVE scripts instructions and
   clustering the data to decrease the number of SG entries didn't 
   significantly increase performances.
2) Instead, th ncr/ncr53c8xx driver tried to use 512 byte sized SG
   entries if possible with a JUMP between each MOVE in order to avoid 
   phase mismatch interrupts.

The 53c7,8xx uses the same trick, but just leave the SG sizes unchanged
(was 1K with 1K block FS).

I have removed this complexity from the sym53c8xx driver (it seemed to
me rather a loss than a win), for numerous reasons, notably:

1) The handling of unaligned transfer (notbaly WSR bit) for Wide transfer
   would have still complexified the SCRIPTS.
2) Starting with the 896, phase mismatches are handled from SCRIPTS and 
   the additionnal JUMP between each MOVE was a penalty.
3) The trick was only interesting for small IOs but clever disk firmwares 
   mostly disconnect just after the COMMAND phase for small IOs, making  
   the MOVE+JUMP trick just useless complexity.

On paper, there is no reason to not cluster SG entries with the sym53c8xx
driver, but since it should not increase significantly performances nor
guarantee larger IO to be always possible, my opinion is that there is no
strong reason to enabled clustering by default and for Ultra <= 2. (For 4K
FS / 80 MB/s, I am sure there is no significant performance impact if
clustering is not enabled.

The other reason that let me hesitate to enable clustering by default, for
the moment, is that the size of a scatter entry must be limited to 16 MB.
The size is not a problem, but I would prefer to _also_ guarantee that a
scatter entry will not cross a 24 bit boundary given the chip core
performing 24 bit calculation. By experience, I avoid everything that may
trigger chip bugs and such a crossing smelt so to me. Btw, the 896 rev. 1
has such a bug documented.

Btw, in my opinion, a _usable_ clustering scheme must allow to specify:

1) A maximum length for scatter entries.
2) A bus physical boundary address to not cross within all 
   scatter entries.

AFAIR, the Linux approach for clustering does not allow that.

However, as you can see in the sym53c8xx source, there is some provision
that catches the 16MB boundary problem of the 896 rev. 1, but this hasn't
been ever triggerred. If, on the other hand, your controller isn' a 896
rev. 1, clustering should normally not make problems (based on currently 
documented chip erratas).

Speaking about current `sym' drivers for both Linux and FreeBSD. The use
of the kernel Bus Dma abstraction in both O/Ses does not prevent the Dma 
interface from performing SG clustering. :-)

The clustering of SGs is, in fact, actually in use with the FreeBSD
-current sym_hipd driver (which is similar to sym53c8xx in design) since a
couple of weeks, with some provision for the 896 rev. 1 errata. Such a
provision for 896 rev.1 also exists under Linux, obviously. No problem has
been reported, as expected. :-)

As you can see, the use of clustering is currently under experimentation,
somewhere. In fact, for Ultra-160, the clustering of SGs may have
mesurable good effects on performances, IMO, and I actually want it to be
used.

Regards,
   Gérard.

----------------------


-- 
Jens Axboe

-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[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