Srihari
Radhakrishnan,
Master’s
candidate
David
R.
Cheriton
School
of
Computer
Science
With the advent of commodity large-scale multi-core computers, the performance of software running on these computers has become a challenge to researchers and enterprise developers. While academic research and industrial products have moved in the direction of writing scalable and highly available services using distributed computing, single machine performance remains an active domain, one which is far from saturated.
This thesis selects an archetypal software example and workload in this domain, and examines software characteristics affecting performance. The example is highly-parallel web-servers processing a static workload. This work extends prior work comparing web-server architectures — threaded (Apache, Go and μKnot), event-driven (Nginx, μServer) and staged (WatPipe) — compared with two static workloads in two different domains. The two workloads are a Zipf distribution of file sizes representing a user session pulling an assortment of many small and a few large files, and a 50KB file representing chunked streaming of a large audio or video file. Significant effort is made to fairly compare eight web-servers by carefully tuning each via their adjustment parameters. Tuning plays a significant role in workload-specific performance. The two domains are no disk I/O (in-memory file set) and medium disk I/O. The domains are created by lowering the amount of RAM available to the web-server from 4GB to 2GB, forcing files to be evicted from the file-system cache. Both domains are also restricted to 4 CPUs.
While many research experiments and industrial systems are highly over-provisioned with respect to hardware, testing in these environments can mask architectural and implementation differences among web servers. Restricting resources stresses a web server, bringing out important performance characteristics and properties. Experimental results for the given workload show that memory pressure is one of the most significant factors for the degradation of web-server performance, because it forces both the onset and amount of disk I/O. With an ever-increasing need to support more content at faster rates, a web-server relies heavily on in-memory caching of files and related content. In fact, personal and small business web-servers are run on tiny computers, like the Raspberry Pi, with only 1GB of RAM and a small SD card for the file system.
Therefore, understanding behaviour and performance in restricted contexts should be a normal aspect of testing a web server (and other software systems).