Scalability of Linux event-dispatch mechanisms
Abhishek Chandra, David Mosberger
Abstract
Many Internet servers these days have to handle not just heavy
request loads, but also increasingly face large numbers of
concurrent connections. In this paper, we discuss some of the
event-dispatch mechanisms used by Internet servers to handle the
network I/O generated by these request loads. We focus on the
mechanisms supported by the Linux kernel, and measure their
performance in terms of their dispatch overhead and dispatch
throughput. Our comparative studies show that POSIX.4 Real Time
signals (RT signals) are a highly efficient mechanism in terms of
the overhead and also provide good throughput compared to
mechanisms like select() and /dev/poll. We also look at some
limitations of RT signals and propose an enhancement to the default
RT signal implementation which we call signal-per-fd. This
enhancement has the advantage of significantly reducing the
complexity of a server implementation, increasing its robustness
under high load, and also potentially increasing its throughput. In
addition, our results also show that, contrary to conventional
wisdom, even a select() based server can provide high throughput,
even though it has high overhead, if its overhead is amortized by
performing more useful work per select() call.