Computer systems design is based on many commonly-held beliefs and heuristics, many of which have never been challenged:
- Thousands of server farm "load balancing" policies do exactly that: they aim to balance the load among the servers. But is load balancing necessarily a good thing?
- Consider a choice between a single machine with speed s, and n identical machines with speed s/n. Which would you choose? Are you always right?
- Scheduling policies which favor "short" jobs, like Shortest-Remaining-Processing-Time-First (SRPT) are often avoided because it is feared that they starve the "long" jobs. But does favoring "short" jobs necessarily hurt "long" ones?
- Cycle stealing between a "donor" machine and a "beneficiary" machine is a central theme in distributed systems. The donor machine helps the beneficiary machine with jobs, whenever the load at the donor machine is below some threshold. But why are we giving the donor machine all the control?
In this talk, we will consider these and other fundamental questions in system design and look at how new research in analytical performance modeling helps us overturn some age-old beliefs.