Over the last few months, we've seen more and more providers implement caching for disk I/O. While this is great for bursty type loads this benefit is greatly diminished for sustained-type workloads.

At VpsCritic want our scores to better represent the performance you will have in a production environment and to that end, we will be separating our disk benchmarks into two sections

  1. Burst tests - these are run for 10s and give a good idea of how your application will perform if your workloads come in short spikes.

  2. Sustained tests - These are run for 120s each and give a better representation of workloads where constant reading or writing is needed.

With this update now live, we will be re-running our benchmarks on all providers so that all plans have the most up to date values.

Our VPS comparisons from this month will also weigh in the sustained tests when calculating Disk Performance scores.

For the number nerds

We use fio for our tests and for reference, the commands we use during benchmarking can be found below.

echo "Running fio (burst)..."
# SEQ Q32T1 (128K)
IO_SEQ_Q32T1_READ=`fio --filename=/root/fio.test --name=seqread --ioengine=libaio --iodepth=32 --rw=read --bs=128k --direct=1 --size=4G --numjobs=1 --runtime=10 --group_reporting --output-format=json`
IO_SEQ_Q32T1_WRITE=`fio --filename=/root/fio.test --name=seqwrite --ioengine=libaio --iodepth=32 --rw=write --bs=128k --direct=1 --size=4G --numjobs=1 --runtime=10 --group_reporting --output-format=json`

# 4K Q32T1
IO_4K_Q32T1_READ=`fio --filename=/root/fio.test --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --direct=1 --size=4G --numjobs=1 --runtime=10 --group_reporting --output-format=json`
IO_4K_Q32T1_WRITE=`fio --filename=/root/fio.test --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=4G --numjobs=1 --runtime=10 --group_reporting --output-format=json`

# 4K Q1
IO_4K_READ=`fio --filename=/root/fio.test --name=randread --ioengine=libaio --iodepth=1 --rw=randread --bs=4k --direct=1 --size=4G --numjobs=1 --runtime=10 --group_reporting --output-format=json`
IO_4K_WRITE=`fio --filename=/root/fio.test --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=1 --size=4G --numjobs=1 --runtime=10 --group_reporting --output-format=json`


echo "Running fio (sustained)..."
# SUSTAINED SEQ Q32T1 (128K)
IO_SEQ_Q32T1_READ_SUSTAINED=`fio --filename=/root/fio.test --name=seqread --ioengine=libaio --iodepth=32 --rw=read --bs=128k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --group_reporting --output-format=json`
IO_SEQ_Q32T1_WRITE_SUSTAINED=`fio --filename=/root/fio.test --name=seqwrite --ioengine=libaio --iodepth=32 --rw=write --bs=128k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --group_reporting --output-format=json`

# SUSTAINED 4K Q1
IO_4K_Q1T1_READ_SUSTAINED=`fio --filename=/root/fio.test --name=randread --ioengine=libaio --iodepth=1 --rw=randread --bs=4k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`
IO_4K_Q1T1_WRITE_SUSTAINED=`fio --filename=/root/fio.test --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`

# SUSTAINED METADATA - 4k
IO_4K_Q32T1_READ_SUSTAINED=`fio --filename=/root/fio.test --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`
IO_4K_Q32T1_WRITE_SUSTAINED=`fio --filename=/root/fio.test --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=4k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`

# SUSTAINED DB - 8k
IO_8K_Q32T1_READ_SUSTAINED=`fio --filename=/root/fio.test --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=8k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`
IO_8K_Q32T1_WRITE_SUSTAINED=`fio --filename=/root/fio.test --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=8k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`

# SUSTAINED LARGE FILES - 128k
IO_128K_Q32T1_READ_SUSTAINED=`fio --filename=/root/fio.test --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=128k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`
IO_128K_Q32T1_WRITE_SUSTAINED=`fio --filename=/root/fio.test --name=randwrite --ioengine=libaio --iodepth=32 --rw=randwrite --bs=128k --direct=1 --size=12G --numjobs=1 --runtime=120 --time_based --end_fsync=1 --group_reporting --output-format=json`