How do the various VPS vendors compare? I decided to find out. I'm going to run a series of benchmark tests on VPSes provided by a bunch of different cloud providers. Also included are results from my Raspberry Pi 3.

I will update this post as I run more benchmark tests.

OpenSSL Speed Tests (RSA)

Command: openssl speed rsa

Azure

Spec: Standard A1 (1 core, 1.75 GB memory)

                  sign    verify    sign/s verify/s
rsa  512 bits 0.000127s 0.000009s   7864.4 106226.3
rsa 1024 bits 0.000417s 0.000025s   2397.6  39664.3
rsa 2048 bits 0.002855s 0.000081s    350.3  12282.8
rsa 4096 bits 0.019681s 0.000304s     50.8   3292.4
DigitalOcean

Spec: $5 Droplet (1 core, 512 MB memory)

                  sign    verify    sign/s verify/s
rsa  512 bits 0.000079s 0.000006s  12660.4 177734.0
rsa 1024 bits 0.000232s 0.000018s   4316.9  55457.6
rsa 2048 bits 0.001531s 0.000047s    653.3  21220.3
rsa 4096 bits 0.010604s 0.000166s     94.3   6022.0
Scaleway

Spec: VC1S (2 cores, 2 GB memory)

                  sign    verify    sign/s verify/s
rsa  512 bits 0.000202s 0.000015s   4944.4  66974.1
rsa 1024 bits 0.000694s 0.000043s   1441.2  23023.3
rsa 2048 bits 0.005071s 0.000148s    197.2   6752.7
rsa 4096 bits 0.036268s 0.000556s     27.6   1798.1
Bandwagon Host

Spec: 5G Promo V2 (1 core, 512 MB memory)

                  sign    verify    sign/s verify/s
rsa  512 bits 0.000139s 0.000009s   7201.2 111387.3
rsa 1024 bits 0.000406s 0.000025s   2465.1  40161.1
rsa 2048 bits 0.002881s 0.000086s    347.1  11575.8
rsa 4096 bits 0.020938s 0.000322s     47.8   3104.0
Raspberry Pi 3

Spec: Pi 3 Model B (4 cores, 1 GB memory)

                  sign    verify    sign/s verify/s
rsa  512 bits 0.000769s 0.000066s   1300.3  15056.3
rsa 1024 bits 0.003927s 0.000198s    254.7   5041.6
rsa 2048 bits 0.025000s 0.000705s     40.0   1418.7
rsa 4096 bits 0.172203s 0.002684s      5.8    372.6

OpenSSL Speed Tests (AES-256-CBC)

Command: openssl speed -evp aes-256-cbc

Azure
Doing aes-256-cbc for 3s on 16 size blocks: 7035747 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 64 size blocks: 1914087 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 488292 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 1024 size blocks: 310851 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 38127 aes-256-cbc's in 2.99s
OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      37649.48k    40833.86k    41806.94k   106103.81k   104460.33k
DigitalOcean
Doing aes-256-cbc for 3s on 16 size blocks: 56063358 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 12943502 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 4071276 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 905658 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 126984 aes-256-cbc's in 3.00s
OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc     299004.58k   276128.04k   347415.55k   309131.26k   346750.98k
Scaleway
Doing aes-256-cbc for 3s on 16 size blocks: 33162225 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 64 size blocks: 11397585 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 256 size blocks: 3302439 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 857138 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 108679 aes-256-cbc's in 3.00s
OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fdebug-prefix-map=/build/openssl-wIGtVG/openssl-1.0.2g=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc     176865.20k   243148.48k   281808.13k   292569.77k   296766.12k
Bandwagon Host
Doing aes-256-cbc for 3s on 16 size blocks: 64041849 aes-256-cbc's in 2.93s
Doing aes-256-cbc for 3s on 64 size blocks: 17847712 aes-256-cbc's in 2.94s
Doing aes-256-cbc for 3s on 256 size blocks: 4568741 aes-256-cbc's in 2.95s
Doing aes-256-cbc for 3s on 1024 size blocks: 1137072 aes-256-cbc's in 2.94s
Doing aes-256-cbc for 3s on 8192 size blocks: 143645 aes-256-cbc's in 2.94s
OpenSSL 1.0.2g  1 Mar 2016
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)
compiler: cc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc     349716.58k   388521.62k   396473.80k   396041.40k   400251.65k
Raspberry Pi 3
Doing aes-256-cbc for 3s on 16 size blocks: 5547024 aes-256-cbc's in 2.96s
Doing aes-256-cbc for 3s on 64 size blocks: 1609019 aes-256-cbc's in 2.96s
Doing aes-256-cbc for 3s on 256 size blocks: 426448 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 1024 size blocks: 107881 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 8192 size blocks: 13519 aes-256-cbc's in 3.00s
OpenSSL 1.0.1t  3 May 2016
built on: Fri Sep 23 22:38:09 2016
options:bn(64,32) rc4(ptr,char) des(idx,cisc,16,long) aes(partial) blowfish(ptr)
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-z,relro -Wa,--noexecstack -Wall -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DGHASH_ASM
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
aes-256-cbc      29983.91k    34789.60k    36390.23k    36946.54k    36915.88k

VPSBench

Command: bash <(wget --no-check-certificate -O - https://raw.github.com/mgutz/vpsbench/master/vpsbench)

Azure
CPU model:  AMD Opteron(tm) Processor 4171 HE
Number of cores: 1
CPU frequency:  2094.674 MHz
Total amount of RAM: 1675 MB
Total amount of swap:  MB
System uptime:   8 days, 5:50,
I/O speed:  40.9 MB/s
Bzip 25MB: 12.74s
Download 100MB file: 31.3MB/s
DigitalOcean
CPU model:  Intel(R) Xeon(R) CPU E5-2630L v2 @ 2.40GHz
Number of cores: 1
CPU frequency:  2399.998 MHz
Total amount of RAM: 488 MB
Total amount of swap:  MB
System uptime:   22:51,
I/O speed:  185 MB/s
Bzip 25MB: 6.30s
Download 100MB file: 94.7MB/s
Scaleway
CPU model:  Intel(R) Atom(TM) CPU  C2750  @ 2.40GHz
Number of cores: 2
CPU frequency:  2393.902 MHz
Total amount of RAM: 2002 MB
Total amount of swap:  MB
System uptime:   1:25,
I/O speed:  124 MB/s
Bzip 25MB: 13.71s
Download 100MB file: 87.6MB/s
Bandwagon Host
CPU model:  Intel(R) Xeon(R) CPU           L5639  @ 2.13GHz
Number of cores: 1
CPU frequency:  2133.382 MHz
Total amount of RAM: 512 MB
Total amount of swap:  MB
System uptime:   28 days, 4:01,
I/O speed:  134 MB/s
Bzip 25MB: 9.23s
Download 100MB file: 20.7MB/s
Raspberry Pi 3

Note: Download speed is limited by the speed of my home internet connection

CPU model:  ARMv7 Processor rev 4 (v7l)
Number of cores: 4
CPU frequency:  MHz
Total amount of RAM: 925 MB
Total amount of swap: 99 MB
System uptime:   7 days, 7:52,
I/O speed:  9.2 MB/s
Bzip 25MB: 30.49s
Download 100MB file: 8.45MB/s