httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Saju Pillai" <saju.pil...@gmail.com>
Subject Re: event_mpm and poll()
Date Thu, 02 Mar 2006 07:20:28 GMT
On 02/03/06, Paul Querna <chip@force-elite.com> wrote:
>
> Saju Pillai wrote:
> >
> >
> > On 02/03/06, *Greg Ames* <gregames@apache.org
> > <mailto:gregames@apache.org>> wrote:
> >
> >     Paul Querna wrote:
> >
> >      >>  The event mpm expects the apr_pollset backends to be based on
> >     epoll()
> >      >> / kqueue() or Solaris 10 event ports. What are the reasons
> >     because of
> >      >> which poll() is not considered to be suitable for the event mpm
> ?
> >      >>
> >      >> Is this because of the large number of fd's to be polled and
> linear
> >      >> scalability that epoll() / kqueue() provides but poll() doesn't
> ? Is
> >      >> there any reason why a poll() based implemenation of event_mpm
> >     cannot
> >      >> be done if some performance degradation is ok ?
> >      >
> >      >
> >      > Performance is actually not the core reason.
> >      >
> >      > The core reason is the thread-safety of the pollset.
> >      >
> >      > Poll() does not allow a 'main thread' that is polling to get new
> >     sockets
> >      > added to it, without first waking it up.
> >      >
> >      > KQueue/EPoll both allow a second thread to insert pollfds into
> the
> >      > pollset, while a main thread is still polling.  This
> significantly
> >      > reduces the complexity, and allows for better performance,
> >     because we
> >      > don't require a Context-Switch to add a client to the main
> pollset.
> >
> >     Bill Stoddard and I originally used poll().  but there was a problem
> >     getting the event
> >     thread to notice a new descriptor and add it to the pollset in a
> >     timely manner.  I added
> >     some Rube Goldberg stuff to solve that, involving a pipe and extra
> >     context switching as
> >     Paul mentioned.  that was good enough for a proof of concept and
> >     shaking out other issues.
> >
> >
> > Cool.
> >
> > Where can I see this code ? I looked through trunk & 2.2.x branches from
> > the web but the oldest event.c uses epoll()/kqueue().
> >
> > I was looking to see if I could hack up a async worker like mpm using
> > poll() on 2.0. A look at your code will help a lot :)
>
> I don't want to be too discouraging, but why only using poll(), and why
> only with 2.0?


This is part of a product that I am working on. Not all the platforms we run
on have epoll() or kqueue(), so.....

-srp


They both seem like steps backwards :)
>
> -Paul
>
>
>

Mime
View raw message