The Throughput-Delay Tradeoff
You can't maximize throughput and minimize delay at the same time. Every congestion control algorithm chooses a point on this curve.
Delay curve · drag the point or use sliders
Configure
Utilization (ρ)
70%
How much of the link capacity you're using. Higher = more throughput, but longer queues.
Delay penalty (δ)
1.0
How much you care about delay vs throughput. δ=0 ignores delay. δ=3 heavily penalizes it.
Results at this operating point
Throughput
70 Mbps
Expected delay
33 ms
Objective U
—
Higher U = better for your chosen δ
What's happening here
The curve shows how expected delay grows as you push utilization higher. This is queueing theory: packets wait longer when the link is busy.
delay ∝ 1 / (1 − ρ)
At 50% utilization, delay is ~2× the minimum. At 90%, it's 10×. At 99%, it's 100×. This is why networks can't run at full capacity.
The objective function from TCP ex Machina captures your preference:
U = log(throughput) − δ × log(delay)
Remy's insight: given your δ, a computer can search for the congestion control rules that maximize U. Different δ values produce different algorithms—there's no universal "best."
References
- TCP ex Machina: Computer-Generated Congestion Control Winstein & Balakrishnan, SIGCOMM 2013. Source of the δ-weighted objective function.
- M/M/1 Queue The queueing model behind the delay curve. Standard theory.
- Keith Winstein Paper author, Stanford CS. Also created Mosh.