How we measure
Klyrix/speed measures your connection in your browser, against test servers we run ourselves or
against Cloudflare’s global network. There are two sets of rules: version 2 for our own
servers and version 1 for Cloudflare. Every result records which one it used, as
methodology: "v2" or "v1", so results can be compared over time.
What you get
- Download and upload speed, in megabits per second.
- Ping (latency while the line is idle) and jitter (how much it varies), in milliseconds.
- Latency under load: ping while the download and the upload are running. A large rise means queues fill up on your line, which you feel as lag in calls and games.
- The test server, your provider, IP version, protocol and the data the test used.
Where the test runs
When you press START, your browser asks for the list of our test servers nearest to you and sends a few tiny requests to each of them — four to every server, the first one discarded because it also opens the connection. At the same time it pings Cloudflare. Whichever server answered fastest leads the test if it answered within 40 ms and is at most 10 ms slower than the best Cloudflare figure. Otherwise the test runs on Cloudflare under the version 1 rules below. The choice is made once, before anything is measured, and the two sets of rules are never mixed in one result. The result names the server, for example Istanbul (IST).
On Cloudflare, every request goes to the data center Cloudflare routes you to, normally the nearest one. Before the test the page pings two copies of the test files: this site and a second host on Cloudflare Pages. It uses the second one for ping and download only when it is clearly nearer (its median ping under 70% of the site’s). The upload always goes to this site.
At busy times Cloudflare can send traffic to a farther data center. When your country has a Cloudflare data center but the test ran in another country, the result says so: the result may then be lower than your connection’s real speed.
On our own servers (version 2)
Most of our servers give up to about 950 Mbit/s and a few larger ones up to 4.75 Gbit/s, so a faster line is measured across several at once. Ping, jitter and latency under load always come from the nearest server. The download starts there with 4 request loops (6 on a larger one). Every second the test looks at the last full second: while the sources in use are together carrying 80% of what they can give, it adds more, stepping their number up through 1, 2, 3, 5, 8, 12. The upload does the same with 3 loops per server, 5 on a larger one.
Sources are added in a fixed order: the nearest server, then the larger servers, then Cloudflare, then our other servers — in other countries too, if the city has too few. Cloudflare joins as one more source (the download from the test files, the upload to this site), so a very fast line is not held back by how many servers we happen to own nearby.
A step is kept only if it makes the total more than 10% faster. If it does not, exactly those sources are dropped again and the test stops adding any. This is how a line that one server already fills never gets measured across a far server. Sources are added only in the first 6 seconds of each direction.
Every server’s bytes are counted on one shared clock, so the figure is the whole line, not a sum of separate tests. The measurement starts 2 seconds after the first byte, or 1 second after the last time the set of servers changed, whichever is later; from there 8 seconds are measured, and one direction never takes longer than 15 seconds. The windows and the averaging are the same as on Cloudflare.
Our servers speak HTTP/1.1 only, which gives each request loop its own connection. If a
source drops out during a measurement, the others carry on and the result is marked
server_lost. If the line was still filling everything we had when the sources
ran out or the time to add more was up, the result is marked server_limited:
your line may be faster than what our servers could show.
The result also carries a per-server breakdown: every server that was asked (up to 20), plus a line for Cloudflare when it joined, in the order the servers were offered, so the one that led is not necessarily first. A server that was asked and not used shows no speed, and each line gives at most one reason it was left out. Those per-server numbers are plain averages, so they do not add up exactly to the headline figure.
Ping and jitter
- 22 requests for a tiny answer, one after another — a 1-byte file on Cloudflare, an empty one on our own servers. The first two are discarded.
-
Each sample is the time from sending the request to the first byte of the response, as the
browser’s Resource Timing reports it. Where a browser does not report it, the full request
time is used and the result is flagged
timing_coarse. - Ping is the median of at least 10 valid samples. Jitter is the average difference between consecutive samples.
Download
- On Cloudflare, runs for 10 seconds; on our own servers, the 8 seconds described above.
- On Cloudflare, starts with 4 parallel request loops. After one second it adds 2 more, and keeps adding 2 each second while the speed still grows by more than 10%, up to 12 loops, within the first 6 seconds. This is how the test reaches your line’s full capacity. On our own servers it is the number of servers that grows, 4 loops at a time.
- Requests are 100 kB, 1 MB, 10 MB or 25 MB of random, incompressible data. A loop moves up a size when its last request took under half a second and down when it took over four seconds.
- Received bytes are counted in 250 ms windows as they arrive.
Upload
- On Cloudflare, runs for 10 seconds with 3 parallel loops, growing by 1 up to 8 under the same rule. On our own servers, 3 loops per server and the growth described above.
- The data is random, generated in your browser. Request sizes aim at about 3 seconds each on Cloudflare, and about 1.5 seconds each on our own servers.
- Only data the server confirms it received counts. Each confirmed request is spread over the time it took, in 250 ms windows. At most 40 upload requests run per test on Cloudflare; on our own servers the limit is the byte allowance in the test’s ticket.
- When the time is up, no new request starts. On Cloudflare the requests already sent are cancelled at once; on our own servers they get 4 more seconds to finish. Anything still unfinished is cancelled and its time is not counted.
From windows to one number
- The first 2 seconds are discarded: connections are still warming up.
- Of the remaining windows, the slowest 30% and the fastest 10% are dropped.
- The average of the rest is the result.
This favours the speed your line sustains over short peaks. With fewer than 4 windows left, no number is given.
Latency under load
During the download and the upload a ping runs every 250 ms. The median of the samples sent while the measurement was running is the latency under load for each direction.
On Cloudflare the ping travels on the same connection as the test traffic, so it also includes queues in the browser and the server. On our own servers it gets its own connection, so the figure is closer to the queueing on your line alone. Comparing the two methods on this number is therefore not exact.
Data used
Everything the test sends and receives is counted and shown. On a fast connection a test can use more than 1 GB, so run it on Wi-Fi if you pay for mobile data.
When a test stops
- If the tab goes to the background, the test is cancelled: browsers slow down background tabs, which would make the result wrong.
- If the upload test is unavailable for a while, download and ping are shown alone.
What the numbers do not tell
The result is your speed to our test servers, or to Cloudflare’s network, not to every website. Wi-Fi, the device, the browser and other traffic on your line can all lower it. On Cloudflare the browser carries the test over one encrypted connection per host, so tools that open many connections can show different numbers; on our own servers the test uses several connections and several servers at once, which is what makes a very fast line measurable in a browser at all.
Nothing about your test is stored: the result is calculated in your browser and stays there. See Privacy.