Don’t trust us. Watch the graphs.
One Dell R640, four ways to slice it: bare metal, our Virtual Node, a VDS and a VPS. Every result comes from the same open script, and you can run it on your own server.
36%
faster than a VPS on average, under realistic load.
Up to 92% on Redis · 29% faster than a VDS
0.25%
CPU steal at the 99th percentile, realistic load.
VPS: 7.76% · VDS: 4.06%
42 µs
Scheduler wake-up at the 99.99th percentile, realistic load.
VPS: 2,414 µs · VDS: 111 µs
Same hardware. Very different results.
CPU steal, 99th percentile
share of time the hypervisor took the core away · lower is better
Virtual Node: 97% lower than a VPS
Scheduler wake-up, 99.99th percentile
microseconds · lower is better
Virtual Node: 98% lower than a VPS
Scheduler wake-up, median (p50)
microseconds, typical response · lower is better
Virtual Node: 62% lower than a VPS
Redis GET
operations per second · higher is better
Virtual Node: 92% more than a VPS
PostgreSQL read/write
pgbench, transactions per second · higher is better
Virtual Node: 23% more than a VPS
PostgreSQL read-only
pgbench, transactions per second · higher is better
Virtual Node: 16% more than a VPS
HTTP throughput
requests per second · higher is better
Virtual Node: 17% more than a VPS
Linux kernel build
wall-clock seconds · lower is better
Virtual Node: 11% lower than a VPS
Why a VPS can win on an idle host
A VPS’s 8 vCPUs are threads the hypervisor can place on any free core. On an empty host they often land on 8 different physical cores, while a Virtual Node always runs on its 4 dedicated cores with 2 threads each. Once the host is under realistic load, those spare cores are gone, and the VPS falls behind.
Every result, both load levels
| Test | Host | Bare metal | Virtual Node | VDS | VPS |
|---|---|---|---|---|---|
| CPU steal, 99th percentile (less is better) | Idle host | 0% | 0% | 3.58% | 0.13% |
| Realistic load | — | 0.25% | 4.06% | 7.76% | |
| Scheduler wake-up, 99.99th percentile (less is better) | Idle host | 18.4 µs | 28.3 µs | 80.8 µs | 113.8 µs |
| Realistic load | — | 41.7 µs | 111.3 µs | 2,414 µs | |
| Scheduler wake-up, median (p50) (less is better) | Idle host | 9.0 µs | 9.3 µs | 26.6 µs | 21.6 µs |
| Realistic load | — | 11.1 µs | 32.0 µs | 29.0 µs | |
| Redis GET (more is better) | Idle host | 93,604 ops/s | 80,235 ops/s | 62,709 ops/s | 63,884 ops/s |
| Realistic load | — | 62,086 ops/s | 38,551 ops/s | 32,324 ops/s | |
| PostgreSQL read/write (more is better) | Idle host | 11,854 tx/s | 8,971 tx/s | 6,695 tx/s | 9,365 tx/s |
| Realistic load | — | 6,934 tx/s | 5,219 tx/s | 5,619 tx/s | |
| PostgreSQL read-only (more is better) | Idle host | 85,573 tx/s | 72,549 tx/s | 60,726 tx/s | 77,977 tx/s |
| Realistic load | — | 53,309 tx/s | 46,873 tx/s | 45,809 tx/s | |
| HTTP throughput (more is better) | Idle host | 185,841 req/s | 160,086 req/s | 145,837 req/s | 186,905 req/s |
| Realistic load | — | 124,206 req/s | 112,478 req/s | 106,174 req/s | |
| Linux kernel build (less is better) | Idle host | 333.8 s | 349.5 s | 365.3 s | 244.6 s |
| Realistic load | — | 466.1 s | 523.5 s | 525.6 s |
How we tested.
Each platform runs on the same physical server, measured on an idle host and on a host under realistic load. Realistic load means other tenants running on the same host, because no VPS provider gives you a whole chassis for one VPS. Bare metal is the reference.
There’s no secret technology behind these numbers. We use the same open tools as everyone else, run them with discipline, and show our work. That’s why we publish the script: you can check every result yourself.
- Hardware
- Dell R640, dual Xeon Gold 6138, 256GB DDR4 @ 2400MHz
- Allocation
- 4 cores / 8 threads for bare metal, VN and VDS. “8 vCPU” for VPS.
- Baseline
- Bare metal measured on an idle host, only the 4 cores / 8 threads tested.
- Speed-up figure
- Mean of PostgreSQL, MariaDB, Redis, HTTP and single-thread CPU results, Virtual Node vs VPS.
- CPU steal
- CPU steal, 99th percentile: share of time the hypervisor took the core away. Lower is better.
- Scheduler wake-up
- Scheduler wake-up, 99.99th percentile: microseconds. Lower is better.
- Typical wake-up
- Scheduler wake-up, median (p50): how long a woken-up task waits for the processor in a typical moment. Lower is better.
- Redis GET
- Redis GET: operations per second. Higher is better.
- PostgreSQL read/write
- PostgreSQL read/write: pgbench, transactions per second. Higher is better.
- PostgreSQL read-only
- PostgreSQL read-only: pgbench, transactions per second. Higher is better.
- HTTP throughput
- HTTP throughput: requests per second. Higher is better.
- Linux kernel build
- Linux kernel build: wall-clock seconds. Lower is better.
Test your current server. Then compare.
Debian 13, runs as root, takes about three hours. Installs what it needs, writes an HTML report plus the raw output of every test. Works on any server, including someone else’s.
We’ll compare it with a Virtual Node for you, at no cost.