Friday, October 21, 2011

Microsoft Hyper-V Dynamic Memory vs. VMware Memory Overcommit

In an attempt to provide higher levels of server consolidation, both Microsoft and VMware have developed their own solution for higher utilization of Random Access Memory (RAM). VMware’s Memory Overcommit has been available for quite some time, while Dynamic Memory is a new player. How do they compare?

VMware Memory Overcommit
I have always been amazed by VMware’s success with the Memory Overcommit technique, and the ability to provide more RAM to virtual machines than a physical computer actually has. I’m sure many system administrators use this feature in their organizations. It works on a very basic principles:
1. Give more memory to virtual machines than a physical computer has.
2. Identify the same memory blocks (by hash) in multiple virtual machines.
3. Compress the host memory by storing those blocks only once.
This is accomplished by External Page Sharing or Second Level Paging technique, which I won’t describe in detail here. It is important to note that VMware does not trust the information from the guest OS. Memory is assigned to virtual machines based on the information that is available on the level of the host OS. This makes sense because of security and stability reasons.

Microsoft Hyper-V Dynamic Memory

Hyper-V Dynamic Memory works different. Instead of compressing the host RAM, it allows virtual machines to demand more RAM if required. This works similar as with dynamic virtual disks. System administrators have to configure a startup (minimum) and a maximum amount of memory for each virtual machine. The sum of all maximum values can be larger than the total amount of memory on a physical server. Microsoft calls this Memory Oversubscription. However, the sum of all amounts of memory given to each virtual machine will never exceed the limits of a physical computer.
To use Dynamic Memory for Hyper-V, you have to install Service Pack 1 for Windows Server 2008 R2 which is still in beta. If you install the Integration Components in the guest OS, a small driver called Dynamic Memory Virtual Service Consumer (DM VSC) will monitor the memory usage in the guest OS. This driver collects information about current RAM requirements and reports it to the host which decides to give or take RAM from the virtual machine.

Hyper-V Dynamic Memory vs. VMware Memory Overcommit

It is too early to give a final judgment which technology is more effective. Microsoft virtualization team has a huge advantage for being able to work with the Windows kernel team (Linux distributions are not supported, yet, but it might change in future), and use information from the Windows kernel to calculate the current memory needs of a virtual machine.
However, Hyper-V Dynamic Memory still has to prove its efficiency in real world scenarios. Windows Server 2008 SP1 is still in beta, while VMware Memory Overcommit has been working reliably in enterprise environments for a long time. What’s your experience? Which technology do you prefer?