Method, exclusions and who pays
The rules behind every figure above, collapsed so the numbers come first. Nothing here loads on demand — it is all in the page.
▸ ▾ What is measured, and howThe collector, the ten-second window, and three things worth knowing before reading a table.
Every VPS review on the internet repeats the provider’s spec sheet. This page does something narrower and, we think, more useful: it rents a plan, puts a small collector on it, and publishes what the machine actually did — how much of its CPU the hypervisor took away, how close it came to running out of memory, how long its disk took to write, and whether it stayed up. Each number is dated to the sample it came from, and every number the box could not read is listed by name rather than printed as a zero.
A collector runs on each box every thirty minutes. It reads the kernel’s own counters twice, about ten seconds apart, and records the difference: CPU time split eight ways (including steal, the time the hypervisor gave this VM’s processor to somebody else), Linux pressure-stall figures for CPU, memory and I/O, memory available as the kernel reports it, the reads and writes the disk completed and how long they took, uptime, and the boot id. One sample is one JSON file.
Three things about that are worth knowing before reading a table. A ten-second window every half hour is a sparse sample: it sees what the box was doing at that moment, not everything it did in between. The disk figures are the box’s own reads and writes — the numbers a node would actually experience — and not a benchmark; a synthetic test beside a syncing node measures its own contention with that node, so it is off unless deliberately requested and would be reported under a separate heading if it ever ran. And the CPU split is checked on every sample so that guest time, which the kernel counts inside user time, is never added twice — the mistake that would understate steal.
Every snapshot is validated against a fixed contract before the box is allowed to write it, again before it is pushed, and again by this site’s build. A snapshot that reports a number it could not read fails all three. What you see here is built from the files that passed.
▸ ▾ What is excluded, and whyThe weekly harness window, every recorded run, and a 5-minute tail. 11 samples excluded so far.
The same boxes run this site’s guide-verification harness once a week: containers that install a node stack from the internet and execute a guide’s commands. That is real CPU, disk and network on exactly the machine being measured, so a sample taken while it runs would be a measurement of the harness, not of the provider.
Two rules, both applied at build time, both derived from the box’s own configuration and this repository’s own records:
- Any sample inside the weekly harness window — Sunday 03:00–05:30 UTC (the timer fires at 03:00 with up to 30 minutes of jitter, and a run has a two-hour budget) — is excluded.
- Any sample that overlaps a harness run that left an artifact, on any day, is excluded. Hand-started runs count.
Both windows are extended by 5 minutes after they end, because the pressure figures are five-minute trailing averages and a sample taken two minutes after a run still carries it. Excluded samples are not deleted: they are listed under their box with the reason, so the count of what was left out is as visible as what was kept. As of the latest snapshot, 11 samples have been excluded.
One cost of that rule, stated plainly: a harness artifact records the kernel it ran under and nothing that identifies the machine, so a run window is applied to every box rather than only to the box that ran it. That is the conservative direction — an excluded clean sample is lost data, an included contaminated one is a false number — and it is why a box can have merged snapshots and no included samples at all.
▸ ▾ What is not measuredChain state, the active disk probe, and the two limits that apply to every number here.
Each box’s section lists, by field name, every metric the collector recorded as unavailable, with the collector’s own reason. Two are true of every box until it runs a node:
- Chain state — sync progress, block height and peer count. The collector has a hook for it and no node is attached to it yet, so nothing here says how fast a chain synced. That is the number this page is working towards, and it will be dated like everything else when it arrives.
- The active disk probe — a bounded fsync test. Off by default, for the reason given above. When it runs it will be reported separately and never merged with the passive figures.
Two more limits apply to every number on the page. The samples are sparse, as described above, so a burst of steal between two windows is invisible. And whether a box is a dedicated VM is a declaration made by whoever installed the collector, not a measurement — nothing on a Linux guest can tell a dedicated VM from a quiet shared one. Each box prints that declaration as a declaration, beside the process and container counts a reader can use to check it.
▸ ▾ Who pays, and who has a sayReferral links, a provider credit, and the reason no price is printed on this page.
Each box says who pays for it, beside its numbers, and the first row of the comparison table says it too. A server this site rents says so; a server or credit a provider supplied carries a separate disclosure naming the provider and what was supplied, because that is a different thing to know about us than a referral link is. In either case the arrangement is the same: no provider sees a draft, has editorial input, or can ask for a number to be withheld. An unflattering figure is published as measured, and the day a provider objects to one is the day it stops being measured, not the day the figure changes.
Prices are the one thing this page will not print. They belong to the provider and they change, and a stale price here would be a false claim about a named company. The comparison table names who pays for each box instead, and each box’s section links the provider’s own live price on both billing terms.
▸ ▾ How a snapshot becomes a rowFour steps from the box’s timer to the table above, and why this page never contacts a box.
- The box’s timer runs the collector. It takes the sample, validates it against the contract, and refuses to write one it cannot validate.
- The box commits the file to a dated branch of this site’s repository. Its credential can push and do nothing else; it cannot open or merge a pull request.
- A person opens the pull request and merges it. The build re-validates every file under the snapshot directory and fails on anything it does not recognise.
- At build time this page reads every merged snapshot, applies the exclusion rules above, and computes each row from what is left: a mean is a mean over the included samples, a worst sample is the single sample that produced it, and both carry the instant they came from. No number is stored anywhere but in the snapshots themselves.
The page never contacts a box. If every box went offline tomorrow, this page would show the same numbers with the same dates until a new snapshot was merged — which is the point: a published measurement should not be able to change without a reviewable diff.
Each box in full
Every metric the collector recorded, the host it recorded them on, which samples were excluded and why, what could not be measured, and who pays — one section per box, closed by default.
Hostinger KVM 1
▸ open▾ close · box id hostinger-kvm1 · latest sample · 301 of 306 samples included
Who pays for this box — we do. This server is rented from Hostinger at the public price and paid for by this site. Hostinger did not supply it, discount it, or know it was being measured, and has no say in what appears here.
Declared dedicated: yes
This is a declaration made by whoever installed the collector, not a measurement. Nothing on a Linux box can tell a dedicated VM from a quiet shared one, and no snapshot is accepted into this dataset without the claim being made explicitly. The cross-check a reader can apply: across the included samples the box ran 127–141 processes and no containers.
- CPU
- 1 vCPU on AMD EPYC 9354P 32-Core Processor
- Memory
- 3.82 GiB
- Disk
- 47.39 GiB on
sda1at/ - System
- Ubuntu 24.04.4 LTS, kernel 6.8.0-137-generic, x64, kvm virtualisation
301 of 306 snapshots included, from to . Each snapshot is one sample window of about ten seconds, taken every thirty minutes.
Excluded and labelled (5)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
| Metric | Value | As of | Samples |
|---|---|---|---|
| CPU steal, meanTime the hypervisor gave this VM’s CPU to somebody else. The number this page exists to publish. | 0.69% | 301 | |
| CPU steal, worst sample | 6.97% | 1 | |
| CPU steal, latest sample | 0.69% | 1 | |
| CPU idle, meanHow much of the CPU nothing was using. High is expected on a box with no node running yet. | 98.27% | 301 | |
| CPU idle, lowest sample | 52.26% | 1 | |
| I/O wait, worst sampleCPU time spent waiting on the disk. | 0.29% | 1 | |
| CPU pressure, worst 5-min "some"Share of the last five minutes in which at least one task waited for a CPU it did not get (Linux PSI). | 2.93% | 301 | |
| CPU pressure, worst 5-min "full"Share of the last five minutes in which EVERY runnable task was stalled on it. | 0.00% | 301 | |
| Memory available, lowest sampleThe kernel’s MemAvailable: what a new process could actually get, not "free". | 3.27 GiB of 3.82 GiB | 1 | |
| Memory available, latest sample | 3.28 GiB of 3.82 GiB | 1 | |
| Swap in use, most seen | 0 B | 1 | |
| Memory pressure, worst 5-min "some"Share of the last five minutes in which at least one task stalled waiting for memory (Linux PSI). | 0.00% | 301 | |
| Memory pressure, worst 5-min "full"Share of the last five minutes in which EVERY runnable task was stalled on it. | 0.00% | 301 | |
| I/O pressure, worst 5-min "some"Share of the last five minutes in which at least one task stalled waiting for the disk (Linux PSI). | 0.58% | 301 | |
| I/O pressure, worst 5-min "full"Share of the last five minutes in which EVERY runnable task was stalled on it. | 0.51% | 301 | |
| Disk write latency, mean over all writesKernel-reported time in writes divided by writes completed, across every sample window that had any. The box’s own real I/O, not a benchmark. | 1.23 ms | 168 (2244 writes) | |
| Disk write latency, worst sample meanA mean over a handful of writes is noisy; the write count is beside it for that reason. | 6.30 ms | 1 (56 writes) | |
| Disk read latency, mean over all reads | 1.00 ms | 8 (15 reads) | |
| Disk write throughput, busiest sampleWhat the box actually wrote during that 10-second window, not what the disk can do. | 182.1 KiB/s | 1 | |
| Disk read throughput, busiest sample | 27.8 KiB/s | 1 | |
| Disk busy, worst sampleShare of the window with at least one request in flight on the device. | 0.43% | 1 | |
| Uptime, latest sampleDistinct boot ids across the included samples. One means the box did not restart between them. | 7d 20h 49m since 2026-09-01 20:26:52 UTC | 1 boot seen |
Not measured on this box
chain— recorded as unavailable in every included sample. The collector’s reason:no chain probe configured — the collector core is node-agnostic
. No node was running on this box during these samples, and no chain probe was configured. Sync time, block height and peer count are therefore not measured yet — they arrive when the box runs a guide’s node for real.disk.activeProbe— recorded as unavailable in every included sample. The collector’s reason:not requested — the collector runs it only with --disk-probe
. The synthetic fsync probe is off unless it is asked for. A benchmark beside a syncing node measures its own contention with that node, so the default disk figures above are the box’s real I/O and nothing else.
Rent this plan
These are referral links: renting through one costs you the same and earns this site a commission. Specs and prices belong to Hostinger and change, so the links open the current ones rather than repeating a number here.
Hostinger KVM 1 — billed monthlyHostinger KVM 1 — 12-month term
Both terms, side by side, on purpose: an annual signup pays this site roughly six times what a monthly one does, and a testnet has an end date. Running one testnet, or not sure yet? Take the monthly term. Already running nodes and expecting to keep going? The 12-month term is a real discount.
Or browse everything Hostinger sells: Hostinger.
Vultr Optimized Cloud Compute — General Purpose
▸ open▾ close · box id vultr-optimized-2c-8g-ams · latest sample · 206 of 212 samples included
Declared dedicated: yes
This is a declaration made by whoever installed the collector, not a measurement. Nothing on a Linux box can tell a dedicated VM from a quiet shared one, and no snapshot is accepted into this dataset without the claim being made explicitly. The cross-check a reader can apply: across the included samples the box ran 239–255 processes and 1–1 containers.
- CPU
- 2 vCPUs on AMD EPYC-Genoa Processor
- Memory
- 7.75 GiB
- Disk
- 46.32 GiB on
vda2at/ - System
- Ubuntu 24.04.4 LTS, kernel 6.8.0-138-generic, x64, microsoft virtualisation
206 of 212 snapshots included, from to . Each snapshot is one sample window of about ten seconds, taken every thirty minutes.
Excluded and labelled (6)
- — overlaps a harness run of content/guides/genlayer-intelligent-contract.mdx (2026-09-04T20:41:14.113Z to 2026-09-04T20:45:57.737Z, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
- — inside the weekly harness window (Sunday 03:00–05:30 UTC, plus a 5-minute pressure tail)
| Metric | Value | As of | Samples |
|---|---|---|---|
| CPU steal, meanTime the hypervisor gave this VM’s CPU to somebody else. The number this page exists to publish. | 0.00% | 206 | |
| CPU steal, worst sample | 0.05% | 1 | |
| CPU steal, latest sample | 0.00% | 1 | |
| CPU idle, meanHow much of the CPU nothing was using. High is expected on a box with no node running yet. | 84.17% | 206 | |
| CPU idle, lowest sample | 10.46% | 1 | |
| I/O wait, worst sampleCPU time spent waiting on the disk. | 0.20% | 1 | |
| CPU pressure, worst 5-min "some"Share of the last five minutes in which at least one task waited for a CPU it did not get (Linux PSI). | 2.78% | 206 | |
| CPU pressure, worst 5-min "full"Share of the last five minutes in which EVERY runnable task was stalled on it. | 0.00% | 206 | |
| Memory available, lowest sampleThe kernel’s MemAvailable: what a new process could actually get, not "free". | 6.19 GiB of 7.75 GiB | 1 | |
| Memory available, latest sample | 6.41 GiB of 7.75 GiB | 1 | |
| Swap in use, most seen | 524.0 KiB | 1 | |
| Memory pressure, worst 5-min "some"Share of the last five minutes in which at least one task stalled waiting for memory (Linux PSI). | 0.06% | 206 | |
| Memory pressure, worst 5-min "full"Share of the last five minutes in which EVERY runnable task was stalled on it. | 0.05% | 206 | |
| I/O pressure, worst 5-min "some"Share of the last five minutes in which at least one task stalled waiting for the disk (Linux PSI). | 0.01% | 206 | |
| I/O pressure, worst 5-min "full"Share of the last five minutes in which EVERY runnable task was stalled on it. | 0.01% | 206 | |
| Disk write latency, mean over all writesKernel-reported time in writes divided by writes completed, across every sample window that had any. The box’s own real I/O, not a benchmark. | 0.20 ms | 206 (27625 writes) | |
| Disk write latency, worst sample meanA mean over a handful of writes is noisy; the write count is beside it for that reason. | 0.60 ms | 1 (135 writes) | |
| Disk read latency, mean over all reads | 0.15 ms | 133 (5608 reads) | |
| Disk write throughput, busiest sampleWhat the box actually wrote during that 10-second window, not what the disk can do. | 36.3 MiB/s | 1 | |
| Disk read throughput, busiest sample | 4.0 MiB/s | 1 | |
| Disk busy, worst sampleShare of the window with at least one request in flight on the device. | 3.99% | 1 | |
| Uptime, latest sampleDistinct boot ids across the included samples. One means the box did not restart between them. | 4d 20h 40m since 2026-09-04 20:11:39 UTC | 1 boot seen |
Not measured on this box
disk.activeProbe— recorded as unavailable in every included sample. The collector’s reason:not requested — the collector runs it only with --disk-probe
. The synthetic fsync probe is off unless it is asked for. A benchmark beside a syncing node measures its own contention with that node, so the default disk figures above are the box’s real I/O and nothing else.
Rent this plan
These are referral links: renting through one costs you the same and earns this site a commission. Specs and prices belong to Vultr and change, so the links open the current ones rather than repeating a number here.
Or browse everything Vultr sells: Vultr.
What a guide’s Step 1 will show
Step 1 of every guide on this site is where the reader picks a server, and it is the only place a measured number changes a decision. Beside any plan that has been measured here, the guide will carry one dated line — this one — linking back to the box it came from:
Measured — on a Hostinger KVM 1 this site rents, CPU steal averaged 0.69% (worst sample 6.97%) over 301 samples, as of . How it was measured, and what was not.
It appears only for a plan that has been measured, and only once at least one sample has been included. A guide offering a plan this page has not measured shows nothing rather than a number borrowed from a different one.
Related reading
- Best VPS for blockchain nodes — the roundup, with the billing-term arithmetic in the open.
- VPS vs. home hardware for airdrop farming — the same question from the other direction, with no links at all.