On Mon, 10 Jan 2000, Chris Sedore wrote:

> 
> 
> On Mon, 10 Jan 2000 [EMAIL PROTECTED] wrote:
> 
> [...]
> > > 1) Does this seem like a reasonable approach?  [It _works_, and well.  But
> > > it tastes strongly of hack.]
> > 
> > I'm not very fond of this approach to the problem, though it can work, as
> > you note.  Asynchronous I/O is in my opinion a much cleaner solution.
> > 
> > > 2) Does anyone have suggestions for a solution that will be cleaner and
> > > won't take man-months to implement?  [Which is the redeeming quality of
> > > what I've got - it took me two days to zero in on a very workable
> > > solution.]
> > 
> > Have you tried the linuxthreads port lately?  With linuxthreads, each
> > thread is an rfork()ed process, which means that blocking on file I/O only
> > blocks the thread that attempts the I/O.  There are various
> > advantages/disadvantages between libc_r and linuxthreads, but you may find
> > linuxthreads to meet your needs at the moment.
> > 
> > > 3) Is anyone working on something I might leverage off of in this area?
> > > [For instance, a select()-based interface to async I/O?  Or support for
> > > blocking disk I/O in select() and read()?]
> > 
> > Though not ideal, it seems to me that using asynchronous I/O will work
> > reasonably well inside libc_r.  If there weren't plans to build a much more
> > scalable threads library than what we currently have, this modification
> > would be high on my priority list.
> 
> I was just poking around a bit, and I don't think it would take too much
> to add an aio_select() call, that would do an async io select (that is,
> queue a select as just another aio operation).  I've cheated around this
> a bit, since you can get away (for instance) with executing an aio_read()
> against a listening socket, waiting for the completion (an error, since
> you can't read from such a thing), then doing the accept().  
> 
> It seems that a fair amount of benefit could be had from async select,
> since it would facilitate using aio in pthreads, innd, etc, which were
> originally designed for select(), but might like to add async io for disk
> operations.
> 
> Maybe it is just bloat in the long-run, since with kernel threads one
> could just fire off another thread to do select().  Or maybe someone will
> pipe up and say that select() won't work that way (i.e., just pass in the
> select parameters and let one of the aiod's call select() on behalf of
> the main process).

(yes, I'm following up on my own message)

I had some free time this weekend, so I wrote aio_select.  It basically
allows you to call select asynchronously, and pickup results the same way
you would for aio_read or aio_write.  It might be just the write kind of
solution for the problem(s) above.  The implementation is not what I'd
call ideal, mostly because I wanted to get on to aio_cancel.

I did finish a reasonable implementation of aio_cancel, which should fill
out FreeBSD aio routines to be reasonably POSIX compliant.  We're in
'feature freeze' for now, so I'm guessing that it will be a while before
aio_cancel gets checked in.  

-Chris



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to