Bufferbloat and stability
A connection can test fast and still feel slow. The usual cause is bufferbloat: the extra delay your connection adds when it's busy.
What bufferbloat is
When a download or upload fills your connection, your router or modem queues the packets it can't send yet. Oversized buffers let that queue grow long, and every other packet waits behind it: a game's next update, a call's audio, the page you just clicked. The result is a connection with plenty of speed whose latency jumps whenever it's in use.
Latency under load
Idle latency is the round trip when nothing else is running. Latency under load is the same round trip while your connection is full. The difference between them is bufferbloat. When Netflix added both figures to fast.com in 2018, it described the goal plainly: Ideally, those two values ... should be close
(Netflix).
A test that reports only Mbps misses this entirely. A connection can reach its full speed while adding hundreds of milliseconds to everything else on it.
Why stable latency matters
- Games need latency that stays low under load, not just on average. Waveform's test, for example, passes low-latency gaming only when the 95th-percentile latency is under 40 ms.
- Video and voice calls break up when latency spikes or packets stop arriving. New Zealand's regulator counts a disconnection when
latency measurement packets were lost for 30 seconds or longer
(Commerce Commission, April 2026). - VPNs add the path to their server to every round trip, so a queue at home on top of that is felt at once.
A short test sees one moment. Dropouts and spikes that come and go only show up when latency is watched over time, which is why lag.dev keeps pinging while the page is open.
How to read lag.dev
- Each server gets three plots: its latency over the last minute, then its own download and upload.
- The dashed line on each plot is its p50, the median. On a latency plot that's the idle p50: the latency to that server when nothing is loading.
- Latency above 1.5 times that idle p50 turns gold, orange at 2.25 times and red from 3 times.
- The servers take turns at their loads while the pings to all eight keep running. A spike on one server's plot during another server's load is your own connection's queue.
- A gap in a latency plot is lost pings: no answer within 5 seconds.
- Hover over or tap a plot for its figures: idle and loaded p50 and p95, and the increase under load.
The methodology defines each figure.
How to fix it
Smart queue management (SQM) in your router keeps queues short, so other traffic doesn't wait behind a big transfer. The common choices are CAKE and FQ-CoDel, both built for this problem:
- OpenWrt's SQM guide explains how to turn it on and set its speed limits.
- CAKE shapes your traffic and keeps flows from crowding each other out.
- FQ-CoDel is specified in RFC 8290, building on CoDel in RFC 8289.
SQM's limits go a little below the speeds you measure, so the queue forms in your router, where SQM controls it, rather than in the modem. Some consumer routers include it under names like smart queues. After turning it on, run lag.dev again: the colored spikes should shrink.
Related: how lag.dev measures and how lag.dev compares.