nguvu

VPS disk performance, Digital Ocean 512MB droplet v2 testing

Published 3 February 2014.

Following yesterdays published VPS performance data and reading some of the feedback relating to testing virtual systems I received, I wanted to revisit Digital Oceans numbers again. For what its worth, I really like these guys, I applaud them for bringing another quality hosting solution to market at is undeniably a fantastic price. I’m committed to hosting my blog on their $5 server so I’ll be watching with a keen eye how the performance trends.

I created two new droplets today, a 512MB / $5 per month and a 2048MB / $20 per month droplet. I re-ran the tests from yesterday to see how these new droplets would perform and see if they could level the field with Linode’s awesome results from yesterday. I haven’t had any feedback suggesting that the testing methods were flawed so for the sake of producing comparative results, I’ve left everything the same.

The test details are below but to save you scrolling through all the data to get to them I’ve put the summary table at the top. I’ll put the 2048 droplet results in a separate post to make reading easier. Hope this is useful.

Test Digital Ocean 512 Linode Dig Ocean 512 (3/1/14) Dig Ocean 2048 (3/1/14)
Writing speed (MB/s) 269 1200 426 291
Unbuffered read (MB/s) 335 533 874 650
Buffered read (MB/s) 383 986 545 4983
Bonnie read (MB/s) 328 670 622 692
Bonnie write (MB/s) 154 @ 44% 558 @ 99% 371 @ 64% 322 @ 76%
Bonnie Update (MB/s) 155 @ 61% 424 @ 61% 335 @ 65% 229 @ 52%
Bonnie random seek 5756 +++++ 13361 9613
IO seek (no cache) - - 8524 IOPS, 33.3 MB/s 8718 IOPS, 34.1 MB/s
IO seek (cached) - - 214825 IOPS, 839.2 MB/s 221504 IOPS, 865.2 MB/s
IO reads (sequential) - - 2805 IOPS, 701.2 MB/s 2691 IOPS, 672.7MB/s
         
FIO / Queue Depth = 1        
Completion Latency (usec) 233 114 115 106
Bandwidth (MB/s) 16.2 31.57 32.01 35.71
IO request complete @250usec 95.00% 99.97% 99.54% 99.57%
CPU Utilisation 52% 27% 48.85% 39.72%
         
FIO / Queue Depth = 8        
Completion Latency (usec) 476 162 324 235.69
Bandwidth (MB/s) 61.0 173.40 103.89 124.26
IO request complete @250usec 15.26% 92.5% 58.67% 70.31%
CPU Utilisation 63% 80% 78.19% 69.94%

Writing Speed

# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 3.08814 s, 348 MB/s
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.19788 s, 489 MB/s
# dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.43367 s, 441 MB/s

Unbuffered reading speed

# echo 3 > /proc/sys/vm/drop_caches
# dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.35384 s, 793 MB/s
# echo 3 > /proc/sys/vm/drop_caches
# dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.19989 s, 895 MB/s
# echo 3 > /proc/sys/vm/drop_caches
# dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.14668 s, 936 MB/s

Buffered reading speed

# dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.1516 s, 499 MB/s
# dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.88014 s, 571 MB/s
# dd if=tempfile of=/dev/null bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.89512 s, 567 MB/s

Bonnie++ Benchmark

# bonnie++ -d /tmp -r 4096 -u root
Using uid:0, gid:0.
Writing a byte at a time...done
Writing intelligently...done
Rewriting...done
Reading a byte at a time...done
Reading intelligently...done
start 'em...done...done...done...done...done...
Create files in sequential order...done.
Stat files in sequential order...done.
Delete files in sequential order...done.
Create files in random order...done.
Stat files in random order...done.
Delete files in random order...done.
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
testing          8G   569  99 380080  64 343365  65  2369  99 637754  66 13361 366
Latency             24976us   51012us     333ms    5443us    6066us    7666us
Version  1.96       ------Sequential Create------ --------Random Create--------
testing             -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
  files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
 16 25032  74 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
Latency              1381us     436us     581us     355us     152us     290us
1.96,1.96,testing,1,1391454316,8G,,569,99,380080,64,343365,65,2369,99,637754,66,13361,366,16,,,,,25032,74,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,24976us,51012us,333ms,5443us,6066us,7666us,1381us,436us,581us,355us,152us,290us

I/O IOPINGS

# ioping /tmp -c 10
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=1 time=0.2 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=2 time=0.3 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=3 time=0.3 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=4 time=0.2 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=5 time=0.3 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=6 time=0.4 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=7 time=0.2 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=8 time=0.4 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=9 time=0.3 ms
4096 bytes from /tmp (ext4 /dev/disk/by-label/DOROOT): request=10 time=0.3 ms

/tmp (ext4 /dev/disk/by-label/DOROOT) ioping statistics ---
10 requests completed in 9008.6 ms, 3744 iops, 14.6 mb/s
min/avg/max/mdev = 0.2/0.3/0.4/0.1 ms

I/O Read Seek test (no cache)

# ioping /tmp -RD
--- /tmp (ext4 /dev/disk/by-label/DOROOT) ioping statistics ---
12596 requests completed in 3000.0 ms, 8524 iops, 33.3 mb/s
min/avg/max/mdev = 0.1/0.1/16.7/0.1 ms

I/O Read seek test (Cached)

# ioping /tmp -RC
--- /tmp (ext4 /dev/disk/by-label/DOROOT) ioping statistics ---
29787 requests completed in 3000.0 ms, 214825 iops, 839.2 mb/s
min/avg/max/mdev = 0.0/0.0/0.1/0.0 ms

I/O Reads seek test (sequential)

# ioping /tmp -RL
--- /tmp (ext4 /dev/disk/by-label/DOROOT) ioping statistics ---
5408 requests completed in 3000.1 ms, 2805 iops, 701.2 mb/s
min/avg/max/mdev = 0.3/0.4/11.2/0.3 ms

FIO - RANDOM READ TEST, QUEUE DEPTH=1.

# fio random-read-test
random-read: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=sync, iodepth=1
fio 1.59
Starting 1 process
random-read: Laying out IO file(s) (1 file(s) / 128MB)
Jobs: 1 (f=1): [r] [100.0% done] [38247K/0K /s] [9337 /0  iops] [eta 00m:00s]
random-read: (groupid=0, jobs=1): err= 0: pid=1762
  read : io=131072KB, bw=33267KB/s, iops=8316 , runt=  3940msec
clat (usec): min=83 , max=19786 , avg=115.65, stdev=116.43
 lat (usec): min=83 , max=19786 , avg=116.04, stdev=116.44
bw (KB/s) : min=26608, max=38232, per=98.53%, avg=32779.43, stdev=5425.96
  cpu          : usr=7.01%, sys=41.84%, ctx=27490, majf=0, minf=24
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
 submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 issued r/w/d: total=32768/0/0, short=0/0/0
 lat (usec): 100=34.04%, 250=65.50%, 500=0.37%, 750=0.05%, 1000=0.02%
 lat (msec): 2=0.01%, 4=0.01%, 20=0.01%

Run status group 0 (all jobs):
   READ: io=131072KB, aggrb=33267KB/s, minb=34065KB/s, maxb=34065KB/s, mint=3940msec, maxt=3940msec

Disk stats (read/write):
  vda: ios=31758/0, merge=0/0, ticks=2620/0, in_queue=2616, util=66.65%

FIO - RANDOM READ TEST, QUEUE DEPTH=8.

# fio random-read-test-aio
random-read: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=8
fio 1.59
Starting 1 process
Jobs: 1 (f=1)
random-read: (groupid=0, jobs=1): err= 0: pid=1796
  read : io=131072KB, bw=109868KB/s, iops=27466 , runt=  1193msec
slat (usec): min=5 , max=1207 , avg=20.76, stdev=21.26
clat (usec): min=54 , max=19571 , avg=264.98, stdev=324.73
 lat (usec): min=68 , max=19588 , avg=287.69, stdev=325.98
bw (KB/s) : min=90248, max=121408, per=96.32%, avg=105828.00, stdev=22033.45
  cpu          : usr=15.10%, sys=63.09%, ctx=1405, majf=0, minf=29
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=100.0%, 16=0.0%, 32=0.0%, >=64=0.0%
 submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 complete  : 0=0.0%, 4=100.0%, 8=0.1%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 issued r/w/d: total=32768/0/0, short=0/0/0
 lat (usec): 100=0.63%, 250=58.04%, 500=36.52%, 750=3.88%, 1000=0.83%
 lat (msec): 2=0.05%, 4=0.02%, 20=0.02%

Run status group 0 (all jobs):
   READ: io=131072KB, aggrb=109867KB/s, minb=112504KB/s, maxb=112504KB/s, mint=1193msec, maxt=1193msec

Disk stats (read/write):
  vda: ios=31222/0, merge=0/0, ticks=4124/0, in_queue=4100, util=82.68%