Re: [patch 00/13] Syslets, "Threadlets", generic AIO support, v3

Evgeniy Polyakov
2007-03-01T12:12:49Z

On Thu, Mar 01, 2007 at 12:47:35PM +0100, Ingo Molnar (mingo@elte.hu) wrote:
>
> * Ingo Molnar <mingo@elte.hu> wrote:
>
> > > I also changed client socket to nonblocking mode with the same result
> > > in epoll server. If you will find it broken, please send me corrected
> > > to test too.
> >
> > this line in evserver_kevent.c looks a bit fishy:
>
> this one in evserver_kevent.c looks problematic too:
>
> shutdown(s, SHUT_RDWR);
> close(s);
>
> as evserver_epoll.c only does:
>
> close(s);
>
> again, there might be TCP control flow differences due to this. [ Or the
> removal of this shutdown() call might be a small speedup for the kevent
> case ;) ]

:)

> Also, the order of fd and socket close() is different in the two cases.
> It shouldnt make any difference - but that too just makes the results
> harder to trust. Would it be so hard to introduce a single
> handle_web_request() function that is exactly the same in the two tests?
> All the queueing details (which are of course different in the epoll and
> the kevent case) should be in the client function, which calls
> handle_web_request().

I've removed shutdown - things are the same.

Sometimes kevent performance drops to lower numbers and its graph of
times needed to handle events has high platoes (with and without
shutdown - it was always), like this:

Percentage of the requests served within a certain time (ms)
50% 128
66% 486
75% 505
80% 507
90% 732
95% 3087 // something is wrong at this point
98% 9058
99% 9072
100% 15562 (longest request)

it is possible that threre are some other bugs in the server though,
which prevent sockets from being quicly closed and thus its processing
time increases - I do not know for sure the root of that event.

I separated epoll and kevent servers, since originally kevent server
included additional kevent features, but then new ones were added
and I moved slowly to the similar to epoll case.

Current version of the server was a pre-test one for lighttpd patches,
so essentially it should be like epoll except minor details.

> Ingo

--
Evgeniy Polyakov