At Codified, we’ve used an awful lot of hosting providers over the years. Originally dedicated or collocated servers in a datacentre, and more recently virtualisation technology has allowed us to not worry too much about the underlying physical server hardware and give us far more options in scalability.

The big drawback with virtualised hosting was IO (input/output) performance. This corresponds to saving and reading files of the storage disk of the server. Virtualisation technology is pretty good at sharing memory and processing power equally between the various virtual servers on a physical server, but often IO performance has been dreadful.

This server looks good. No IO wait here!

This server looks good. No IO wait here!

You can see if your Linux based server is suffering from IO problems by running the ‘top’ command and looking for the number next to ‘wa’. This is the percentage of time that the server is waiting for the storage disk to feed it information. This does mean that the process is totally stalled until it gets that data – causing really sluggish performance. No amount of extra CPU or memory will help with this issue.

We’ve generally used Amazon Web Services and Microsoft Windows Azure in the past for many of our clients’ workloads. Both are advanced platforms with a lot of functionality. However, we’ve had problems on both with sporadic I/O wait problems.

DigitalOcean has been the talk of the internet recently – they offer a fully functional cloud server for just $5/month – but the most interesting thing for us is that even for the low prices they offer, all servers come with an SSD.

Let’s run them through their paces with a task that requires really good IO and CPU performance to perform well: building a big open source package from source. Since we love both .NET & open source round these parts, we’ve chose to compile Mono, which is an open source implementation of the .NET stack (and the core of Xamarin, which we use to build awesome apps at our Xamarin consultancy). We often find this matches an intense real world workload, with lots of files to access, high CPU required to compile stuff and fast access to RAM to keep everything ticking over.

We’re using:

  • DigitalOcean $5/month server – which has 512MB of RAM, ‘1 core’ and 20GB of SSD space and includes 1TB/month of data transfer.
  • On the Amazon side, we’re using an AWS EC2 micro instance, with 1 virtual core, 0.6GB of RAM that works out at about $14.40/month but does not include any data transfer.
  • Finally, with Azure, we’re using an Extra Small (A0) Linux VM which works out at about $15/month. This again does not include data transfer to the internet but has 768MB of RAM and 1 virtual core.

All servers are using Ubuntu 12.04 LTS 64bit edition, in a European datacentre.

Task DigitalOcean AWS Windows Azure
Build Mono from GitHub source 2m05 9m10 12m56
Download 1GB file from internet 13MB/s 28MB/s 57MB/s


While the performance gains of building from source are staggering, it does look like the internet connectivity isn’t quite as good as we’d hope at DigitalOcean. Overall though, considering this box is 1/3rd of the price and offers over 5x the performance, it’s a no brainer.

We’re going to increasingly use DigitalOcean for performance-heavy workloads at Codified, and we can help move your legacy systems over to the cloud. Drop us a mail at [email protected].