I have been using VMware virtualization for quite a few years now, and even though it is generally fast and reliable virtualization platform, it does require some extra tuning to improve its performance. Here is a brief collection of tweaks that I personally use on Windows and Mac OS to improve I/O performance of VMware virtual machines. These tweaks have become particularly useful in the past couple of years, with larger amounts of available RAM in computers and desire to reduce unnecessary write operations to SSD drives, such as memory swap files.
In order to apply these tweaks you need to add the following settings either to your virtual machine .VMX file, or if you like it globally then to VMware settings.ini file. Settings.ini file is located at “C:\ProgramData\VMware\VMware Workstation\” or “C:\Documents and Settings\All Users\VMware\VMware Workstation\” folders, depending on your operating system. VMware Fusion Config files are located in “/Users/username/Library/Preferences/VMware Fusion/preferences” and “/Users/username/Library/Preferences/VMware Fusion/config” folders.
Tweak: Disable memory swap files .vmem files
mainMem.useNamedFile = "FALSE"
Unfortunately this parameter does not work for VMware Player, as it always creates virtual machine’s full memory swap file.
For VMware Fusion on Mac and Linux instead of mainMem.useNamedFile you have to set mainMem.backing flag.
mainMem.backing = "swap"
Tweak: Choose the right disk controller and specify SSD
Instead of the latest SATA AHCI controller choose LSI Logic SAS controller with SCSI disk for Windows guest OS, or PVSCSI for other types of OS. Unfortunately SATA AHCI on VMware has the lowest performance out of the three controllers and highest CPU overhead (see the references on the topic at the end). In addition to choosing the right controller, if your host disk is SSD you can explicitly specify the disk type as SSD to guest OS.
scsi0:0.virtualSSD = 1
Tweak: Disable log files for VM
logging = "FALSE"
Alternatively you can specify a different location to store the log file, if you ever need them:
log.filename = "c:\Windows\Temp\vm1.log"
Tweak: Other Disk & Memory I/O Performance Optimization
Disable memory trimming:
MemTrimRate = "0"
Disable page sharing:
sched.mem.pshare.enable = "FALSE"
Disable scale down of memory allocation:
MemAllowAutoScaleDown = "FALSE"
Tweak: Disabling Snapshots
Disable snapshots if you are not using them and prefer full backups:
snapshot.disabled = "TRUE"
Tweak: Disable Unity Mode
Unity might be a great feature for running virtual desktops operating systems, but it is not the most useful for virtualizing server OS. An annoying sign of enabled unity is GuestAppsCache or caches folder with a large number of files and subfolders. In order to disable it for your VM add the following lines:
isolation.tools.unity.disable = "TRUE"
unity.allowCompositingInGuest = "FALSE"
unity.enableLaunchMenu = "FALSE"
unity.showBadges = "FALSE"
unity.showBorders = "FALSE"
unity.wasCapable = "FALSE"
Tweak: MacBook Retina Display Optimization
Disable automatic fitting to window:
pref.autoFitGuestToWindow = "FALSE"
Set a different resolution (or in user interface select VM – Settings – Display – uncheck ‘Use full resolution for Retina display’):
gui.applyHostDisplayScalingToGuest = "FALSE"
When in full-screen mode, there is a couple of options to control how guest is rendered:
pref.autoFitFullScreen = "stretchGuestToHost" or pref.autoFitFullScreen = "fitHostToGuest"
- VMware KB: Troubleshooting hosted disk I/O performance problems
- VMware: Disk I/O Performance Tips
- VMware Blog: Defragmentation overview
- VMware KB: Disabling the Workstation Log File or Storing the Log File in a Different Location
- VMware Blog: Which vSCSI controller should I choose for performance?
- Article: Virtualizing SQL Server with VMware: Architecting for Performance: Storage
- Blog: Emulating an SSD Virtual Disk in a VMware Environment