Scalability of Linux event-dispatch mechanisms

Abhishek Chandra, David Mosberger

Research output: Chapter in Book/Report/Conference proceedingConference contribution

19 Scopus citations


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.

Original languageEnglish (US)
Title of host publicationProceedings of the 2001 USENIX Annual Technical Conference
PublisherUSENIX Association
ISBN (Electronic)188044609X, 9781880446096
StatePublished - Jan 1 2001
Event2001 USENIX Annual Technical Conference - Boston, United States
Duration: Jun 25 2001Jun 30 2001

Publication series

NameProceedings of the 2001 USENIX Annual Technical Conference


Conference2001 USENIX Annual Technical Conference
Country/TerritoryUnited States


Dive into the research topics of 'Scalability of Linux event-dispatch mechanisms'. Together they form a unique fingerprint.

Cite this