Performance issues in WWW servers
Abstract
This paper evaluates performance issues in WWW servers on UNIX-style platforms. While other work has focused on reducing the use of kernel primitives, we consider ways in which the operating system and the network protocol stack can improve support for high-performance WWW servers. We study techniques in 3 categories: new socket functions, per-byte optimizations, and per-connection optimizations. We examine two proposed socket functions, acceptex() and send_file(), comparing send_file()'s effectiveness with an mmap()/writev() combination. We show how send_file() provides the necessary semantic support to eliminate copies and checksums in the kernel, and quantify the utility of the function's header and close options. We also present mechanisms to reduce the number of packets exchanged in an HTTP transaction, both increasing server performance and reducing network utilization, without compromising interoperability. We evaluate these issues with a high-performance WWW server, using IBM AIX workstations connected over 100 mbps Ethernet, driven by the WebStone and SURGE WWW server workload generators. Microbenchmark results using WebStone show that our combination of mechanisms can improve server throughput by up to 53 percent, and can eliminate up to 33 percent of the packets in an HTTP exchange. Macrobenchmark results with SURGE show an aggregate increase in server throughput of 25 percent.