You pay for 500 Mbps. At 2 a.m., with the house asleep, everything is instant. At 7 p.m., when someone starts a game update, your video call turns into a slideshow and your mouse develops a half-second delay. The speed test — run in either window — still says 500 Mbps.

That is bufferbloat: latency that appears only when your link is busy, caused by packets waiting in queues that grew too large. It is one of the most common quality problems in home networking, and it is almost invisible to traditional speed tests, because they measure your ping before the load starts.

This article explains the mechanism, how to measure it, and — most importantly — how to fix it, usually for free, with settings that already exist on your router.

The mechanism: how a buffer turns into a delay machine

Every network device between you and the internet — your Wi-Fi driver, your router, your modem — contains buffers: small amounts of memory where packets wait when they arrive faster than they can be sent. Buffers exist for a good reason. A packet that waits 2 ms in a short queue is a packet that wasn’t dropped; short queues smooth out micro-bursts and improve throughput.

The trouble starts when buffers are large and managed naively (first-in-first-out, drop only when completely full). Memory became cheap, so manufacturers shipped ever-bigger buffers. Then TCP’s congestion control does the rest:

  1. A download starts and sends data as fast as it can, probing for capacity.
  2. The excess doesn’t get dropped at your bottleneck link — it fills the buffer first, because the buffer is huge.
  3. Every packet in that buffer — including your game packets and call audio — waits behind the whole pile.
  4. TCP only slows down after it detects loss or rising RTT, which now happens late, because the buffer absorbed the evidence.
  5. Result: the buffer stays full for the entire transfer, and your latency sits at hundreds of milliseconds instead of ten.
Diagram comparing a bloated FIFO buffer that queues a game packet behind twelve bulk packets versus a smart fq_codel queue where the game packet departs immediately Top: bulk download packets stack up in a large first-in-first-out router buffer and an interactive game packet waits behind them, adding 430 milliseconds. Bottom: a smart queue keeps the bulk flow short and schedules the game packet into its own flow, adding only 2 milliseconds. INSIDE THE QUEUE BLOATED FIFO VS SMART QUEUE 1 — DUMB BIG FIFO BUFFER · GRADE F bulk download ROUTER · FIFO BUFFER ← YOUR GAME PACKET WAITS HERE 1 GBPS LINK to the internet QUEUE DEPTH: 21 PACKETS → EVERY PACKET PAYS +430 MS 2 — SMART QUEUE MANAGEMENT (FQ_CODEL / CAKE) · GRADE A+ same bulk download FQ SCHEDULER · PER-FLOW QUEUES BULK FLOW · KEPT SHORT (DROPS EARLY) ← OWN QUEUE · DEPARTS IMMEDIATELY SAME LINK game packet leaves in ~2 ms QUEUE DEPTH CAPPED → LATENCY STAYS FLAT UNDER LOAD bulk flow slows a few % — invisible to a download, transformative to a call
The bufferbloat paradox. A bigger buffer sounds like a feature; in practice it converts excess bandwidth into excess delay. Smart queue management (fq_codel, CAKE) keeps the bulk queue short and gives interactive traffic its own lane — trading a few percent of throughput for flat latency.

The key insight of the diagram: a buffer doesn’t create bandwidth, it creates delay. Once the queue is full, you’ve “paid” the latency and gained nothing in return. Smart Queue Management (SQM) accepts slightly earlier packet drops on the bulk flow so TCP backs off sooner — and the queue never balloons.

How bufferbloat is measured (and graded)

Bufferbloat is a delta, not an absolute number. The measurement recipe:

  1. Measure idle latency — a handful of pings with your line quiet.
  2. Saturate the link — start a download (and separately, an upload).
  3. Keep pinging during the saturation.
  4. Bufferbloat = loaded latency − idle latency.

That delta is then graded. SpeedPulse grades it on the scale popularized by Waveform and the bufferbloat.org community, which has become the de-facto industry standard:

Bufferbloat grade scale from A-plus under 5 milliseconds to F at 400 milliseconds and above A horizontal segmented bar: A+ below 5 ms, A below 30 ms, B below 60 ms, C below 200 ms, D below 400 ms, and F at 400 ms or more, with example markers for a typical unmanaged cable modem and a router running fq_codel. BUFFERBLOAT GRADE SCALE EXTRA LATENCY UNDER LOAD A+ A B C D F < 5 ms < 30 ms < 60 ms < 200 ms < 400 ms ≥ 400 ms flat under load barely noticeable minor delay calls/games lag clearly laggy feels stuck router w/ fq_codel ≈ 3 ms stock modem/router ≈ 430 ms MEASURED AS: LOADED LATENCY − IDLE LATENCY · HIGHER BANDWIDTH CHANGES NOTHING
The A+ to F scale. The delta — not your raw speed — decides the grade. A 100 Mbps line with an A can feel dramatically better than a gigabit line with a D.

Upload saturation is the classic worst case, especially on asymmetric connections (e.g., 500/50). A cloud backup or photo sync saturates the skinny upstream; the ACKs for your downstream traffic and the audio you’re sending to the call all queue behind it. If your calls break whenever a backup runs, this is almost certainly your problem.

Quick diagnostic table

SymptomMost likely causeVerify with
Calls freeze when someone downloadsDownload-side bufferbloatLoaded ping during a download
Game lag while a backup/sync runsUpload-side bufferbloat (worst case on asymmetric lines)Loaded ping during an upload
Lag spikes at random timesBackground cloud sync / OS updates saturating the linkRun a test when it happens; check the delta
Constant high ping, even at idleNot bufferbloat — distance, routing, Wi-Fi, or ISP congestionIdle ping + our ping guide

The fix, in order of effectiveness

1. Enable Smart Queue Management on your router (the real fix). fq_codel and CAKE are open-source queue disciplines designed precisely to keep latency flat under load. Where to find them:

  • OpenWrt: LuCI → Network → SQM Queue Management. Set download/upload to ~85–95% of your measured rate, pick cake or fq_codel, done.
  • Ubiquiti UniFi: Smart Queues (Settings → Traffic And QoS).
  • MikroTik: fq-codel queue type, or CAKE on newer RouterOS.
  • pfSense / OPNsense: Traffic Shaper with CoDel/FQ-CoDel.
  • Many stock firmwares now ship an “AQM”, “anti-bufferbloat”, or gaming-low-latency toggle — look for it.

Expect A or A+ grades afterward. The cost is typically 3–5% of throughput on a saturated link — a trade almost everyone should take.

2. If you can’t touch the router: cap your speeds. Some backup/cloud-sync clients let you rate-limit uploads. Keep the aggregate slightly below your line rate (e.g., 45 of 50 Mbps up) and the queue never fills. Crude, but effective, and it works on any hardware.

3. Wire what matters. Wi-Fi adds its own queues and airtime contention. A wired connection removes a whole class of variance from interactive traffic. (See also: why your Wi-Fi speed test lies.)

4. ISP-side AQM. DOCSIS 3.1 modems are required to support PIE/AQM, and many ISPs enable it by default now — one reason new cable installs often grade better than old ones. If yours doesn’t, a router with SQM covers it regardless.

Test it yourself

Run the SpeedPulse test twice: once with the line idle, once with a big download running in the background. Compare the bufferbloat grade and the loaded latency. If you then enable SQM and re-run, the before/after delta is usually dramatic — we’ve seen F → A+ on stock-versus-managed routers of the same model.

Discussion

  • What grade does your current setup get, and what hardware/firmware produced it? Good data points help everyone.
  • Should “latency under load” be an advertised spec, like bandwidth tiers? The bufferbloat community has argued for years that it should — where do you stand?
  • Is ~5% throughput a price you’d pay for flat latency? Gamers and remote workers almost always say yes; heavy torrenters sometimes say no. Which are you?

If you’re curious how we measure loaded latency from a plain browser tab — no app, no ICMP — the methodology is detailed in how SpeedPulse measures jitter and bufferbloat.

Related articles