Labs
Each lab takes under an hour on a laptop and turns a claim from this mechanism into a number you measure yourself.
- 1
FIFO versus SRPT, on heavy-tailed and on steady job sizes
One server at 90% load, FIFO against preemptive SRPT, with heavy-tailed and with steady job sizes: mean, p99 and the largest jobs.
SimulatePython - 2
Head-of-line blocking: one queue versus two
Four workers, one queue: four 5-second jobs in front of 200 tiny ones, then a separate pool, then the big jobs cut into chunks.
MeasurePython - 3
Stranded resources and DRF
How many (1 CPU, 16 GB) tasks fit a (32 CPU, 256 GB) machine; then dominant resource fairness for two tenants on 9 CPU and 18 GB.
SimulatePython - 4
The power of two choices
100,000 tasks onto 100,000 machines: one random choice, the lesser loaded of two, and of three. The maximum load over five seeds.
SimulatePython - 5
Throughput versus goodput past the knee
A service of 100/s receives 150/s and clients give up after 2 s: unbounded queue, bounded queue, and bounded queue with a deadline check.
SimulatePython - 6
The multiplexing dividend and its collapse under correlation
16 tenants with partly correlated demand: the 99th percentile of the summed demand against the sum of 99th percentiles, for ρ from 0 to 1.
SimulatePython with NumPy - 7
An autoscaler that arrives too late
A reactive autoscaler with a 240-second delay against two 90-second bursts: unserved demand and idle capacity for 0% to 200% headroom.
SimulatePython