The point of a VPN speed test isn't opening a speed-test site and running it once. It's fixing the measurement conditions so that today's numbers and next week's numbers can sit in the same table and be compared. Latency, jitter, packet loss and bandwidth each answer a different question, and peak-hour behaviour differs sharply from the rest of the day. What follows is a repeatable routine, in order: which metrics to measure, when to measure them, how many rounds to run and which value to take, how to read the results, and why the numbers on different vendors' marketing pages can't be compared with each other.

Which Metrics to Measure

"Fast" is a vague word. Unpacked, it is at least four separately measurable quantities: latency, jitter, packet loss and bandwidth. There is no conversion between them — a low-latency route can have very little bandwidth, and a route with a big advertised bandwidth can jitter badly at peak hours. Only by logging the four separately can you tell whether the problem is physical distance, link congestion, or your own local network.

MetricUnitCommon methodWhat to watch for
Latency (RTT)MillisecondsClient built-in latency test, TCP handshake timeDistance sets the floor; cross-continent can't match same-city
JitterMillisecondsSpread across 10+ consecutive samplesA good median with high jitter still breaks up calls
Packet lossPercentContinuous probes or TCP retransmission countsCheck loss before latency — the order matters
Downstream / upstream bandwidthMbpsMeasure single-thread and multi-thread separatelyCan't exceed your home broadband plan
DNS lookup timeMillisecondsTime to resolve a new domain the first timeLocal vs tunnelled resolution changes the result a lot
Time to first byteMillisecondsNetwork panel in the browser dev toolsPartly the target site's own doing, not the route

ICMP probes are rate-limited or dropped outright on some networks, so a failed ping doesn't mean the route is down. For reachability, TCP handshake time or the client's built-in latency test is more reliable — and closer to what the browser actually does when it opens a connection.

Fix Your Test Conditions First

The same node can produce results that differ by a factor of two across devices, wireless bands and background load. The first step of a speed test isn't pressing Start — it's pinning the variables down. Otherwise the data is a reference at best, not evidence.

Pin the protocol too. VMess depends on the client and server agreeing on time; clock drift causes handshake failures rather than a simple slowdown. Hysteria2 and TUIC run over QUIC/UDP and usually hold up better than TCP-based protocols on lossy routes — but if your local network throttles UDP, the result flips. Any protocol change gets its own row; never average it together with the previous set.

Time Slots: Give Peak Hours a Row of Their Own

International bandwidth is shared. Between 20:00 and 23:00 the local carrier's outbound links and the cross-border path are both under pressure, and the same route may measure half of what it showed in the morning. Testing only in quiet hours gives you the best-looking numbers of the day — from a time when you're not actually using it.

4 slots Morning, afternoon, evening peak and late night — one round each
3 rounds Three repeats per slot, and take the median rather than the best
10 samples At least ten consecutive latency samples before a set counts
1 sheet All slots in one table is what makes them comparable

A workable schedule: 10:00 as the baseline, 15:00 as a second baseline, 21:00 as the peak-hour sample and 00:30 as a control. Run three rounds per slot, two to three minutes apart, and take the median. A mean is easily skewed by one bad sample, and the best value doesn't represent what you'll see when you open a page; the median ignores individual outliers and tracks everyday experience more closely.

How to read latency, jitter and packet loss

Light travels through fibre at about 200,000 km/s, so round-trip distance sets a hard floor on latency. A node in a neighbouring Asian country a thousand or two kilometres away has a theoretical floor of a few tens of milliseconds; a transpacific round trip of 20,000 km or more starts above 100 ms. So when one screenshot shows "Tokyo 30 ms" and "Los Angeles 30 ms", the second figure is almost certainly measuring a local entry point, not the actual exit node.

These ranges are rules of thumb, not guarantees; actual results also depend on your local carrier, the route type and where the target site sits. Jitter is the spread between neighbouring samples: if the max and min of ten consecutive samples differ by 50 ms, voice calls will break up even when the median is only 60 ms. For real-time audio and video, jitter hurts more than latency. Packet loss below 1% is essentially invisible; above 3% video starts to artefact and pages occasionally fail to load; above 10% the route is effectively unusable. Once loss appears, change route type first and consider changing protocol second.

Reading 1: High latency, low jitter and zero loss mean the limit is physical distance. A different protocol won't help — only a closer node, or a route type with a shorter path.

Concluding from a single run is the most common mistake. One result mixes route state, momentary congestion and local network noise. You need at least three rounds of ten samples each before the numbers mean anything.

Bandwidth: Single-Thread, Multi-Thread and Unit Conversion

Single-thread bandwidth governs the throughput of one connection — that's what high-bitrate video and single large downloads rely on. Multi-thread bandwidth governs the total, and only matters when several tasks run in parallel. Browser speed-test sites usually open several connections at once, which flatters the number; client built-in tests are often single-thread or let you set the connection count, which is closer to what a single app feels like. Measure both, but never compare one against the other.

Align the units first. Mbps is megabits per second, MB/s is megabytes per second — a factor of 8 apart, so 100 Mbps is roughly 12.5 MB/s. Read a downloader's 12 MB/s as 12 Mbps and you will assume the line delivers only a tenth of its rated speed.

Bandwidth is capped by three things at once: your home broadband plan, the bandwidth allocated on the node side, and protocol encapsulation overhead. Measured downstream never exceeds your plan and is usually a little below it; upstream is generally far smaller than downstream, so when a video call stutters, check upstream first instead of re-testing downstream.

Why Advertised Numbers Aren't Comparable

Before two speed figures can be compared, check four things: where the test target sits, how many connections were used, what time of day it ran, and how it was probed (ICMP, TCP or application layer). Change any one of them and the conclusion can flip.

Common claimWhat it really meansWhat you need to reproduce it
Top advertised bandwidthMulti-thread peak at the best hour on the best nodeSame slot, same node, same thread count
Lowest advertised latencyProbe to the nearest entry point or nodeSay whether it's entry or exit, and which probe
No throttlingNo artificial rate capStill limited by your broadband and route capacity
Stable at peak hoursSmall drop versus daytimeState the comparison slot and sample count

When a provider advertises a very high peak and you measure a fraction of it at home on a single thread, the two aren't contradictory — the conditions differ. To make a judgement, level the conditions: same time slot, same node, same protocol, same thread count, then see whose throughput drops less at peak hours.

A Log Sheet You Can Copy

Below are the columns of the log sheet; one row is one complete measurement in one time slot. A spreadsheet or plain text both work — what matters is that the columns stay fixed and you don't add new ones halfway through.

date,slot,node,protocol,rtt_med_ms,jitter_ms,loss_pct,down_mbps,up_mbps,note

A suggested fixed order of six steps:

  1. Run one round while disconnected, as a baseline for your local network.
  2. Connect to the target node and wait 10 seconds for the connection to settle.
  3. Three consecutive latency rounds of 10 samples each; record median and jitter.
  4. Measure bandwidth once single-thread and once multi-thread, recording downstream and upstream separately.
  5. Repeat steps 1 to 4 in another time slot and append the results to the same sheet.
  6. After a week, compute the drop ratio as peak-hour downstream ÷ morning downstream.

A drop within 20% is normal variation and needs no action. Between 20% and 50% is a perceptible slowdown, and a good moment to start comparing other routes. Above 50%, that route is badly congested in that slot — change route type rather than swapping protocols and hoping.

Reading the Results and Common Pitfalls

Reading 2: Peak-hour downstream down to 30% of the morning figure, latency doubled but loss near zero, is classic shared-bandwidth congestion. Switching route type — from direct to relay or dedicated — helps more than changing nodes within the same type.
Reading 3: Normal latency, zero loss, but single-thread throughput only a tenth of multi-thread, means the bottleneck is per-connection throttling or protocol encapsulation overhead — nothing to do with how far the node is.

Routes come in three types: direct, relay and dedicated. Direct leaves the local carrier's network straight away, which is the shortest path but the most volatile at peak; relay first lands at an entry point in mainland China before heading abroad, adding one hop but usually improving stability; dedicated runs over a point-to-point link, with steadier latency and bandwidth at a higher cost. When testing, group statistics by route type rather than by city — the pattern shows up faster. Every route in the route list is labelled with its type, so you can fill in the log sheet straight from it.

The goal of a speed test isn't to find the best-looking number; it's to find the steadiest route for the hours you actually use. Same time slot, same node, same protocol, median of three consecutive rounds — that's what you can base a decision on.