httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
Subject OSDI paper - IO-Lite: A Unified I/O Buffering and Caching System
Date Wed, 03 Mar 1999 16:11:08 GMT

To give a very quick overview of this paper it is an I/O model
based on what I might call the "I will never copy data" design
pattern.  This is analagous to the sweet spot that Dean likes to
point out where with perfect hardware, a perfect OS and carefully
crafted code when you mmap the file and send it the bytes can
avoid ever even entering the CPU or it's backside cache.

They manage data in buffers that are lists of pairs
<pointer,length> and sets of buffers reside in memory spaces with
compatible ACL (access control list) settings.  Care is taken to
get the data to flow from file system caches to I/O devices never
never never ever coping the data.  Reference counts get involved
to allow caching to work.  They are very fastidious that the
buffers are write once, but I could not see how they manage the
interaction with paging to enforce that and if they do how that
actually works out in practice.

For example if you used this with Apache and three dozen backend
modules the back end modules would write into buffers their HTTP
responses and then pass those off to Apache in shared memory that
presumably Apache would have only read only access to.  That
doesn't look practical given the finite number of memory mapping
registers most machines have.  Everybody knows that if you own
the paging registers you rule the world.

I found thought provoking the term "early multiplexing" i.e. if
you are to never copy the data you have to be sure that the
incomming packets fall directly into the buffer space with the
approprate ACL to cover all the down stream usage.

This is identical to the problem Apache has with wanting to get
the incomming request into the process space and threading model
of the module or back end process that actually is going to deal
with it.

 - ben

View raw message