Switching things up a bit for Spooktober (doot doot) by running some benchmarks
on the CPU-centric plans. Unfortunately, Lightsail and UpCloud are lacking this
sort of offering, so they are omitted this month.
It’s also worth noting that even though all of the plans are touting a dedicate
CPU, it’s not nearly as cut and dry of a comparison as the shared plans are.
Each provider has their own naming and definition around what is “dedicated CPU”
and in terms of what they offer.
As you’ll see below, that the storage and RAM offerings vary greatly. The
consistent metric is the CPU which I targeted plans that offered 2 cores.
Something else I had learned while doing this month’s post, is that DigitalOcean
offers dedicated CPUs outside of their CPU-Optimized plan, if you opt for
General Purpose droplet.
As per usual, I spun up 3 instances with each provider, running Ubuntu 20.04 LTS
and averaged the results.
Overview
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Location | New York 1 | Newark, NJ | New York (NJ) |
Plan | CPU-Optimized | Dedicated CPU | Dedicated Cloud |
RAM | 4 GB | 4 GB | 8 GB |
CPU | 2 Cores | 2 Cores | 2 Cores |
Storage | 25 GB SSD | 80 GB SSD | 120 GB SSD |
Transfer | 4 TB | 4 TB | 10 TB |
Base Price | $40/month | $30/month | $60/month |
Backups | $8/month | $5/month | N/A |
Transfer Overage | $0.01/GB | $0.01/GB | $0.01/GB |
Load Balancer | $10/month | $10/month | $10/month |
Block Storage | $0.10/GB | $0.10/GB | $0.10/GB |
Object Storage | Yes | Yes | Yes |
Managed Databases | Yes | On 2020 Roadmap | No |
2FA/MFA | Yes | Yes | Yes |
One-click Apps | Yes | Yes | Yes |
Custom Images | Yes | Yes | Yes |
As mentioned, the plans actually vary quite a bit. It’s kind of hard to cut
through the noise since everybody uses their own marketing speak and have sliced
up their plans in a variety of different ways.
If going on this data alone, Linode is the least expensive, with Vultr offering
the most memory, storage and bandwidth.
Vultr also doesn’t offer automated backups the way they do with their shared
plans, so you would have to roll your own solution.
CPU Info
DigitalOcean | Linode | Vultr | |
---|---|---|---|
CPU MHz | 2693.67 | 2666.66 | 3566.67 |
Cache Size (KB) | 4096.00 | 512.00 | 16384.00 |
BogoMips | 3591.67 | 3866.33 | 4734.00 |
CPU
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Events per Second | 1106.16 | 1531.07 | 1048.47 |
Minimum (ms) | 0.87 | 0.64 | 0.88 |
Average (ms) | 0.90 | 0.66 | 0.95 |
Maximum (ms) | 5.83 | 5.06 | 2.46 |
Memory (Read)
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Ops per Second | 5094289.12 | 3975149.27 | 5817321.15 |
Minimum (ms) | 0.00 | 0.00 | 0.00 |
Average (ms) | 0.00 | 0.00 | 0.00 |
Maximum (ms) | 0.40 | 5.48 | 0.87 |
Memory (Write)
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Ops per Second | 5100399.83 | 3971784.60 | 5700781.33 |
Minimum (ms) | 0.00 | 0.00 | 0.00 |
Average (ms) | 0.00 | 0.00 | 0.00 |
Maximum (ms) | 0.17 | 2.13 | 0.78 |
File I/O
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Reads per Second | 2003.89 | 5762.53 | 5053.47 |
Writes per Second | 1335.92 | 3841.68 | 3368.98 |
Fsyncs per Second | 4284.09 | 12298.75 | 10787.80 |
Minimum (ms) | 0.00 | 0.00 | 0.00 |
Average (ms) | 0.13 | 0.06 | 0.05 |
Maximum (ms) | 23.28 | 19.32 | 14.77 |
MySQL
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Transactions per Second | 2420.67 | 2692.67 | 3001.67 |
Queries per Second | 48413.33 | 53853.33 | 60033.33 |
Minimum (ms) | 2.55 | 2.83 | 2.34 |
Average (ms) | 4.17 | 4.29 | 3.35 |
Maximum (ms) | 63.29 | 20.48 | 29.17 |
Redis
DigitalOcean | Linode | Vultr | |
---|---|---|---|
PING_INLINE | 89284.39 | 117996.66 | 108871.57 |
PING_BULK | 88759.92 | 118254.15 | 105547.96 |
SET | 90692.49 | 118869.29 | 110511.94 |
GET | 88496.62 | 119651.53 | 113264.30 |
INCR | 91005.31 | 119695.11 | 108119.24 |
LPUSH | 92945.98 | 120347.78 | 110116.96 |
RPUSH | 92202.63 | 122027.63 | 112728.57 |
LPOP | 92722.92 | 121448.60 | 113522.00 |
RPOP | 91732.82 | 118374.13 | 111238.60 |
SADD | 91386.93 | 119803.38 | 110876.15 |
HSET | 93438.05 | 124217.81 | 110985.49 |
SPOP | 90229.81 | 119803.74 | 112000.44 |
LRANGE_100 (first 100 elements) | 50068.06 | 58536.91 | 73253.70 |
LRANGE_300 (first 300 elements) | 18699.89 | 21746.83 | 34034.45 |
LRANGE_500 (first 500 elements) | 12414.00 | 14587.64 | 24051.02 |
LRANGE_600 (first 600 elements) | 10017.71 | 11585.54 | 20027.79 |
MSET (10 keys) | 66928.76 | 88184.31 | 109750.60 |
Apache Benchmark (against nginx
on the servers)
DigitalOcean | Linode | Vultr | |
---|---|---|---|
Requests per Second | 213.61 | 243.27 | 183.66 |
Time per Request (ms) (mean) | 2394.50 | 2066.90 | 3039.19 |
Transfer Rate (Kbyte/sec) | 179.19 | 204.07 | 154.07 |
Conclusion
Because this month’s comparison isn’t nearly as apples to apples as my
comparison of the shared plans, I’m not feeling too comfortable (or confident)
in saying one provider performed the very best.
Each had their strengths and weaknesses, and as always, you should make a
decision on a provider based around you and your application’s needs and not on
raw benchmarks alone.