Hyper-V: improve your I/O performance

Since a few weeks I am running Hyper-V instead of ESXi for my virtualization stuff. I have a very fast “server” running a decent CPU and a RAID 0 array consisting of 4 Samsung 840 Pro SSD disks with an Intel raid controller.

This should all be super fast, but still I wasn’t happy about the I/O performance. After doing lots of research, I performance the following tasks. As you can see, I was able to gain a 200 % performance improvement (for the build server + build agents):

Build server differences

Note: always make a backup before messing with your RAID configuration

Upgrade the driver and firmware of the RAID controller

Upgrade the driver of the RAID controller (check your official RAID controller website, in my case intel). And even if you are running Windows Core (Hyper-V 2016 without UI), you can still install Raid Web Console 2.0 and run startupui.bat in the installation directory. Check if all settings are still correct for you to ensure the best performance.

Upgrade the firmware of the SSD disks

This is a bit trickier because the disks need to be recognizable. But they are not because they are exposed as a single volume via the RAID controller. To upgrade, I did the following:

Prerequisites

  1. Separate machine that you can easily attach a SATA disk to. I have a specific desktop machine where I can just plug and play SATA disks at the top of the casing.
  2. The latest firmware upgrade software (on the separate machine), in my case Samsung Magician

Steps

  1. Turn off the server and make sure you have a backup (!).
  2. Unplug the SSD from the machine and perform the steps one by one:
    1. Plug the disk into the separate machine (do not format or try to read the disk, just add it)
    2. Run the firmware upgrade tool. I tried upgrading via a boot CD for Samsung, but that gave me a “upgrade was unsuccesfull” message all the time. Samsung Magician worked great.
    3. Check if the firmware correctly upgraded, put back the disk in the server and continue with the next one

My firmware was updated from DXM04B0Q to DXM06B0Q.