VMware Paravirtual adapters were introduced back in 4.x and at the beginning there were some concerns. There were some issues if used with virtual machines that didn’t do a lot of IOPS, but that was resolved in vSphere 4.1. Otherwise PVSCSI offers 12% improvement in throughput at 18% less CPU. Today we'll see how-to safely change virtual adapter from LSI logic SAS into VMware Paravirtual (for boot disk) as by default then you create a new VM through the VM creation wizard, there is still LSI SAS driver selected by default.
PVSCSI adapters are high-performance storage adapters that can result in greater throughput and lower CPU utilization. PVSCSI adapters are best suited for environments, especially SAN environments, where hardware or applications drive a very high amount of I/O throughput. By default the PVSCSI driver is not proposed when creating a new VMs, because of compatibility purpose and also that this driver isn't present on some Windows based servers. Some VMware admins might not be so convinced and might fear to do such a change, especially on VM's boot disks. So you might think if there is a safe way to configure your VMs to use this PVSCSI driver safely – even for boot disks.
If you change the adapter directly (without those steps) your VM might not boot…
How-to safely change from LSI Logic SAS into VMware Paravirtual (on boot disk)
The most safe way is to create a small (dumb) 1GB virtual disk with controller using the PVSCSI driver. Like this when the system boots up the driver is recognized by the OS and installed. There is 2 reboots necessary. But I'll walk you through the steps in detail as I've just done the test on my Exchange 2010 VM which runs on 2008R2 and has single disk based on LSI SAS.
Here are the steps:
01. Add a small, thin provisioned disk to the VM – 1GB in size is sufficient.
02. Choose a 1:0 SCSI node (as on the image below).
03. Then select the newly added SCSI adapter and click the change type button to select VMware paravirtual
04. By then you'll see that the OS finds and installs the adapter….. Note that the VM is still running as I haven't rebooted yet.
05. Now you can gracefully shut down the VM to make changes. Go to the edit settings dialog and delete the 1Gb disk you have added in step 1. Validate the changes by clicking the OK button, and go back to the edit settings dialog for the VM > choose the SCSI adapter for the SCSI controller 0 (the boot disk), click the change type button and select the VMware Paravirtual.
06. After booting the VM you'll see a dialog that a new driver was installed (again), and that a reboot is necessary. Reboot the VM …
07. You can check settings of the VM that a paravirtual driver is used (Select VM > Edit settings > SCSI controller). Or you can also check insided the GuestOS that the Paravirtual driver is used (Right click computer > Manage > Device manager > Storage controllers.)
That's all. Now there is the most efficient driver used for that particular VM. This was simple how-to article showing that the way be more efficient with more performance. But, Imagine that you got an environment which has quite a few VMs like this. I'm sure there is a some one-liner with some PowerCLI scripting which would do this at the host (cluster) level as well. But this might be another story or at least another article … -:).
Another thing would be if you would be creating a template VM, where you would probably do all this during the template build. I hope that you find it useful.
Check this paper – that takes a closer look at PVSCSI vs LSI Logic SAS for IOPS, Latency and Cost.
Assuming you want to leave the default LSI Logic SAS controller for your boot drive and the remaining drives on the VMware Paravirtual controller, how do you verify those extra drives are actually using the VMware Paravirtual controller? Do I assume that anything other than 0:0-0:15 is on Paravirtual?
Vladan SEGET says
You can see which kind of controller the DD is using by selecting it, if you go and select the VM > edit settings > scsi controller. (The 5th image shows “paravirtual”). If you select other than scsi controller 0 (for ex. 1) then you should see “paravirtual”. If not just change the controller.
As Vladan SEGET has said, editing the VM and looking at the disks is the easiest way to tell which scsi controller they are using. There is another way within Disk Management inside a Windows guest OS. If you look at the Properties > General tab of a disk. The Location value will tell you the Bus Number and say something like “Location 160” for the first controller. Any drives on a different controller will have a different Location number. But the one thing to be aware of is the SCSI ID’s will still start at 0:0 for each different controller in the OS. You have to be aware of the Location number when looking in Disk Management.
João Ferreira says
Great post as always. This method still works if you have a Linux VM ?
I’m going to try this on a test vm.
Sajid Ansari says
is it recommended that: can we install windows 2012 on PVSCSI.
Please help as we are building new Exchange environment.
have you ever try changing lsi logic sas into paravirtual with linux operating system as a boot device?
I did test a win2016 domain controller boot on sas and on pvscsi.
The SAS had average speed of 260MB/sec the pvscsi had 80MB/sec under ESX 6.5.0 (Build 5224529)
I did test with HD_speed x64
I was assuming all newer Windows OS like 2012R2 and higher would be better performing when use the pvscsi for boot disk.
Can you tell me if you have the same experience for simple windows installations ? Or was my test not done well?
Vladan SEGET says
I haven’t tested performance as several VMware resources did already. The goal is to get lower CPU utilization with some more IOPS for the apps. As concerning boot time, I don’t think we should really care, but it’s strange you had actually worst results by using pvscsi. That’s normally isn’t the case.
On my test servers (w2k16) I get 15-20% more on pvscsi with MSSQL stress disks DB tools.
Vladan SEGET says
Thanks for sharing. -:)
hi, What is the security when adding 1 GB disk? I always changed the type of controller without adding a disk, the drivers were installed successfully. Maybe the instruction is relevant only for the ancient OS?
Vladan SEGET says
Well, on a single disk VMs where you changing the controller for the boot disk, Windows does not have a driver…. and as such, the VM becomes unbootable. Haven’t tested on newer OS.
Vladan, I’m talking only about 1 GB disk.
I add a new Paravirtual controller, turn on the VM, OS installs the driver, turns off the VM and changes the controller type of the boot disk. All the same, but without a temporary 1 GB disk.
Vladan SEGET says
I haven’t checked with latest WS 2019 and I don’t actually remember whether it was 2016 or 2012, but freshly installed WS system did not contain the PVSCSI driver. Hence this workaround. That’s all. There is nothing worry about outside of that. -:)
Thanks a lot worked a treat for me on Windows Server 2016 – building an Exchange 2016 environment at the moment!
Benjamin B says
this was very helpful and worked like a charm for me, thank you sir