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 hello@getcodified.com.

5 Responses to “Digital Ocean, Amazon Web Services, Windows Azure benchmarked and compared”

  1. Joshka

    Talk on this at https://news.ycombinator.com/item?id=6295946
    My comment: https://news.ycombinator.com/item?id=6296273
    Can you please post the benchmark technique to allow for reproduction?
    My colleagues and I often use client’s hardware rather than our own to work on their project. The mono source sounds like a good stress test to guague the pain and implement preventative upgrades early in the piece.
    For comparison’s sake, `time make` of mono-3.2.1 from tarball on a 2012 Macbook Pro Retina / 2.6GHz / 16 GB RAM / 512 GB SSD returns:
    make 583.12s user 77.90s system 98% cpu 11:11.99 total
    This seems slow compared to digital ocean. I wonder if there’s something I’m not setting. My settings per [1] were:
    ./configure –prefix=/Users/joshka/Code/mono –enable-nls=no –build=i386-apple-darwin11.2.0
    [1]: http://www.mono-project.com/Compiling_Mono_on_OSX

    Reply
  2. Simone

    It would be interesting to see results also from a Linode server, it should be much better than DigitalOcean on CPU (8 cores vs 1) and hopefully in bandwidth too

    Reply
    • Martin Alderson

      Yes Simone, that’s something I’m going to look into soon – did notice that they now have 8 cores. However, the fact they don’t have SSD servers that I can see is a bit of a problem.

      It would be great if they did both… will report back.

      Reply
  3. Tom Resing

    Wow! That’s pretty telling on the performance and the download speed. Looks like azure is pretty good for static websites based on this but not so great for web services.

    Reply

Leave a Reply

  • (will not be published)

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>