Hetzner CX23
Server
-
ProviderHetzner
-
PlanCX23
-
LocationHelsinki DC Park 1
-
vCPU2
-
RAM4 GB
-
Storage40 GB NVMe
-
NetworkUnknown
-
OS imageubuntu-24.04
-
TriggerScheduled
-
Queued atOct 16, 2026, 04:54:00 UTC
CPU
| Version | Single-core | Multi-core | Result link |
|---|---|---|---|
| Geekbench 7 | 597 | 1,104 | Geekbench Browser |
Scores from different Geekbench versions aren't comparable with each other. Charts only use Geekbench 7.
Geekbench 7 workloads
| Workload | Single-core | Multi-core |
|---|---|---|
| File Compression |
676
|
972
|
| Navigation |
713
|
Single-core only |
| HTML5 Browser |
563
|
Single-core only |
| PDF Viewer |
636
|
Single-core only |
| Photo Library |
511
|
1,033
|
| Clang |
596
|
1,164
|
| Text Processing |
446
|
809
|
| Asset Compression |
565
|
1,078
|
| HDR |
634
|
1,242
|
| Photo Editor |
755
|
1,550
|
| Ray Tracer |
555
|
1,124
|
| Structure from Motion |
682
|
Single-core only |
| Game Physics |
489
|
Single-core only |
| Video Encoder |
553
|
Single-core only |
| Audio Encoder |
696
|
Single-core only |
| Video Player |
573
|
Single-core only |
Rank among the 191 runs with Geekbench 7 workload scores. Bars are relative to the best run. Geekbench doesn't run every workload multi-core, so some rows only have a single-core score.
Memory, TLS and scheduler
Memory bandwidth (STREAM)
| Test | Result | Runs | Spread |
|---|---|---|---|
| Copy higher is better | 20 GB/s | 3 | 10.4% |
| Scale higher is better | 14.5 GB/s | 3 | 20.5% |
| Add higher is better | 16.8 GB/s | 3 | 21.4% |
| Triad higher is better | 16.4 GB/s | 3 | 17.8% |
Average of 3 runs. Spread is the standard deviation as a share of the average.
TLS and crypto (OpenSSL)
| Test | Result | Runs | Spread |
|---|---|---|---|
| RSA 4096 signs higher is better | 322/s | 3 | 8.88% |
| RSA 4096 verifies higher is better | 21,358/s | 3 | 3.09% |
| SHA-256 higher is better | 303 MB/s | 3 | 14.7% |
| AES-256-GCM higher is better | 4.52 GB/s | 3 | 6.68% |
| ChaCha20-Poly1305 higher is better | 2.86 GB/s | 3 | 3.28% |
Average of 3 runs. Spread is the standard deviation as a share of the average.
Scheduler latency (schbench)
| Test | Result | Runs | Spread |
|---|---|---|---|
| Request latency, median lower is better | 5.94 ms | 3 | 8.02% |
| Requests per second, 90th percentile higher is better | 325/s | 3 | 1.96% |
| Request latency, 99.9th percentile lower is better | 16.9 ms | 3 | 2.85% |
| Requests per second, average higher is better | 301/s | 3 | 3.06% |
Average of 3 runs. Spread is the standard deviation as a share of the average.
Disk
| Block size | Read | Write | Total |
|---|---|---|---|
| 4K | 78.5 MB/s (20,108 IOPS) | 78.8 MB/s (20,161 IOPS) | 157.3 MB/s (40,269 IOPS) |
| 64K | 859.7 MB/s (13,755 IOPS) | 864.2 MB/s (13,827 IOPS) | 1.68 GB/s (27,582 IOPS) |
| 512K | 1 GB/s (2,052 IOPS) | 1.06 GB/s (2,161 IOPS) | 2.06 GB/s (4,213 IOPS) |
| 1M | 1.07 GB/s (1,099 IOPS) | 1.15 GB/s (1,173 IOPS) | 2.22 GB/s (2,272 IOPS) |
fio random read and write, 50/50, run by YABS against the boot disk.
Network
IPv4 transfer speed
| Target | Protocol | Send | Receive |
|---|---|---|---|
| Clouvider, London, UK (10G) | IPv4 | 5.28 Gbps | 1.5 Gbps |
| Eranium, Amsterdam, NL (100G) | IPv4 | 6.02 Gbps | 2.48 Gbps |
| Leaseweb, Singapore, SG (10G) | IPv4 | 1.13 Gbps | 1.23 Gbps |
| Clouvider, Los Angeles, CA, US (10G) | IPv4 | 1.06 Gbps | 665 Mbps |
| Leaseweb, NYC, NY, US (10G) | IPv4 | 2.21 Gbps | 2.31 Gbps |
Public iperf3 servers vary in capacity and availability. Compare a target only with itself over time.
Datastores
PostgreSQL
fsync speed (pg_test_fsync)
| Method | Operations per second | Time per operation |
|---|---|---|
| One 8 kB write | ||
| open_datasync | 2,873 | 0.348 ms |
| fdatasync | 2,702 | 0.37 ms |
| fsync | 1,213 | 0.825 ms |
| fsync_writethrough | Not supported here | n/a |
| open_sync | 1,357 | 0.737 ms |
| Two 8 kB writes | ||
| open_datasync | 1,457 | 0.686 ms |
| fdatasync | 2,743 | 0.365 ms |
| fsync | 1,170 | 0.855 ms |
| fsync_writethrough | Not supported here | n/a |
| open_sync | 719 | 1.39 ms |
| open_sync at different write sizes | ||
| 1 * 16kB open_sync write | 1,320 | 0.758 ms |
| 2 * 8kB open_sync writes | 670 | 1.49 ms |
| 4 * 4kB open_sync writes | 354 | 2.83 ms |
| 8 * 2kB open_sync writes | 151 | 6.61 ms |
| 16 * 1kB open_sync writes | 76.9 | 13 ms |
| fsync on a non-write descriptor | ||
| write, fsync, close | 1,163 | 0.86 ms |
| write, close, fsync | 1,223 | 0.818 ms |
| Non-synced 8 kB writes | ||
| write | 373,568 | 0.003 ms |
pg_test_fsync against the Docker volume Postgres keeps its data on. fdatasync is Linux's default wal_sync_method.
pgbench at scale 10
| Workload | Clients | Transactions/s | Median | p95 | p99 | p99.9 | Failed |
|---|---|---|---|---|---|---|---|
| Read/write (TPC-B like) | 1 | 669 | 1.37 ms | 2.36 ms | 3.11 ms | 6.39 ms | 0 |
| Read/write (TPC-B like) | 8 | 2,117 | 3.45 ms | 6.54 ms | 9.32 ms | 14.2 ms | 0 |
| Read/write (TPC-B like) | 32 | 2,114 | 11.7 ms | 36.4 ms | 58.8 ms | 98.8 ms | 0 |
| Read only | 1 | 8,501 | 0.104 ms | 0.195 ms | 0.287 ms | 1.01 ms | 0 |
| Read only | 8 | 23,546 | 0.311 ms | 0.539 ms | 0.688 ms | 2.01 ms | 0 |
| Read only | 32 | 22,913 | 1.19 ms | 2.34 ms | 3.14 ms | 5.5 ms | 0 |
Scale 10 (1,000,000 accounts), loaded in 2.73 s. 60 s per run, prepared statements. Latency comes from sampled transaction logs, and p99.9 is left out when fewer than 1,000 were sampled.
pgbench at scale 100
| Workload | Clients | Transactions/s | Median | p95 | p99 | p99.9 | Failed |
|---|---|---|---|---|---|---|---|
| Read/write (TPC-B like) | 1 | 674 | 1.36 ms | 2.31 ms | 3.77 ms | 6.39 ms | 0 |
| Read/write (TPC-B like) | 8 | 2,080 | 3.59 ms | 6.4 ms | 9.48 ms | 13.4 ms | 0 |
| Read/write (TPC-B like) | 32 | 2,328 | 12.8 ms | 22.4 ms | 29.4 ms | 38.8 ms | 0 |
| Read only | 1 | 5,106 | 0.155 ms | 0.403 ms | 0.859 ms | 2.22 ms | 0 |
| Read only | 8 | 19,918 | 0.363 ms | 0.673 ms | 1 ms | 2.41 ms | 0 |
| Read only | 32 | 18,682 | 1.47 ms | 3.09 ms | 4.15 ms | 6.87 ms | 0 |
Scale 100 (10,000,000 accounts), loaded in 26.1 s. 60 s per run, prepared statements. Latency comes from sampled transaction logs, and p99.9 is left out when fewer than 1,000 were sampled.
MySQL
sysbench OLTP
| Workload | Threads | Transactions/s | Queries/s | Median | p95 | p99 | Errors |
|---|---|---|---|---|---|---|---|
| Read/write | 1 | 133 | 2,660 | 6.91 ms | 11.4 ms | 18 ms | 0 |
| Read/write | 8 | 434 | 8,688 | 17.6 ms | 29.2 ms | 38.2 ms | 0 |
| Read/write | 32 | 449 | 8,975 | 69.3 ms | 119 ms | 148 ms | 0 |
| Read only | 1 | 310 | 4,959 | 3.02 ms | 5.57 ms | 7.17 ms | 0 |
| Read only | 8 | 850 | 13,601 | 8.9 ms | 14.7 ms | 18 ms | 0 |
| Read only | 32 | 747 | 11,950 | 41.9 ms | 61.1 ms | 71.8 ms | 0 |
10 tables of 100,000 rows, loaded in 17.7 s. 60 s per run, one connection per thread.
Redis
memtier
| Mix | Operations/s | Hits/s | Median | p99 | p99.9 |
|---|---|---|---|---|---|
| 1:10 set:get | 37,293 | 33,902 | 1.54 ms | 4.42 ms | 7.33 ms |
| 1:1 set:get | 36,864 | 18,432 | 1.54 ms | 4.54 ms | 7.36 ms |
1,000,000 keys of 32 bytes. 64 connections over 2 threads, 60 s per ratio.
Web frameworks
| Framework | Fortunes req/s | Single query req/s | JSON req/s | Fortunes p99 at 256 connections |
|---|---|---|---|---|
| Next.js nextjs | 297 | 1,068 | 1,595 | 1.71 s |
| Express express-postgresjs | 4,440 | 6,448 | 16,473 | 318 ms |
| Fastify fastify-postgres | 4,285 | 6,743 | 19,961 | 173 ms |
| NestJS nestjs | 2,194 | 2,421 | 9,282 | 225 ms |
| Nuxt nuxt | 3,685 | 5,479 | 13,932 | 543 ms |
| FastAPI fastapi | 1,635 | 2,142 | 8,345 | 718 ms |
| Django django-postgresql | 782 | 959 | 2,221 | 631 ms |
| Rails rails | 1,318 | 1,986 | 7,091 | 270 ms |
| Laravel laravel | 348 | 338 | 661 | 856 ms |
| Symfony symfony | 430 | 463 | 1,466 | 700 ms |
Peak requests per second across the 64 and 256 connection levels, measured with wrk. Each test has to pass the TechEmpower response checks first, or it's marked invalid.
Web apps
WooCommerce
Page mix
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 8 virtual users | |||||
| Home page | 0.962 | 1.65 s | 1.88 s | 1.94 s | 0% |
| Shop page | 0.962 | 2.18 s | 2.65 s | 2.68 s | 0% |
| Category page | 0.962 | 1.41 s | 2.23 s | 2.56 s | 0% |
| Product page | 0.962 | 1.47 s | 1.81 s | 1.85 s | 0% |
| Product search | 0.962 | 1.28 s | 1.58 s | 1.71 s | 0% |
| 32 virtual users | |||||
| Home page | 0.935 | 5.3 s | 6.95 s | 7.11 s | 0% |
| Shop page | 0.935 | 7.55 s | 8.86 s | 9.06 s | 0% |
| Category page | 0.935 | 7.03 s | 8.59 s | 9 s | 0% |
| Product page | 0.935 | 6.39 s | 7.11 s | 7.2 s | 0% |
| Product search | 0.935 | 5.8 s | 6.83 s | 6.95 s | 0% |
Cart and checkout
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 8 virtual users | |||||
| Add to cart | 1.58 | 2.08 s | 2.34 s | 2.53 s | 0% |
| Cart | 1.58 | 1.64 s | 2.04 s | 2.14 s | 0% |
| Checkout | 1.58 | 1.21 s | 1.55 s | 1.59 s | 0% |
| 32 virtual users | |||||
| Add to cart | 1.79 | 5.98 s | 7.36 s | 7.74 s | 0% |
| Cart | 1.79 | 6.49 s | 7.2 s | 7.48 s | 0% |
| Checkout | 1.53 | 5.4 s | 6.21 s | 6.38 s | 0% |
k6 with a fixed number of virtual users, 63 to 71 s per level. The error rate counts responses that weren't a 200.
Discourse
Signed in
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 1 virtual user | |||||
| Topic page | 0.746 | 582 ms | 871 ms | 1.13 s | 0% |
| Topic JSON | 0.389 | 296 ms | 334 ms | 335 ms | 0% |
| Home page | 0.389 | 516 ms | 640 ms | 679 ms | 0% |
| Categories page | 0.195 | 599 ms | 734 ms | 736 ms | 0% |
| User activity page | 0.178 | 372 ms | 452 ms | 469 ms | 0% |
| 4 virtual users | |||||
| Topic page | 1.36 | 1.21 s | 1.72 s | 2.48 s | 0% |
| Topic JSON | 0.673 | 667 ms | 809 ms | 964 ms | 0% |
| Home page | 0.673 | 1.13 s | 1.5 s | 1.62 s | 0% |
| Categories page | 0.369 | 1.33 s | 1.71 s | 1.97 s | 0% |
| User activity page | 0.337 | 809 ms | 1.74 s | 1.86 s | 0% |
| 16 virtual users | |||||
| Topic page | 1.23 | 2.57 s | 3.11 s | 4.16 s | 0% |
| Topic JSON | 0.649 | 1.96 s | 2.39 s | 2.57 s | 0% |
| Home page | 0.633 | 2.37 s | 2.98 s | 3.2 s | 0% |
| Categories page | 0.301 | 2.65 s | 3.06 s | 3.07 s | 0% |
| User activity page | 0.301 | 2 s | 2.45 s | 2.5 s | 0% |
Anonymous
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 16 virtual users | |||||
| Topic page | 27.9 | 148 ms | 401 ms | 619 ms | 0.118% |
| Topic JSON | 14 | 146 ms | 380 ms | 740 ms | 0.235% |
| Home page | 14 | 148 ms | 413 ms | 833 ms | 0% |
| Categories page | 7.01 | 155 ms | 454 ms | 900 ms | 0.235% |
| User activity page | 7.01 | 496 ms | 910 ms | 1.17 s | 0.235% |
k6 with a fixed number of virtual users, 61 to 63 s per level, after a 23 s warmup. The error rate counts responses that weren't a 200. Discourse ran with 4 app workers and 1024 MB of Postgres shared buffers, what its installer picks for a 4 GB box. It added a 2 GB swapfile first, the way its installer does, and didn't need it. The container peaked at 2,189 MB.
Ghost
Readers
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 1 virtual user | |||||
| Home page | 3.36 | 90.3 ms | 109 ms | 125 ms | 0% |
| Post page | 8.39 | 43.8 ms | 58.2 ms | 67.2 ms | 0% |
| Tag page | 1.68 | 56.2 ms | 73.3 ms | 96.5 ms | 0% |
| Author page | 1.68 | 59.1 ms | 73.6 ms | 90.8 ms | 0% |
| RSS feed | 1.66 | 67 ms | 85.6 ms | 98.4 ms | 0% |
| 4 virtual users | |||||
| Home page | 4.32 | 253 ms | 339 ms | 443 ms | 0% |
| Post page | 10.8 | 167 ms | 237 ms | 267 ms | 0% |
| Tag page | 2.18 | 152 ms | 215 ms | 233 ms | 0% |
| Author page | 2.14 | 166 ms | 223 ms | 267 ms | 0% |
| RSS feed | 2.14 | 159 ms | 238 ms | 289 ms | 0% |
| 16 virtual users | |||||
| Home page | 4.43 | 936 ms | 1.12 s | 1.22 s | 0% |
| Post page | 11 | 754 ms | 949 ms | 1.06 s | 0% |
| Tag page | 2.21 | 497 ms | 673 ms | 744 ms | 0% |
| Author page | 2.21 | 516 ms | 649 ms | 676 ms | 0% |
| RSS feed | 2.2 | 521 ms | 739 ms | 822 ms | 0% |
Staff in Ghost Admin
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 1 virtual user | |||||
| Post list | 1.87 | 77.6 ms | 98.3 ms | 120 ms | 0% |
| Post editor | 5.65 | 31.6 ms | 44.5 ms | 53.8 ms | 0% |
| Saving a draft | 5.65 | 79 ms | 99.3 ms | 114 ms | 0% |
| Member list | 1.87 | 95.5 ms | 133 ms | 149 ms | 0% |
| 4 virtual users | |||||
| Post list | 2.4 | 106 ms | 143 ms | 161 ms | 0% |
| Post editor | 7.31 | 52.3 ms | 76.4 ms | 93.3 ms | 0% |
| Saving a draft | 7.34 | 398 ms | 521 ms | 588 ms | 0% |
| Member list | 2.45 | 117 ms | 154 ms | 246 ms | 0% |
k6 with a fixed number of virtual users, 60 to 61 s per level, after a 20 s warmup. The error rate counts responses that weren't a 200. Ghost ran the way its ghost-docker setup runs it: one Node process, and MySQL with its stock 128 MB buffer pool. Memory peaked with Ghost at 285 MB and MySQL at 619 MB.
Wagtail
Visitors
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 1 virtual user | |||||
| Home page | 0.594 | 219 ms | 246 ms | 262 ms | 0% |
| Blog index | 0.594 | 794 ms | 862 ms | 863 ms | 0% |
| Blog post | 1.75 | 70.3 ms | 98.1 ms | 116 ms | 0% |
| Bread page | 1.76 | 77.7 ms | 93 ms | 97.2 ms | 0% |
| Location page | 0.594 | 72.6 ms | 83.5 ms | 89.5 ms | 0% |
| Site search | 0.577 | 123 ms | 205 ms | 220 ms | 0% |
| 4 virtual users | |||||
| Home page | 1.13 | 498 ms | 835 ms | 903 ms | 0% |
| Blog index | 1.16 | 1.49 s | 2.4 s | 2.6 s | 0% |
| Blog post | 3.39 | 142 ms | 249 ms | 327 ms | 0% |
| Bread page | 3.44 | 165 ms | 245 ms | 301 ms | 0% |
| Location page | 1.18 | 142 ms | 225 ms | 258 ms | 0% |
| Site search | 1.11 | 223 ms | 461 ms | 708 ms | 0% |
| 16 virtual users | |||||
| Home page | 1.33 | 1.36 s | 1.72 s | 1.89 s | 0% |
| Blog index | 1.39 | 3.47 s | 3.91 s | 4.09 s | 0% |
| Blog post | 4 | 788 ms | 1.17 s | 1.27 s | 0% |
| Bread page | 4.08 | 805 ms | 1.14 s | 1.28 s | 0% |
| Location page | 1.38 | 830 ms | 1.09 s | 1.27 s | 0% |
| Site search | 1.31 | 954 ms | 1.35 s | 1.49 s | 0% |
Editors in the Wagtail admin
| Step | Requests/s | Median | p95 | p99 | Error rate |
|---|---|---|---|---|---|
| 1 virtual user | |||||
| Admin dashboard | 0.243 | 228 ms | 318 ms | 405 ms | 0% |
| Page explorer | 0.519 | 892 ms | 1.08 s | 1.17 s | 0% |
| Page editor | 0.779 | 402 ms | 531 ms | 633 ms | 0% |
| Image library | 0.26 | 161 ms | 621 ms | 1.64 s | 0% |
| Admin page search | 0.243 | 95 ms | 221 ms | 245 ms | 0% |
| 4 virtual users | |||||
| Admin dashboard | 0.417 | 504 ms | 1.01 s | 1.1 s | 0% |
| Page explorer | 0.867 | 2.03 s | 3.66 s | 3.81 s | 0% |
| Page editor | 1.32 | 949 ms | 1.73 s | 1.8 s | 0% |
| Image library | 0.433 | 399 ms | 1.07 s | 1.33 s | 0% |
| Admin page search | 0.417 | 244 ms | 765 ms | 837 ms | 0% |
k6 with a fixed number of virtual users, 61 to 62 s per level, after a 21 s warmup. The error rate counts responses that weren't a 200. Wagtail ran the way bakerydemo ships it: uWSGI with 2 workers of 4 threads each, whatever the box, and Postgres and Redis on stock settings. Memory peaked with Wagtail at 289 MB, Postgres at 155 MB, and Redis at 26 MB.
Advertised vs. measured
| Spec | Advertised | Measured |
|---|---|---|
| vCPU | 2 | 2 |
| CPU | Shared vCPU | 0% of busy CPU time stolen |
| RAM | 4 GB | 3.7 GiB |
| Storage | 40 GB NVMe | 37.5 GiB |
| Architecture | x86_64 | x86_64 |
| Virtualization | KVM | KVM |
Guests usually report slightly less RAM and disk than advertised because of kernel reservations and filesystem overhead.
Detected hardware
- CPU model
- Intel Xeon Processor (Skylake, IBRS, no TSX)
- CPU cores
- 2
- CPU frequency
- 2095 MHz
- AES-NI
- Yes
- VM-x/AMD-V
- No
- RAM reported
- 3.7 GiB
- Swap reported
- 0 MiB
- Disk reported
- 37.5 GiB
- Virtualization reported
- KVM
- CPU steal
- 0% of busy CPU time stolen
- Distro
- Ubuntu 24.04.4 LTS
- Kernel
- 6.8.0-138-generic
- Architecture
- x86_64
- IPv4 reachable
- Yes
- IPv6 reachable
- Yes
Advertised at test time
- Plan
- CX23
- Product line
- cost_optimized
- Location
- Helsinki DC Park 1
- vCPU
- 2 shared vCPU
- Architecture
- x86_64
- RAM
- 4 GB
- Storage
- 40 GB NVMe
- Virtualization
- KVM
- Network
- Unknown
- Transfer
- 21.99 TB
- Port 25
- On request
- Monthly price at test time
- $6.49
- Hourly price at test time
- $0.010
- YABS version
- v2026-09-20
- Ran at
- Oct 16, 2026, 04:55:07 UTC
- Parser version
- 5
Run timeline
- Queued
- Oct 16, 2026, 04:54:00 UTC
- Server created
- Oct 16, 2026, 04:54:55 UTC
- First update from the server
- Oct 16, 2026, 04:54:55 UTC
- Completed
- Oct 16, 2026, 06:51:12 UTC
- Server deleted
- Oct 16, 2026, 06:51:12 UTC
- Cost of this run
- $0.020
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading details
Loading output.
This party closed at . It's read only now.
Reconnecting. Hang tight.