I was working with a very large VMWare image today, containing Oracle E-Business Suite R12. The image is located on an external USB drive, simply because it is too large to fit on the internal disk on the available host machine. It was running very, very slow, in fact so slow that it was completely unusable. A little bit of research turned up some settings that can be used in this kind of situation.
The problem seems to be that VMWare creates a file in the same directory as the configuration (vmx) file where it stores the memory of the running guest machine. This means there is a lot of I/O contention on the USB drive, not something that a lot of USB drives are very good at handling.
Happily, there is an option to make VMWare use RAM on the host to contain the guest’s memory, and to create any backing files on the main disk instead of the external disk.
Listed below are the settings I discovered and added into my VMX file. In addition to this, I changed the option in VMWare Workstation’s Edit, Preferences menu option, in the Memory tab, to keep all of the guest memory in the host RAM. I also tried this on VMWare Server. The option is in a different place, but it does the same thing.
mainMem.useNamedFile=FALSE ### this line is for Windows hosts mainMem.backing="unnamed" ### this line is for Linux hosts sched.mem.pshare.enable = "FALSE" MemTrimRate = 0 prefvmx.useRecommendedLockedMemSize = "TRUE" prefvmx.minVmMemPct = "100"
The result of these changes was a dramatic performance improvement. Actions that were previously taking several minutes before timing out or failing were now completely successfully in just seconds.
I am posting these settings here in the hope that they help others too. I know I will be using them again next time I need to run a large VM!