John R. Jackson on Mon 27/01 21:37 -0500:
> Correct.  To do parallelism at user level would require something like
> a shared memory buffer and forked processes (ala the two halves of
> taper), or asynchronous I/O calls or threads, all of which use various
> levels of OS specific capabilities (and stability).

What about just using the POSIX.1b AIO interface? Is looks reasonably
portable.  Failing that, using a shared mmap segment between one fork
per tape might work.  It could just be surrounded by the appropriate
ifdefs for the OS facility.

Which interface is preferred? I think just construction a single
lio_listio() with an IO for each tape device participating in the
stripe, then utilizing a MODE of LIO_WAIT to block until done, all in a
single execution thread, could be simple to implement, no need for
semaphores, locking etc, and if each drive is the same speed it would
operate reasonably parallel.  What do you think?

I was thinking of putting this case if the special characters `[' and
`]' are found in the RAIT string, so we could have devices like this:

        tapedev = "rait:/dev/rmt/{0,1,2,3[5]}n"

would mean to set a RAIT5 volume up on the named devices, and it would
just execute the old code if the brackets weren't present within the
braces.

Reply via email to