Which vSCSI controller should I choose for performance?

I wrote a blog article in Oct 2010 on this same topic that is still frequently referenced today so I figure it was due for an update.

So what should I choose as my vSCSI controller and what are the differences between them?

First, it’s important to remind everyone that when you select the Guest OS for a new virtual machine

SelectGuestOS

this automatically makes a selection for which vSCSI controller to use based on what drivers are available in the OS distribution.  So be sure to select the correct Guest OS to start in the right place.

vSCSIAdapterSelect

Let’s look at the options available today:

  • BusLogic – this was one of the first emulated vSCSI controllers available in the VMware platform.  The earliest versions of Windows has this driver available by default which made it easy when installing that particular OS. It wasn’t however as performant as the LSI Logic driver since Windows’ driver was limited to a queue depth of 1, so often one would manually load the LSI Logic driver instead.  While still available and used occasionally (Is anyone still running Win2K?), it should be considered legacy.
  • LSI Logic Parallel (formerly knows as just LSI Logic) – this was the other emulated vSCSI controller available originally in the VMware platform.  Most operating systems had a driver that supported a queue depth of 32 and it became a very common choice, if not the default.
  • LSI Logic SAS – This is an evolution of the parallel driver to support a new future facing standard.  It began to grown popularity when Microsoft required its use for MCSC within Windows 2008 or newer.
  • VMware Paravirtual (aka PVSCSI) – this vSCSI controller is virtualization aware and was been designed to support very high throughput with minimal processing cost and is therefore the most efficient driver. In the past, there were issues if it was used with virtual machines that didn’t do a lot of IOPS, but that was resolved in vSphere 4.1.

Are there performance differences between them?

  • PVSCSI and LSI Logic Parallel/SAS are essentially the same when it comes to overall performance capability.  PVSCSI, however, is more efficient in the number of host compute cycles that are required to process the same number of IOPS. This means that if you have a very storage IO intensive virtual machine, this is the controller to choose to ensure you save as many cpu cycles as possible that can then be used by the application or host. Most modern operating systems that can drive high IO support one of these two controllers.
  • Here’s a detailed whitepaper that takes a closer look at PVSCSI vs LSI Logic SAS for IOPS, Latency and Cost.  While it does support that PVSCSI is more capable, keep in mind most customers are not producing 1 million IOPS so for real life the difference is negligible.

How many vSCSI adapters are supported per virtual machine?

  • It’s also worth noting that you can configure a total of 4 vSCSI adapters per virtual machine.  To provide the best performance, one should also distribute virtual disk across as many vSCSI adapters as possible.  This configuration provides the capability to process more IO simultaneously and benefit from additional queues if necessary.

What about AHCI SATA?

  • This is a new storage controller available with vSphere 5.5 and virtual hardware 10.  It allows you to connect a large amount of storage to a virtual machine but it wasn’t designed to be as efficient as the PVSCSI or LSI Logic controllers and therefore should not be used with performance sensitive applications.

Let’ summarize this in a chart:

Screen Shot 2014-02-07 at 2.25.41 PM