Re: [PATCH 1/3] epoll: increase default max_user_instances to 1024

Davide Libenzi
2009-01-29T00:31:06Z

On Thu, 29 Jan 2009, Bron Gondwana wrote:

> On Wed, Jan 28, 2009 at 08:52:51AM -0800, Davide Libenzi wrote:
> > On Wed, 28 Jan 2009, Vegard Nossum wrote:
> >
> > > On Wed, Jan 28, 2009 at 6:32 AM, Bron Gondwana <brong@fastmail.fm> wrote:
> > > > That's clearly not happening here - so it seems that maybe our "happy
> > > > medium" is actually in closer inspection of what's going on rather than
> > > > a blanket low N to keep N^2 down.
> > >
> > > Mh, could another solution to this all be to limit the number times
> > > you can add a single epoll descriptor to another descriptor's set?
> >
> > In the example that was posted, a single fd was added a single time inside
> > the other 1000+ fds. Epoll already has detection for too long chains and
> > closed loops, but you can't put those in the fast path. And epoll_ctl() is
> > one of those.
>
> Not even if you're adding an epoll watcher inside another epoll watcher?

Adding an epoll fd inside another epoll fd is perfectly legal. It would
kinda suck if epoll itself wouldn't expose a pollable interface too.

> The problem I have here is that "a single fd was added a single time
> inside the other 1000+ fds" is different behaviour to the daemons out
> there. They're pretty much all using flat layouts:

Yes, that is not what programs normally do. Most of the times you have
nesting level equal zero, although we've seen recently that the
epoll-being-pollable feature (hence nesting) is used too. Say you have two
(or more) libraries, each own monitoring different things, and each own
with its own wait+dispatch loop. If these libraries didn't have a chance
to expose a pollable fd, you'd have to run their wait+dispatch loop in
seaprate threads. Whereas epoll being itself pollable allows you to:

epoll_wait(lib1_fd, lib2_fd)
if (ready(lib1_fd))
lib1_dispatch()
if (ready(lib2_fd))
lib2_dispatch()

This is pretty powerful, although needs care for wakeups and poll nested
calls.

- Davide