Quite nice.
We used similar optimizations with similar results in a project sometime
ago (see: http://gsd.di.uminho.pt/~jop/docs/extabs.ps.gz), where we
developed a similar IPC primitive, albeit without the a nice general
purpose API like "doors".
However, after implementing virtual copy, we found out that most of
the round-trip overhead for small messages was attributable to
the scheduler, so we arranged that when sending a request, the
remaining timeslice of the client was explicitly provided to the
server, avoiding the cost of selecting the process to schedule.
(This was done in a function called sleep_on_and_wakeup, with two
wait_queues as parameters.) This wass possible because the client
would forcibly block waiting for the answer after sending the
request, which I believe also happens with doors.
Have you considered something like this? I don't have the figures
here, but I remember that it was a big win. It also was a long time
ago (Linux 1.1), so I don't know if the same would happen now...
-- Jose Orlando Pereira * mailto:jop@di.uminho.pt * http://gsd.di.uminho.pt/~jop *- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu