Skip to content

Why a bigger buffer makes things worse

Queue and AQM

Why a bigger buffer makes things worse, and what active queue management does about it.

How much fits in the wire

50.0 Mbps × 50.0 ms ÷ 8 = 305.2 KiB = 216 × MSS

Capacity times round trip, divided by eight because capacity is quoted in bits and everything else here in bytes. That is how much data can be in transit at once, so it is the amount worth having in flight — and the number the buffer below is measured against. Send less and the wire idles; send more and the extra waits in a queue.

The link
Bandwidth50.0 Mbps
1 Mbps200 Mbps

How fast the narrowest link on the path can forward packets — the .

One-way delay25.0 ms · Base RTT 50.0 ms
1 ms200 ms

Distance, as time. Doubled it is the — the fastest a round trip can possibly be.

Buffer2.38 MiB · 8.00 × BDP
0.05 × BDP8 × BDP

How much may wait at the bottleneck. Read it as a multiple of the : below 0.5 the link goes idle, above 1 the extra is pure latency.

Random loss0
05%

Packets dropped for reasons other than a full queue — radio interference, a bad cable. Leave at zero to see congestion alone.

The sender

The rule the sender uses to decide how fast to go. All of them run through one identical sender, so this compares algorithms and not implementations. CBR is the exception and the control case: it is not an algorithm at all but a source that ignores every signal, pinned just above capacity — watch it fill the buffer and stay there.

Run settings60 s · #4
Duration60 s
5 s120 s

How long to simulate. Longer runs show more sawtooth cycles and take longer to compute.

Seed#4
164

Which this run used. Same settings and same seed give a byte-identical result.

A loss-based sender fills whatever buffer it is given. Push the buffer past one BDP and the extra bytes buy no throughput at all — every one of them is latency. That is bufferbloat, and it is why the queue disciplines below exist.

Simulating packets…