This paper analyzes several user-mode Web servers taking advantage of the performance enhancements described above. These user-mode Web servers rely heavily on the operating system to provide the primitives necessary to reduce data movement, limit event notification overhead, and minimize the communication code path. One approach is to optimize existing interfaces and their implementations. For example, implementations of select() and poll() have been improved by [13,14] to reduce event notification overhead.
Another approach is to define completely new interfaces, building Web servers around these new interfaces. For example, new user-mode interfaces to eliminate memory copies and mitigate checksum computation include IO-Lite [15] and Windows NT's TransmitFile() API. IO-Lite provides a generic interface and mechanism to unify data management among operating system subsystems and user-mode servers. TransmitFile() provides the same performance effect in avoiding data copies, but is limited to sending files with prefix or suffix data from the file system cache. AIX implements a similar zero copy API called sendfile(). Linux provides a sendfile() API, but the implementation requires a data copy to move the data from the file system to the network stack. This paper analyzes the performance of IIS and Zeus, two production Web servers leveraging examples of these new APIs. Lastly, the paper describes an additional SPED user-mode Web server for Windows 2000 and Linux called Howl. Howl is described in more detail in Section 5.3.