# UpCloud Premium 2 vCPU / 2 GB

[New York #1](https://rackcensus.com/locations/new-york-vps-benchmarks "Every provider in New York")

Benchmark complete

Finished Oct 17, 2026

Geekbench 7 single-core

Skipped

Median here: 1,886 over 2 runs in 90 days

Geekbench 7 multi-core

Skipped

Disk 4K IOPS

56,290

fio random read and write, 50/50

Median here: 41,759 over 2 runs in 90 days

Monthly price at test time

€18.00 EUR

Same price today

## Server

[UpCloud](https://rackcensus.com/vps-providers/upcloud-benchmarks)[Premium 2 vCPU / 2 GB](https://rackcensus.com/plans/o8ye99-upcloud-premium-2-vcpu-2-gb-benchmarks?location=us-nyc1)

-

Provider

UpCloud

-

Plan

Premium 2 vCPU / 2 GB

-

Location

New York #1

-

vCPU

2

-

RAM

2 GB

-

Storage

50 GB NVMe

-

Network

Unknown

-

OS image

01000000-0000-4000-8000-000030240200

-

Trigger

Scheduled

-

Queued at

Oct 16, 2026, 23:21:00 UTC

[Visit UpCloud](https://rackcensus.com/go/upcloud)

Referral link. If you sign up through it, I may get paid. [How this works](https://rackcensus.com/transparency#referrals-heading)

## Latest runs of this plan

- [Chicago #1 Oct 17, 2026](https://rackcensus.com/benchmarks/akwvyz-upcloud-premium-2-vcpu-2-gb-us-chi1-benchmark)2,463
- [San Jose #1 Oct 16, 2026](https://rackcensus.com/benchmarks/a8uvdy-upcloud-premium-2-vcpu-2-gb-us-sjo1-benchmark)1,876
- [New York #1 Oct 10, 2026](https://rackcensus.com/benchmarks/u2lqeo-upcloud-premium-2-vcpu-2-gb-us-nyc1-benchmark)1,886

[Full history of this plan](https://rackcensus.com/plans/o8ye99-upcloud-premium-2-vcpu-2-gb-benchmarks/history)

## CPU

Geekbench was skipped because this server didn't have the free memory for the multi-core run and couldn't run single-core only either. The run log has the details.

## Memory, TLS and scheduler

### Memory bandwidth (STREAM)

| Test | Result | Runs | Spread |
| --- | --- | --- | --- |
| Copy higher is better | 68.9 GB/s | 3 | 7.59% |
| Scale higher is better | 58.9 GB/s | 3 | 13.7% |
| Add higher is better | 63.6 GB/s | 3 | 8.65% |
| Triad higher is better | 64.4 GB/s | 3 | 9.97% |

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 | 1,618/s | 3 | 1.76% |
| RSA 4096 verifies higher is better | 44,129/s | 3 | 1.72% |
| SHA-256 higher is better | 2.34 GB/s | 3 | 1.17% |
| AES-256-GCM higher is better | 38.5 GB/s | 3 | 2.38% |
| ChaCha20-Poly1305 higher is better | 10.7 GB/s | 3 | 1.8% |

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 | 3.27 ms | 3 | 1.53% |
| Requests per second, 90th percentile higher is better | 616/s | 3 | 3.25% |
| Request latency, 99.9th percentile lower is better | 6.29 ms | 3 | 12.8% |
| Requests per second, average higher is better | 561/s | 3 | 6.55% |

Average of 3 runs. Spread is the standard deviation as a share of the average.

## Disk

| Block size | Read | Write | Total |
| --- | --- | --- | --- |
| 4K | 109.8 MB/s (28,108 IOPS) | 110.1 MB/s (28,182 IOPS) | 219.9 MB/s (56,290 IOPS) |
| 64K | 377.1 MB/s (6,034 IOPS) | 379.1 MB/s (6,066 IOPS) | 756.3 MB/s (12,100 IOPS) |
| 512K | 382.8 MB/s (765 IOPS) | 403.2 MB/s (806 IOPS) | 786 MB/s (1,571 IOPS) |
| 1M | 378.2 MB/s (378 IOPS) | 403.4 MB/s (403 IOPS) | 781.7 MB/s (781 IOPS) |

fio random read and write, 50/50, run by YABS against the boot disk.

## Network

iperf3 didn't report network results for this run.

## Datastores

### PostgreSQL

#### fsync speed (pg\_test\_fsync)

| Method | Operations per second | Time per operation |
| --- | --- | --- |
| One 8 kB write |
| --- |
| open\_datasync | 7,158 | 0.14 ms |
| fdatasync | 6,673 | 0.15 ms |
| fsync | 4,368 | 0.229 ms |
| fsync\_writethrough | Not supported here | n/a |
| open\_sync | 4,342 | 0.23 ms |
| Two 8 kB writes |
| --- |
| open\_datasync | 2,787 | 0.359 ms |
| fdatasync | 5,767 | 0.173 ms |
| fsync | 3,239 | 0.309 ms |
| fsync\_writethrough | Not supported here | n/a |
| open\_sync | 1,757 | 0.569 ms |
| open\_sync at different write sizes |
| --- |
| 1 \* 16kB open\_sync write | 3,304 | 0.303 ms |
| 2 \* 8kB open\_sync writes | 2,065 | 0.484 ms |
| 4 \* 4kB open\_sync writes | 1,076 | 0.93 ms |
| 8 \* 2kB open\_sync writes | 566 | 1.77 ms |
| 16 \* 1kB open\_sync writes | 279 | 3.58 ms |
| fsync on a non-write descriptor |
| --- |
| write, fsync, close | 4,596 | 0.218 ms |
| write, close, fsync | 5,065 | 0.197 ms |
| Non-synced 8 kB writes |
| --- |
| write | 2,670,081 | 0 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 | 3,538 | 0.238 ms | 0.374 ms | 0.775 ms | 7.81 ms | 0 |
| Read/write (TPC-B like) | 8 | 10,823 | 0.593 ms | 1.36 ms | 2.48 ms | 13.6 ms | 0 |
| Read/write (TPC-B like) | 32 | 9,937 | 2.23 ms | 8.3 ms | 16.7 ms | 45.2 ms | 0 |
| Read only | 1 | 65,718 | 0.014 ms | 0.023 ms | 0.033 ms | 0.076 ms | 0 |
| Read only | 8 | 120,345 | 0.059 ms | 0.104 ms | 0.135 ms | 0.223 ms | 0 |
| Read only | 32 | 108,542 | 0.247 ms | 0.431 ms | 0.56 ms | 0.984 ms | 0 |

Scale 10 (1,000,000 accounts), loaded in 0.87 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 | 2,241 | 0.353 ms | 0.584 ms | 1.67 ms | 18.1 ms | 0 |
| Read/write (TPC-B like) | 8 | 7,372 | 0.728 ms | 2.09 ms | 5.79 ms | 66.8 ms | 0 |
| Read/write (TPC-B like) | 32 | 8,641 | 2.54 ms | 6.68 ms | 35.6 ms | 75.3 ms | 0 |
| Read only | 1 | 20,221 | 0.021 ms | 0.108 ms | 0.192 ms | 0.846 ms | 0 |
| Read only | 8 | 83,027 | 0.068 ms | 0.209 ms | 0.33 ms | 2.05 ms | 0 |
| Read only | 32 | 78,864 | 0.317 ms | 0.72 ms | 1.4 ms | 10 ms | 0 |

Scale 100 (10,000,000 accounts), loaded in 13.7 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 | 515 | 10,308 | 1.55 ms | 2.71 ms | 8.13 ms | 0 |
| Read/write | 8 | 1,143 | 22,854 | 5.77 ms | 12.3 ms | 40.4 ms | 0 |
| Read/write | 32 | 1,662 | 33,245 | 17 ms | 36.2 ms | 70.5 ms | 0 |
| Read only | 1 | 2,217 | 35,476 | 0.424 ms | 0.619 ms | 0.856 ms | 0 |
| Read only | 8 | 4,340 | 69,440 | 1.76 ms | 2.76 ms | 3.68 ms | 0 |
| Read only | 32 | 3,419 | 54,709 | 8.9 ms | 13.5 ms | 16.4 ms | 0 |

10 tables of 100,000 rows, loaded in 6.1 s. 60 s per run, one connection per thread.

### Redis

#### memtier

| Mix | Operations/s | Hits/s | Median | p99 | p99.9 |
| --- | --- | --- | --- | --- | --- |
| 1:10 set:get | 197,719 | 179,744 | 0.175 ms | 2.26 ms | 3.76 ms |
| 1:1 set:get | 200,459 | 100,229 | 0.175 ms | 2.26 ms | 3.5 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 | 521 | 2,402 | 3,067 | 660 ms |
| Express express-postgresjs | 8,817 | 15,622 | 92,348 | 171 ms |
| Fastify fastify-postgres | 9,131 | 16,031 | 115,491 | 71.1 ms |
| NestJS nestjs | 9,821 | 10,535 | 59,504 | 75.5 ms |
| Nuxt nuxt | 8,308 | 14,005 | 73,693 | 170 ms |
| FastAPI fastapi | 6,990 | 7,951 | 35,038 | 171 ms |
| Django django-postgresql | 2,893 | 3,204 | 9,899 | 131 ms |
| Rails rails | 4,706 | 7,618 | 36,131 | 79.7 ms |
| Laravel laravel | 939 | 1,054 | 2,130 | 399 ms |
| Symfony symfony | 1,326 | 1,494 | 5,232 | 229 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 | 2.43 | 654 ms | 799 ms | 881 ms | 0% |
| Shop page | 2.43 | 899 ms | 1.11 s | 1.18 s | 0% |
| Category page | 2.43 | 566 ms | 909 ms | 1.08 s | 0% |
| Product page | 2.43 | 608 ms | 733 ms | 770 ms | 0% |
| Product search | 2.43 | 511 ms | 640 ms | 701 ms | 0% |
| 32 virtual users |
| --- |
| Home page | 2.46 | 2.36 s | 2.62 s | 2.72 s | 0% |
| Shop page | 2.46 | 3.04 s | 3.74 s | 3.96 s | 0% |
| Category page | 2.46 | 2.8 s | 3.49 s | 3.74 s | 0% |
| Product page | 2.46 | 2.39 s | 2.73 s | 2.82 s | 0% |
| Product search | 2.46 | 2.22 s | 2.42 s | 2.47 s | 0% |

#### Cart and checkout

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 8 virtual users |
| --- |
| Add to cart | 4.8 | 706 ms | 834 ms | 1.02 s | 0% |
| Cart | 4.8 | 552 ms | 661 ms | 751 ms | 0% |
| Checkout | 4.8 | 421 ms | 508 ms | 542 ms | 0% |
| 32 virtual users |
| --- |
| Add to cart | 4.91 | 2.31 s | 2.88 s | 2.98 s | 0% |
| Cart | 4.91 | 2.38 s | 2.74 s | 2.83 s | 0% |
| Checkout | 4.91 | 1.78 s | 2.14 s | 2.24 s | 0% |

k6 with a fixed number of virtual users, 61 to 65 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 | 2.87 | 152 ms | 197 ms | 347 ms | 0% |
| Topic JSON | 1.43 | 78.9 ms | 99.8 ms | 143 ms | 0% |
| Home page | 1.43 | 133 ms | 192 ms | 441 ms | 0% |
| Categories page | 0.726 | 159 ms | 244 ms | 349 ms | 0% |
| User activity page | 0.709 | 95.6 ms | 144 ms | 258 ms | 0% |
| 4 virtual users |
| --- |
| Topic page | 5.04 | 333 ms | 499 ms | 640 ms | 0% |
| Topic JSON | 2.51 | 236 ms | 351 ms | 458 ms | 0% |
| Home page | 2.53 | 302 ms | 402 ms | 636 ms | 0% |
| Categories page | 1.27 | 349 ms | 671 ms | 783 ms | 0% |
| User activity page | 1.26 | 247 ms | 509 ms | 648 ms | 0% |
| 16 virtual users |
| --- |
| Topic page | 5.35 | 1.17 s | 1.46 s | 1.57 s | 0% |
| Topic JSON | 2.72 | 1.09 s | 1.37 s | 1.46 s | 0% |
| Home page | 2.67 | 1.17 s | 1.48 s | 1.57 s | 0% |
| Categories page | 1.33 | 1.14 s | 1.47 s | 1.55 s | 0% |
| User activity page | 1.33 | 1.15 s | 1.4 s | 1.51 s | 0% |

#### Anonymous

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 16 virtual users |
| --- |
| Topic page | 112 | 49.6 ms | 107 ms | 144 ms | 0% |
| Topic JSON | 56.2 | 51.8 ms | 104 ms | 145 ms | 0% |
| Home page | 56.1 | 49.8 ms | 107 ms | 149 ms | 0% |
| Categories page | 28.1 | 53.4 ms | 110 ms | 154 ms | 0% |
| User activity page | 28.1 | 90 ms | 163 ms | 219 ms | 0% |

k6 with a fixed number of virtual users, 60 to 61 s per level, after a 21 s warmup. The error rate counts responses that weren't a 200. Discourse ran with 2 app workers and 128 MB of Postgres shared buffers, what its installer picks for a 1 GB box. It added a 2 GB swapfile first, the way its installer does, and used up to 269 MB of it. The container peaked at 1,319 MB.

### Ghost

#### Readers

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Home page | 10.4 | 27.2 ms | 33.3 ms | 43.2 ms | 0% |
| Post page | 25.9 | 15.6 ms | 20.3 ms | 26.6 ms | 0% |
| Tag page | 5.18 | 17.3 ms | 22.1 ms | 24.5 ms | 0% |
| Author page | 5.16 | 18.1 ms | 23.7 ms | 33 ms | 0% |
| RSS feed | 5.16 | 19 ms | 24.2 ms | 30.6 ms | 0% |
| 4 virtual users |
| --- |
| Home page | 13.6 | 76.4 ms | 110 ms | 140 ms | 0% |
| Post page | 33.9 | 54.6 ms | 80.7 ms | 107 ms | 0% |
| Tag page | 6.78 | 45.5 ms | 71.7 ms | 91.9 ms | 0% |
| Author page | 6.76 | 48.9 ms | 72 ms | 88 ms | 0% |
| RSS feed | 6.76 | 48.9 ms | 71.3 ms | 90 ms | 0% |
| 16 virtual users |
| --- |
| Home page | 14 | 284 ms | 373 ms | 417 ms | 0% |
| Post page | 35.1 | 237 ms | 321 ms | 355 ms | 0% |
| Tag page | 7.03 | 153 ms | 222 ms | 243 ms | 0% |
| Author page | 7.05 | 152 ms | 219 ms | 250 ms | 0% |
| RSS feed | 7 | 161 ms | 232 ms | 259 ms | 0% |

#### Staff in Ghost Admin

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Post list | 5.66 | 22.3 ms | 33.2 ms | 47.9 ms | 0% |
| Post editor | 17 | 10.7 ms | 16 ms | 22.5 ms | 0% |
| Saving a draft | 17 | 25.9 ms | 52.3 ms | 89.3 ms | 0% |
| Member list | 5.66 | 25.7 ms | 34.5 ms | 43.6 ms | 0% |
| 4 virtual users |
| --- |
| Post list | 7.45 | 28.4 ms | 38.7 ms | 46.8 ms | 0% |
| Post editor | 22.4 | 15.6 ms | 24 ms | 34.4 ms | 0% |
| Saving a draft | 22.4 | 132 ms | 200 ms | 252 ms | 0% |
| Member list | 7.47 | 34.6 ms | 48.5 ms | 78.8 ms | 0% |

k6 with a fixed number of virtual users, 60 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 370 MB and MySQL at 585 MB.

### Wagtail

#### Visitors

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Home page | 2.38 | 57.5 ms | 75.7 ms | 83.5 ms | 0% |
| Blog index | 2.38 | 170 ms | 218 ms | 278 ms | 0% |
| Blog post | 7.1 | 19.3 ms | 30.7 ms | 34.8 ms | 0% |
| Bread page | 7.11 | 21.3 ms | 26.9 ms | 29.3 ms | 0% |
| Location page | 2.38 | 19.7 ms | 25.4 ms | 26.7 ms | 0% |
| Site search | 2.36 | 35.3 ms | 63.4 ms | 71.8 ms | 0% |
| 4 virtual users |
| --- |
| Home page | 3.62 | 153 ms | 229 ms | 281 ms | 0% |
| Blog index | 3.67 | 509 ms | 709 ms | 771 ms | 0% |
| Blog post | 10.9 | 45.1 ms | 83.7 ms | 96.3 ms | 0% |
| Bread page | 10.9 | 49.6 ms | 76.1 ms | 99.4 ms | 0% |
| Location page | 3.67 | 48.8 ms | 73.2 ms | 80.1 ms | 0% |
| Site search | 3.62 | 70.9 ms | 154 ms | 223 ms | 0% |
| 16 virtual users |
| --- |
| Home page | 3.93 | 465 ms | 645 ms | 800 ms | 0% |
| Blog index | 3.99 | 1.13 s | 1.42 s | 1.65 s | 0% |
| Blog post | 11.8 | 269 ms | 420 ms | 509 ms | 0% |
| Bread page | 11.8 | 283 ms | 450 ms | 543 ms | 0% |
| Location page | 3.98 | 273 ms | 471 ms | 517 ms | 0% |
| Site search | 3.91 | 349 ms | 520 ms | 607 ms | 0% |

#### Editors in the Wagtail admin

| Step | Requests/s | Median | p95 | p99 | Error rate |
| --- | --- | --- | --- | --- | --- |
| 1 virtual user |
| --- |
| Admin dashboard | 1.04 | 66.3 ms | 80 ms | 123 ms | 0% |
| Page explorer | 2.12 | 213 ms | 289 ms | 432 ms | 0% |
| Page editor | 3.15 | 108 ms | 139 ms | 204 ms | 0% |
| Image library | 1.04 | 42.3 ms | 53.9 ms | 296 ms | 0% |
| Admin page search | 1.04 | 28.7 ms | 60.9 ms | 169 ms | 0% |
| 4 virtual users |
| --- |
| Admin dashboard | 1.48 | 198 ms | 408 ms | 511 ms | 0% |
| Page explorer | 3.04 | 637 ms | 1.02 s | 1.13 s | 0% |
| Page editor | 4.52 | 265 ms | 551 ms | 716 ms | 0% |
| Image library | 1.5 | 145 ms | 427 ms | 561 ms | 0% |
| Admin page search | 1.48 | 78.4 ms | 216 ms | 283 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. 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 304 MB, Postgres at 173 MB, and Redis at 26 MB.

## Advertised vs. measured

| Spec | Advertised | Measured |
| --- | --- | --- |
| vCPU | 2 | 2 |
| CPU | Shared vCPU | 1.5% of busy CPU time stolen |
| RAM | 2 GB | 1.8 GiB |
| Storage | 50 GB NVMe | 49.1 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:** AMD EPYC 9575F 64-Core Processor

**CPU cores:** 2

**CPU frequency:** 3295 MHz

**AES-NI:** Yes

**VM-x/AMD-V:** No

**RAM reported:** 1.8 GiB

**Swap reported:** 0 MiB

**Disk reported:** 49.1 GiB

**Virtualization reported:** KVM

**CPU steal:** 1.5% of busy CPU time stolen

**Distro:** Ubuntu 24.04.4 LTS

**Kernel:** 6.8.0-137-generic

**Architecture:** x86\_64

**IPv4 reachable:** Yes

**IPv6 reachable:** Yes

## Advertised at test time

**Plan:** Premium 2 vCPU / 2 GB

**Product line:** Premium

**Location:** New York #1

**vCPU:** 2 shared vCPU

**Architecture:** x86\_64

**RAM:** 2 GB

**Storage:** 50 GB NVMe

**Virtualization:** KVM

**Network:** Unknown

**Transfer:** 2.05 TB

**Port 25:** Unknown

**Monthly price at test time:** €18.00 EUR

**Hourly price at test time:** €0.027 EUR

**YABS version:** v2026-09-20

**Ran at:** Oct 16, 2026, 23:22:32 UTC

**Parser version:** 5

## Run timeline

**Queued:** Oct 16, 2026, 23:21:00 UTC

**First update from the server:** Oct 16, 2026, 23:22:17 UTC

**Completed:** Oct 17, 2026, 00:42:01 UTC

**Server deleted:** Oct 17, 2026, 00:42:01 UTC

**Cost of this run:** €0.036 EUR

Tests 36 of 36 done Live output 732 lines

Setup 2 cores, 1.8 GiB RAM 4 of 4Done

Disk (fio) 231 MB/s at 4k, 820 MB/s at 1m 5 of 5Done

Geekbench 7, single-core 0 of 0Skipped

Phoronix (memory, TLS, scheduler) 3 of 3Done

Datastores 5 of 5Done

Web frameworks 10 of 10Done

Web apps 8 of 8Done

Finish Results saved 1 of 1Done

Watch party 0 watching

This party closed at 01:42 UTC. It's read only now.

## Watch party

Loading the party
