These are the old pages from the weblog as they were published at Cornell. Visit for up-to-date entries.

June 29, 2004

The OS - Network Interface at Usenix'04

The last session today at Usenix'04 is my favorite: The network-application interface. There are 3 papers in this session.

  • Network Subsystems Reloaded: A High-Performance, Defensible Network Subsystem , Anshumal Sinha, Sandeep Sarat, and Jonathan S. Shapiro, Johns Hopkins University. The premise behind the work  is that most of the networking subsystem in an operating system is shared among all the processes it is very difficult to insulate the effects of for example a denial of service attack to just the process that experiencing it. They give a user-level implementation in the EROS operating system. Given that I have built a few of these in the past, I am realizing that it may be time for a sort of retrospective on what the real hard problems are in this space. Scalability is one: how to run hundreds of processes on your server, each with a user level protocol stack, and each high request for very fine granularity timers. From my experiences this turns out to be way harder that the initial implementation.
  • accept()able Strategies for Improving Web Server Performance ,Tim Brecht, David Pariag, and Louay Gammo, University of Waterloo, This work looks at how different web servers are built on Linux and how they use the accept system call with the event or thread strategies. They take 3 different "high-performance" accept strategies and apply them to three Linux Web Servers and investigate their performance. I don't care about the numbers that much, as there are other web servers that already do better. But I like the insights that you gain from the interaction between accept and thread/event strategy. After this paper and the presentation I still think that asynchronous IO interfaces in Linux are just plain broken.
  • Lazy Asynchronous I/O for Event-Driven Servers, Khaled Elmeleegy, Anupam Chanda, and Alan L. Cox, Rice University; Willy Zwaenepoel, EPFL, Lausanne,  This paper gives a solution for a-synchronous IO processing for single treaded applications under some unixes (FreeBSD in their case). The lazy part of their IO operations is related to the strategy where you do not use an asynchronous operation if the operation will not block. They appear to get reasonable performance when compared to posix aio or the amped approach used in the Flash web server (which was their test app).  Their code can be downloaded. I think the system has some elegant parts, but I am not at all sold on this pure single threaded approach. To find the right balance between programming complexity and exploiting all available system resources you need both threads and events.

This was interesting session, with lots of food for discussion.

Posted by Werner Vogels at June 29, 2004 05:29 PM