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):


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:


  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


  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.

Improving the performance of Windows Hyper-V 2016

This guide explains how to improve the performance of Hyper-V 2016.

Recently I installed a new Hyper-V server. However, it wasn’t performing as good as I’d hoped. After searching the internet for a while, I think these are the most important steps to make your server perform better.

Convert generation 1 to generation 2 machines

Although it’s officially not supported, you can convert generation 1 machines to generation 2, which are much faster. The script can be found here.

Note that it’s smart to disable Windows Defender during this process:

Set-MpPreference -DisableRealtimeMonitoring $true

You can re-enable it again using this code:

Set-MpPreference -DisableRealtimeMonitoring $false

Exclude the Virtual Machine Worker Process from Windows Defender

Start regedit.exe and navigate to this key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Exclusions\Processes

It might be possible that you need to replace the owner in order to add items to this key. I recommend changing it back to the SYSTEM user after making these changes.

Now add these 2 entries:

Name Type Data
vmwp REG_DWORD 0x0
vmwp.exe REG_DWORD 0x0
vmms REG_DWORD 0x0
vmms.exe REG_DWORD 0x0

Exclude the Virtual Machine Disks directory from Windows Defender

Start regedit.exe and navigate to this key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Defender\Exclusions\Paths

It might be possible that you need to replace the owner in order to add items to this key. I recommend changing it back to the SYSTEM user after making these changes.

Name Type Data
[vm directory, e.g. C:\MyVMs] REG_DWORD 0x0
C:\ProgramData\Microsoft\Windows\Hyper-V REG_DWORD 0x0

Migrating from ESXi 5.5 to Hyper-V 2016

This guide explains how to migrate from ESXi 5.5 to Hyper-V 2016.

I am was a happy user of VMWare ESXi. I started with 5.0, migrated to 5.1 and then to 5.5. However, over the years VMWare has shown little love to the smaller labs. They have been migrating over to web management which requires much more setup to manage my (1!) VMWare server. For now I have always accepted this burden, but this week I finally gave up on VMWare for the following reasons:

  1. My server has 64 GB of RAM meaning I have to buy (and renew!) a license. But there is nothing to renew because they aren’t maintaining the management tool. Hyper-V is free!
  2. My virtualized development machines could not run any emulators (because they are all hyper-v based). I tried a lot (it should be possible with some hacks), but couldn’t get it to work.
  3. No complex web management, I can connect to the Hyper-V server from a local Hyper-V manager instance.


Below are the tools I used for the migration:

Tool Description
CopyFile Can copy extremely large files (the virtual hard disks) with resume options in case your network has a hickup
StarWind V2V Converter Converts your VMWare disks to the required vhdx format

Prerequisite steps

Before shutting down your VMWare server, perform the following steps.

  1. Uninstall VMWare tools from all virtual machines (you won’t be needing them)
  2. Shut down all the virtual machines
  3. Backup the virtual machines (in my case, to a NAS). You can use the CopyFile utility here.
  4. Convert the disks using the StarWind V2V Converter. I enabled Windows Repair Mode on all conversions, but not sure if that was really required. This step takes a long time, make sure to start this a soon as possible.

Hyper-V installation

Now we have a backup of all the virtual machines, it’s time to start the installation of Hyper-V. Burn an image of the Hyper-V server installation media so it’s ready.

  1. [optional]. Upgrade the drivers of your raid controller. I have an intel raid controller and had a terrible copy file performance (lots of hickups, 4 MB / s). After trying a lot, I decided to update the raid controller drivers. After this upgrade, the problems were gone so I recommend to do this as a first step to not lose a day like I did.
  2. Insert the Hyper-V media and install Hyper-V server

Post Hyper-V installation steps

  1. Enable remote management (if you are not in a domain, scroll to the bottom)
  2. Connect to the remote Hyper-V server using Hyper-V Manager on any Windows machine (in my case, my computer running Windows 10).
  3. Enable remote file access:
    netsh advfirewall firewall set rule group=”File and Printer Sharing” new enable=Yes
  4. Enable remote desktop access using option 7 in the Hyper-V configuration command line

Migration steps

Once Hyper-V is installed and configured, you can start adding your virtual machines.

  1. Copy the vhdx files to your Hyper-V server using CopyFile. Note that you need to use this destination folder:
    \\[servername]\C$\Users\Public\Documents\Hyper-V\Virtual hard disks\[vmname]
  2. Now the file is copied, create a new virtual machine but don’t forget to connect the existing virtual hard disk.
  3. By default Hyper-V will create a virtual machine with a single CPU. Go to the settings of the virtual machine to update it to the correct number (e.g. 4).
  4. Start the virtual machine, it should start without any issues.