The Internet provides a computing scenario where clients communicate with Web servers through mutually independent connections. If Internet server application processing and the associated protocol processing of a connection (flow) are done exclusively on a single central processing unit (CPU) core, minimal data sharing and synchronization between flows is expected. The computation ability of future servers will depend on increasing the number of cores. This interesting paper “identifies the major bottlenecks to scalability for a reference server workload on a commercial server platform.”
To test their hypothesis, the authors “set up [a] test server running a well-tuned Apache HTTP server and [the] Linux operating system. The server had eight cores with pairs of cores sharing L2 cache.” The experiments show that the test server, running a modified SPECweb2005 Support workload, achieved only a 4.8 times speedup in throughput, compared to the ideal eight times--official SPECweb2005 results show similar scaling problems.
This work provides “insights on the key causes of poor scalability of a Web server,” and also provides “the analysis methodology leading to these insights.” This latter feature makes the paper more interesting than the findings themselves, since the main bottleneck of the multicore server is the bus, and the snoopy protocol for sharing it. The authors determined that the main cause of poor scaling is the capacity of the bus. They confirmed that the address bus reached 77 percent utilization on eight cores, which is considered fully saturated.
Other results showed that the number of cache misses remained nearly constant per byte as the number of cores increased, and that shared cache between cores on the same bus had little effect on performance. However, profiling revealed some scalability obstacles in software. “Increasing hash table capacities and reducing dependence on linked lists,” as workload increases, should fix these scalability problems. “In the kernel, flow-level parallelism broke down in the file-system directory cache,” which was widely shared. The authors propose that “a possible workaround would be to maintain alternate directory trees for each core.”
In conclusion, the remaining problem in scaling performance with the number of cores is address bus capacity. As stated, “directories (and directory caches) can be used to replace snoopy cache coherence,” with paying the price of additional cost and latency. Further studies should be addressed to verify this last hypothesis for real workloads