Lotamyst / The Bench / Ping Test

Ping Test

Measure latency, jitter and connection stability with timed round trips to the nearest CDN edge — every sample is taken in your own browser and nothing is uploaded.

locating the edge…
min (ms)
median (ms)
mean (ms)
p95 (ms)
max (ms)
jitter (ms)
0samples
0failed
0spikes
Last 60 samples
round trip spike (2× the median, never under +20 ms) no answer
Distribution

Each probe is a single HEAD request to lotamyst.net — the same server that sent you this page — carrying no body and no cookies. (If a proxy refuses HEAD, the test falls back to a one-byte ranged GET and says so in the result.) Nothing is uploaded, no result is written to storage, and the page talks to no third party at all. Keep this tab in front while a test runs: browsers throttle background tabs hard enough to invent spikes that are not there.

How to use this, and how to read the result

  1. The quick test runs on its own. Twenty-five timed round trips take a few seconds and fill in every figure above. Two extra warm-up probes run first and are thrown away, because the first request after an idle moment may have to rebuild the TCP and TLS connection and would read tens of milliseconds high.
  2. Read the median, not the mean. The median is the middle sample: one unlucky 400 ms outlier moves it barely at all, while it drags the mean somewhere no packet actually went. When the two disagree badly, the mean is telling you there is a tail.
  3. Read the spread, not just the middle. min is what the line does when nothing is in the way — that is your physical floor. p95 is what one packet in twenty actually experiences. A wide gap between them is exactly what makes a game feel inconsistent while the average looks perfectly healthy.
  4. Check jitter. Jitter here is the mean absolute difference between one sample and the next one after it, skipping any pair that has an unanswered probe between them — a gap of several seconds is not packet-to-packet variation and would not be honest to count as it. Voice chat and game netcode both budget for a steady delay and cope badly with a delay that changes on every packet, which is why 60 ms of rock-steady latency beats 30 ms that keeps moving.
  5. Then run the 60-second stability test. That is the one that answers why does my game lag sometimes. A five-second test cannot see a spike that happens once a minute, and once a minute is enough to lose a fight.
  6. Read the verdict, not only the grade. Periodic spikes, sustained degradation and failed requests are listed separately on purpose: they have different causes and completely different fixes, and a single letter cannot tell them apart.

What is actually being measured

This is an HTTP round trip, not an ICMP ping. A browser has no way to send an ICMP echo packet — that is a raw-socket operation the sandbox does not expose, and no amount of JavaScript changes it. So each probe here is a real HEAD request whose round trip is timed with performance.now(). That trip carries the TLS record layer, HTTP framing, and however long the server takes to answer, so it reads a few milliseconds higher than ping would to the same machine. We would rather say that plainly than print a number that quietly is not what it claims to be.

The useful part is that the overhead is roughly constant. It sits underneath every sample equally, so it shifts the whole distribution a little to the right and leaves its shape untouched. Everything this page cares about most — jitter, the size of the tail, whether spikes arrive on a clock — is a statement about the differences between samples, and those differences survive the overhead intact.

Probes are sent one at a time, never in parallel. Fire ten requests at once and they queue on the same connection; the tenth one waits for the nine in front of it and reports that queue as latency. It would look like a network problem you do not have. Each probe here waits for the previous one to finish before the next is sent. The quick test then leaves a fixed 130 ms gap; the stability test instead places each probe on a 250 ms grid measured from the moment the run started, so a slow probe does not push every later one further and further behind and the spike-interval maths stays meaningful.

The clock is not infinitely fine, so the numbers are not printed as if it were. Browsers deliberately coarsen performance.now() to blunt timing attacks — roughly 100 microseconds in Chromium, and a full millisecond in Firefox and Safari. Figures on this page are therefore shown to one decimal place below 100 ms and to the nearest millisecond above it. Averaging many samples does genuinely recover some resolution below the clock's step, which is why the median and jitter are still worth a decimal, but a second one would be decoration.

Nothing is served from a cache. This site installs a service worker that answers same-origin GET requests from Cache Storage. If the probes were plain GETs they would be answered from your own disk in well under a millisecond, and the page would confidently report a fantasy. Two things prevent that: the probe is a HEAD, which the service worker deliberately ignores, and the request is issued with cache: no-store so the browser's own HTTP cache cannot answer either. If a fallback path ever has to use GET, it carries a unique query string and a Range header so the response is a 206, which the Cache API is required by spec to refuse to store.

A failed probe is not the same as a lost packet. TCP retransmits lost packets invisibly, so a single dropped packet normally shows up here as one slow sample rather than a failure. A probe only counts as failed when nothing came back at all — or, on a request the network refuses outright, as soon as it is refused. The waiting limit is six seconds until five samples exist and nothing about your line is known yet; after that it becomes twelve times your own median, floored at two seconds and still capped at six. Scaling it matters: a fixed six seconds would let a line that dies part-way through a sixty-second run burn a tenth of the run on a single dead probe, and it would let a 200 ms dropout on a 15 ms line masquerade as a healthy sample. (If nothing answers at all from the start, the run gives up after three silent probes rather than making you sit through the rest of it.) The consequence is that the failed figure is a far harsher signal than a packet-loss percentage from a native tool — one failure in sixty is already worth investigating, and it usually means a link is dropping out rather than merely dropping packets.

Reading the shape of the distribution

The histogram is doing more work than the headline number. Averages hide exactly the behaviour that ruins games and calls, and the shape does not.

Why more Mbps does not fix lag

This is the single most expensive misunderstanding in home networking, and ISPs are not in a hurry to correct it. Bandwidth is how much fits down the pipe each second. Latency is how long one thing takes to get there and come back. They are close to independent. A competitive shooter sends packets of a couple of hundred bytes, sixty or more times a second — on the order of a hundred kilobits per second in total. It has never once been limited by your 500 Mbps line, and upgrading to 1000 will change precisely nothing about how it feels.

What actually sets your latency, in rough order of how much it matters:

Jitter deserves its own paragraph because it hurts more than raw latency and gets far less attention. Voice chat and game netcode both handle a constant delay gracefully: the client predicts, the codec buffers, and everything feels fine. Neither handles a delay that changes packet to packet. A voice application responds by growing its de-jitter buffer, which adds latency to absorb the variance, so high jitter turns into audible delay and then into the chopping that everyone recognises. Game netcode responds by mispredicting, which is the rubber-banding you feel as lag even though the average ping never moved.

Buffer bloat, and the one router setting worth changing. Every device on the path keeps a queue of packets waiting for their turn on the wire. For years the industry made those queues enormous, on the theory that a dropped packet is worse than a delayed one. It is not. When you start a large upload, TCP does exactly what it is designed to do and speeds up until something pushes back — and a huge queue does not push back, it just fills. Now your queue holds several seconds of data, and every game packet, DNS lookup and voice frame has to wait behind all of it. Idle latency of 20 ms becomes 300 ms under load, and no amount of extra bandwidth helps, because the pipe is not full, the queue is.

The fix is smart queue management, sold as SQM, QoS, Smart Queues or Adaptive QoS depending on the firmware. It is standard in OpenWrt, and now common in stock firmware from most vendors. Turn it on and set the limits to roughly 90 to 95 percent of your real measured line speed in each direction — the shaper has to be the slowest point on the path, otherwise your ISP's oversized buffer stays in charge. Done correctly, latency under full load stays within a few milliseconds of idle. Run the speed test in another tab while this stability test is running: if latency triples, that is buffer bloat and you have found your fix.

And then there is the cable. A wired connection resolves more lag complaints than any other single change, by a wide margin. Wi-Fi is a shared radio: only one device on a channel transmits at a time, everything retries when a frame collides, power saving parks the radio between packets to save battery, and the access point periodically stops serving you to scan other channels. Every one of those is a spike, and none of them exists on Ethernet. If a cable is genuinely impossible, the ranked next-best options are: move to 5 GHz or 6 GHz, pick a clear channel, move closer to the access point, and turn off Wi-Fi power saving on the client. Powerline adapters and mesh nodes with no wired backhaul both usually make jitter worse, not better.

Latency to a CDN edge is not latency to a game server

The chip under the headline number shows which Cloudflare datacentre answered your probes, read from /cdn-cgi/trace on this site. The three-letter code is an IATA airport code for the building. A large CDN runs hundreds of these and steers you to a nearby one, which is why a good result here can be in single-digit milliseconds — you may be measuring a round trip to a rack a few kilometres away.

Your game server is not in that rack. It is in whichever region the publisher chose, it is reached over paths a CDN has spent a fortune optimising and your game has not, and it is doing real work before it answers. So expect your in-game ping to be higher than the number on this page, often much higher, and treat this figure as the floor your connection is capable of rather than a prediction. What transfers cleanly between the two is everything about consistency: if this page shows 8 ms of jitter and spikes every twelve seconds, your game is getting the same treatment, whatever its absolute ping happens to be.

If you need the actual latency to a specific game server, a browser cannot get it for you and no browser tool honestly can. The server is on a different origin with no CORS headers you may use, most game servers speak UDP rather than HTTP, and many do not answer ICMP at all. Use the in-game network overlay if there is one, or a native tool — ping and tracert on Windows, ping and mtr on Linux and macOS. mtr is the one worth learning: it pings every hop on the path continuously, so you can see which router the loss or the delay starts at instead of only that it exists somewhere.

What to do about a bad result

  1. High median, low jitter, no spikes. That is distance and last-mile technology, not a fault. Nothing on your side will fix it; pick servers in a closer region and confirm which edge answered above.
  2. Low median, high jitter, regular spikes. Wi-Fi, with high confidence. Plug in a cable and re-run the test. If the spikes vanish, you have your answer in under a minute.
  3. Fine when idle, terrible under load. Buffer bloat. Enable SQM or QoS on the router and shape to slightly under your real line speed.
  4. Latency climbs and stays climbed. Something started competing for the line. Check for game and OS updates, cloud sync, backups, a TV streaming in another room, and anything on a schedule.
  5. Failed probes. Something is dropping out rather than slowing down. Test on a cable to rule out radio, then check for a failing cable or port, an overheating router, DNS problems, or an ISP fault worth reporting — a stability run with a failure count is exactly the evidence support desks ask for.
  6. Everything is good here but the game still lags. Then the problem is past your connection: the route to that server, the server itself, or that specific game. Run the test again during the bad period; a connection that is clean while the game stutters is genuinely useful information.

FAQ

Why is my ping in game higher than the number on this page?

Because this page measures the round trip to the nearest Cloudflare edge, which is usually a datacentre in or near your own city, while a game server may be hundreds or thousands of kilometres away. Fibre costs roughly 1 ms of round trip for every 100 km of distance, and every router on the path adds a little more. Treat the number here as the floor your connection can reach, not as the ping you will see in a match.

What is a good ping and a good jitter?

Under 20 ms is excellent, 20 to 50 ms is good, 50 to 100 ms is playable for most games, and over 100 ms starts to hurt in shooters and fighting games. Jitter matters just as much: under 5 ms is smooth, 5 to 15 ms is audible in voice chat, and over 20 ms means packets are arriving in bursts. A steady 60 ms feels far better than a 30 ms line that jumps to 200 ms every few seconds.

Why does this show a different number than the ping command?

A browser cannot send ICMP echo packets, which is what the ping command uses, so this test times a real HTTP request instead. That round trip also carries HTTP framing, TLS session resumption and the time the server spends answering, so it reads a few milliseconds higher than a native ping to the same machine. The variation between samples, which is what jitter and stability actually measure, is unaffected by that constant overhead.

What causes ping spikes every few seconds?

Regular, evenly spaced spikes are almost always Wi-Fi. Access points periodically scan other channels, power saving parks the radio between packets, and a neighbour on the same channel forces retries. Bluetooth, USB 3 enclosures and microwave ovens all crowd the 2.4 GHz band and produce the same pattern. Plugging in an Ethernet cable removes every one of those causes at once.

Will faster internet fix my lag?

Almost never. Bandwidth is how much data fits down the pipe each second, latency is how long one packet takes to get there and back, and a game sends tiny packets many times a second. Going from 100 Mbps to 1000 Mbps changes nothing about the distance to the server or the number of routers on the way. The one bandwidth-shaped cause of lag is congestion: when something on your network saturates the upload, latency climbs, and that is buffer bloat rather than a lack of speed.

What is buffer bloat and how do I fix it?

Network equipment keeps a queue of packets waiting to be sent. When that queue is far larger than it needs to be, one big upload fills it with megabytes of data and every later packet has to wait behind all of it, so latency under load climbs from 20 ms to several hundred. The fix is smart queue management, sold as SQM, QoS or Smart Queues in router firmware. Turn it on, set it slightly below your real line speed, and latency under load usually falls back to near idle.

Related tools