Subject: Re: VS3100 SCSI
To: NetBSD/vax Mailing List <port-vax@netbsd.org>
From: Brian Chase <bdc@world.std.com>
List: port-vax
Date: 05/29/2001 17:22:52
On Tue, 29 May 2001, J. Buck Caldwell wrote:

> VS3100 SCSI controllers can only be ID 6 or 7? How damned shortsighted
> of them. Well, poop.  Either way, there's still the question of
> whether or not they can act in 'target' mode - which determines
> whether or not one SCSI controller can send a messages to another.

Yeah, that I don't know about.  Even if they can't operate in target mode
it might be possible to work around this using a chunk of raw disk.  With
normal applications you run into problems having multiple systems
accessing a single disk in read-write mode.  But if you were to allocate a
reasonable sized chunk of disk (maybe 64KB or 128KB) and then split it in
half, you might be able to do something like the following:

  .-----------------------.
  |   VAX1 SCSI-B ID #7   |
  `-----------------------'
    Read-only  Write-only
        ^         |
 0KB    |         v     64KB
   +---------+---------+
   |  32 KB  |  32 KB  |  (Disk chunk -- let the shared disk be ID #2)
   +---------+---------+
        ^         |
        |         v
   Write-only  Read-Only
  .-----------------------.
  |   VAX2 SCSI-A ID #6   |
  `-----------------------'


This keeps VAX1 and VAX2 from stomping on eachothers data by giving them
distinct areas on the shared disk to which they can write.  The parts I
haven't thought about enough are how you synchronize the communications
between VAX1 and VAX2.  Say VAX1 writes a block into its 32KB write area,
how does VAX2 know that the blcok is ready to be reade without polling?
Then the other question would be, once VAX2 has read this block, how does
it notify VAX1 that the block is read so that VAX1 can write the next
block?

I think the second can be solved by adding some sort of flag block on the
disk which can be updated by the reading host once the block has been
read.  The interrupt notification thing though... the only thing I can
think of without knowing more about SCSI is to send it through the
ethernet network to the other host, but that's messy.  I suppose you could
use something like a SCSI bus reset command to indicate "something needs
to be checked" and then the two VAXen on the shared bus each look to see
if they have any work to do.  I imagine this would hurt performance.

In order to get better throughput, a large portion of disk could be split
up into disk based queues of the above data chunks.

-brian.