etc/comp_channel: add completion channel abstraction for scalability
authorshefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 11 Mar 2009 21:39:31 +0000 (21:39 +0000)
committershefty <shefty@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Wed, 11 Mar 2009 21:39:31 +0000 (21:39 +0000)
commit5dc9ae1966ea88cf95e85fcae6ba957412d793f6
treed3496ef61cf0491c2a0fa54b8a0749285a30f993
parentb15826f8755d0b3a19b77cdfad89a6a9a865903c
etc/comp_channel: add completion channel abstraction for scalability

Add a new abstraction, the completion channel, capable of de-multiplexing
overlapped completion events among multiple queues.

The completion abstraction consists of 3 main components:

COMP_MANAGER
Maps to an IOCP.  The completion manager tracks all completions on any
of its associated channels.  This allows a user to 'poll' the completion
manager to receive notification when a completion event occurs on any
of the channels, similar to polling a set of fd's.

COMP_CHANNEL
Maps to a queue of completed requests.  A user can 'poll' a single channel
for completions if they are only interest in processing events on that
channel.  Internally, polling on a channel will poll the manager for
completions, but only process those associated with the specified channel.

COMP_EVENT
Maps to an overlapped structure.  Operations needing a completion event
reference this structure.  When the event occurs, it is queued to the
correct channel.

The implementation assumes that only one or a very small number of threads
will ever be trying to process events at any one time.  (Based on existing
applications, this is true.)  The abstraction itself is threadless.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2024 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86
etc/user/comp_channel.cpp [new file with mode: 0644]
inc/user/comp_channel.h [new file with mode: 0644]