[comp.unix.wizards] Berkeley FFS and SCSI

phil@amdcad.AMD.COM (Phil Ngai) (05/21/87)

I was wondering how the Berkeley fast filesystem, with its knowledge
of cylinder groups etc interacted with SCSI disks, where blocks are
logical numbers and (often) no information is available on track and
cylinder sizes and the like. 

-- 
Phil Ngai, {ucbvax,decwrl,allegra}!amdcad!phil or amdcad!phil@decwrl.dec.com

mats@forbrk.UUCP (05/23/87)

In article <16753@amdcad.AMD.COM> phil@amdcad.AMD.COM (Phil Ngai) writes:
>
>I was wondering how the Berkeley fast filesystem, with its knowledge
>of cylinder groups etc interacted with SCSI disks, where blocks are
>logical numbers and (often) no information is available on track and
>cylinder sizes and the like. 

SCSI is a very interesting beast. The following comments are very much my 
own opinion; as a company we are quite firmly committed to SCSI.

SCSI is an essentially low-performance peripheral interface. Its' main
advantage is ease of integration of new peripherals. This is not to be
denigrated as an advantage - for example, we got in a brand-new 125MB
embedded SCSI tape streamer from Archive, and all it took me to get it 
running was to unteach the driver some non-standard tricks it had been 
taught to talk to an Adaptec SCSI-to-QIC02 converter (really only one trick).
Took me the time to connect the cables to get it working tolerably
well, and a couple of hours with the driver to get it working really well.
And some customers of ours who knew essentially nothing about UNIX drivers
got a SCSI optical disk running pretty quickly (once we taught our
controller firmware to accept Group 1 commands - the original designer
had neglected that). Most other stuff (disk drives) have been "just
plug it in".

You pay for this, however. First of all, it is considered a benefit that
the drive takes a block number and goes to the right place without your
having to decompose it into a track-head-sector triple. But if you think 
about it, you have just farmed out the work that your neato 16 or 25 or 
whatever MHz processor could have done, probably with hardware arithmetic, 
to a small dedicated processor on the drive which has nowhere near the 
arithmetic capabilities. Interesting tradeoff, eh?

My biggest problem with SCSI is that you are too far removed from the disk. 
I would *like* my disk controller to buffer lots of data, and preferably 
to keep reading stuff and storing it away while there are no other requests 
pending (non-intrusive readahead). Most good SMD controllers, for example,
do something like this these days. To buffer data on SCSI, however, I have 
to ask the drive to send back more than just the one block I wanted, and 
this means that if another request comes in quickly, there will be a delay
while I bring in this big chunk of data (intrusive readahead). Quantum does 
make a drive which has a cache on its controller, but it suffers from pretty
much the same problem - you program it how much to read ahead, and it won't 
accept the next command until it has finished (our tests indicated that the 
cache on the Quantum could be tuned to give significantly better performance 
on some applications; but always at the cost of poorer performance on others. 
Tuning such a drive would need to be done on a per-site basis, perhaps 
dynamically, based on statistics kept on usage profile - yuck!).

My opinion is that requirements for high-performance disk subsystems are
best met throught some other arrangement, and should not be sharing a
controller (and 8-bit data bus, which the SCSI is!!!) with other devices;
and that the ideal use for SCSI in systems with such requirements is to
improve connectivity and configurability, and to provide a vehicle to 
interfacing to medium-performance peripherals such as optical disks, 
laser printers (when they get around to adding that to the spec), etc. 

To address the original question, however, there should be no particular
problem with the Fast File System on a SCSI drive. The information as to 
tracks-heads-sectors can usually be obtained from the drive itself; if not 
you can always read the manual. Most drives will hopefully adhere to this 
by hiding media flaws in the formatting rather than slipping them (a fictitious
example: block 100 will always map to the track-head-sector triple 0-4-0, 
and not be mapped to the triple 0-4-1 if there was a bad block on block 74,
causing every subsequent block to move up by one).  In general, the newer, 
embedded SCSI drives are doing this, while the "pseudo-SCSI" implementations -
ST-506 drive plus a converter board - don't.  Anyway, once you have the 
information, you can build your cylinder groups when you do your mkfs, and 
after that, everything should run just fine.  You just have to defeat the 
hiding of the drive characteristics that one time.

Mats Wichmann			hplabs!fortune!forbrk!mats
				ucbvax!{dual,mtxinu}!forbrk!mats

martyl@rocksvax.UUCP (Marty Leisner) (06/01/87)

In article <324@forbrk.UUCP> mats@forbrk.UUCP (Mats Wichmann) writes:
>SCSI is an essentially low-performance peripheral interface. Its' main
>advantage is ease of integration of new peripherals. 

I was under the impression SCSI could transfer data at several megabytes/
second (1.5-4? depending on whether it is asynchronous or synchronous?)  
This sounds pretty high performance to me.  What CPU can eat data that
fast?

>My biggest problem with SCSI is that you are too far removed from the disk. 
>I would *like* my disk controller to buffer lots of data, and preferably 
>to keep reading stuff and storing it away while there are no other requests 
>pending (non-intrusive readahead). 

Is this a problem with the interface or the boards being built for it?


If caching is done on both ends (host adapter and disk controller) and with
a low performance microprocessor on each end, it looks like impressive
performance could be achieved.  Whenever a read request is made to disk,
the process needing the data has to hang on the disk access anyway -- once
the request is initiated, the host cpu shouldn't be bothered with the 
pending request until it receives acknowledgement the operation is complete.
From a device driver point of view, I like to pass linear sector numbers to
the controller and let the controller figure out the head/track/sector.  

Also, SCSI appears to have the capability to do interesting things with multiple hosts sharing multiple disks (I'm thinking of buying a SCSI disk for my PC AT
at work).  

marty leisner
xerox corp
leisner.henr@xerox.com
martyl@rocksvax.uucp

mats@forbrk.UUCP (06/15/87)

In article <1142@rocksvax.UUCP> martyl@rocksvax.UUCP (Marty Leisner) writes:
>In article <324@forbrk.UUCP> mats@forbrk.UUCP (Mats Wichmann) writes:
>>SCSI is an essentially low-performance peripheral interface. Its' main
>>advantage is ease of integration of new peripherals. 
>
>I was under the impression SCSI could transfer data at several megabytes/
>second (1.5-4? depending on whether it is asynchronous or synchronous?)  
>This sounds pretty high performance to me.  What CPU can eat data that
>fast?
Peak burst transfer rates can indeed be in the 3-4 MB range, if you use
the synchronous option which I haven't seen implemented yet. Disk type
devices have all been in the 5 to 10 megabit transfer rate range. Really
not a problem with the spec per se, but with the fact that the spec was 
introduced so as to encourage the use of existing technology - ST506-type
disk drives. This was a necessity for accepance, but....

>>My biggest problem with SCSI is that you are too far removed from the disk. 
>>I would *like* my disk controller to buffer lots of data, and preferably 
>>to keep reading stuff and storing it away while there are no other requests 
>>pending (non-intrusive readahead). 
>
>Is this a problem with the interface or the boards being built for it?
>
It is, of course, a problem with the boards being built - but sort of with
the interface itself. Let me explain what I mean: a lot of performance
can be gained by doing a real bang-up job on the controller which is on
the drive's end of the SCSI. This puts the job of building a high-performance
controller with people who have not done it before (and who may perhaps
not have much interest in it): the drive manufacturers, and away from
companies who have made a living from disk controllers - people like
Emulex, Xylogics, and even Dual (whom I used to work for). This is not
necessarily a "good thing".

>If caching is done on both ends (host adapter and disk controller) and with
>a low performance microprocessor on each end, it looks like impressive
>performance could be achieved.  Whenever a read request is made to disk,
>the process needing the data has to hang on the disk access anyway -- once
>the request is initiated, the host cpu shouldn't be bothered with the 
>pending request until it receives acknowledgement the operation is complete.
>From a device driver point of view, I like to pass linear sector numbers to
>the controller and let the controller figure out the head/track/sector.  
>
I really don't argue with this reasoning, although someone needs to convince
the drive mfgs. to put intelligent caching on their drives, which is something
that will be driven by demand. As Fortune, we are not in any position to
make these demands; and everytime we say something to CDC or Micropolis, 
they tell us nobody else has ever asked for that, so the demand must not
be out there yet - maybe never will be. The type of intelligence I am
looking for, is filling of buffers while nothing else is going on - i.e., 
soaking up dead time, waiting for the heads to get to the right sector, etc. 
The kind SCSI mfgs. are doing now causes the original request to often
take longer to be satisfied.

>Also, SCSI appears to have the capability to do interesting things with 
>multiple hosts sharing multiple disks (I'm thinking of buying a SCSI disk 
>for my PC AT at work).  
>
It does that, although from reading (not from actually implementing) it
appears that the "reserve" functions are not especially useful, which
means that there will be some logistical problems with sharing disks -
I wouldn't feel comfortable sharing anything that wasn't effectively
"read-only".

In all, Marty made me think of things in a slightly new light. I am still
not really too thrilled about SCSI, but it is a little hard to justify,
in an absolute sense, my views that SCSI is inherently low-performance.
Instead, I now feel that the implementation approach, which makes many
of the high-performance features optional, along with the way the standard
has been introduced, while not in and of themselves bad things, doom
SCSI to *effectively* be low performance in most cases.

Mats