Re: Reconsidering libevent

Steven Dake <[email protected]> Tue, 21 Sep 2010 14:06:12 -0700
Newsgroups org.kernel.vger.hail-devel
Message-ID <[email protected]>
On 09/21/2010 01:51 PM, Jeff Garzik wrote:
> Today's Project Hail hacking involves moving tcp_write_* code from
> itd.git to libhail.  tcp_write_* is the well-debugged TCP async write
> queueing code from tabled, with cosmetic changes to provide a nice API
> encapsulation.  I did this when moving the code originally from tabled
> ->  itd.  By moving this code into libhail, with (yet more) cosmetic
> changes, the same TCP write queueing code may be used in both tabled
> and itd pkgs.  chunkd'd async TCP write code is highly similar, and
> can be merged into libhail as well.
>
> (if you're curious why I'm doing this, it's one step in the road to
> updating itd to use chunkd's GET_PART)
>
> An interesting side effect:  both tabled and itd use libevent, which
> means that libhail must now link with libevent.  Is this a bad thing?
> Recently libevent was purged from cld (a simple use case, where poll
> sufficed) and chunkd (obscure concerns about multi-threading), but
> linking libevent into libhail is causing me to rethink the matter.
>
> My concerns about chunkd, libevent and M-T centered around libevent's
> use of a single, mutex-unprotected event_base into which events are
> queued etc.  In one particular thread model, the set of listened-to
> events might be manipulated from multiple threads concurrently,
> thereby implying a commitment to libevent implies a commitment to
> libevent wrappers which add locks.
>
> However, it turns out that thread model is quite suboptimal compared
> to other methods.  Assigning an incoming TCP connection to a thread,
> and having that thread manage that connection for its entire lifetime,
> is both much more efficient and quite compatible with libevent's API.
> One merely assigns an event_base to each thread.  In Apache-land, this
> is called the "prefork" model (yes, I know, fork != thread; I didn't
> invent the terminology)
>
> So, I am reluctantly considering moving chunkd back to libevent.  That
> will enable chunkd, tabled and itd to all share the same async TCP
> write code, and as a nice side effect, reduce our minor reinvention of
> libevent (c.f. libtimer and some of the network poll code).
>
> Comments welcome, as always.
>
>        Jeff
> --
> To unsubscribe from this list: send the line "unsubscribe hail-devel" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

libevent version 2 has proper mutual exclusion, but the code needs some 
work.

regards
-steve