Microsoft explains Hyper-V Dynamic Memory

Now that the Service Pack 1 for Windows Server 2008 R2 is available as a public beta, Microsoft published a detailed article about what its Dynamic Memory feature for Hyper-V is.

The company already published an 80-minutes webcast on this topic, exactly one month ago, but this piece is part of a long and insightful series about memory management in virtual infrastructures and memory over-commitment techniques:

…With Hyper-V (V1 & R2), memory is statically assigned to a virtual machine. Meaning you assign memory to a virtual machine and when that virtual machine is turned on, Hyper-V allocates and provides that memory to the virtual machine. That memory is held while the virtual machine is running or paused. When the virtual machine is saved or shut down, that memory is released.

With Hyper-V Dynamic Memory there are two values: Startup RAM and Maximum RAM:

Startup RAM is the initial/startup amount of memory assigned to a virtual machine. When a virtual machine is started this is the amount of memory the virtual machine will be allocated. In this example, the virtual machine will start with 1 GB.

The Maximum RAM setting is the maximum amount of memory that the guest operating system can grow to, up to 64 GB of memory (provided the guest OS supports that much memory). Based on the settings above, here’s an example of what the memory allocation could look like over a workday.

The Memory Buffer property specifies the amount of memory available in a virtual machine for file cache purposes (e.g. SuperFetch) or as free memory. The range of values are from 5 to 95. A target memory buffer is specified in percentages of free memory and is based on current runtime memory usage. A target memory buffer percentage of 20% means that in a VM where 1 GB is used, 250 MB will be ‘free’ (or available) ideally for a total amount of 1.25 GB in the virtual machine. By default, Hyper-V Dynamic Memory uses a default buffer allocation of 20%. If you find this percentage is too conservative or not conservative enough, you can adjust this setting on the fly while the virtual machine is running without downtime.

Memory Priority: By default, all virtual machines are created equal in terms of memory prioritization. However, it’s very likely you’ll want to prioritize memory allocation based on workload. For example, I can see a scenario where one would give domain controllers greater memory priority than a departmental print server. Memory Priority is a per virtual machine setting which indicates the relative priority of the virtual machine’s memory needs measured against the needs of other virtual machines. The default is set to ‘medium’. If you find that you need to adjust this setting, you can adjust this setting on the fly while the virtual machine is running without downtime.

Microsoft also detailed the list of guest operating systems supported by Dynamic Memory. Only some of them are currently supported in the beta, while others will be added in time for the GA:

Supported Guest OSes during the beta:

  • Windows Server 2003 Enterprise & Datacenter (32-bit and 64-bit)
  • Windows Server 2003 R2 Enterprise & Datacenter (32-bit and 64-bit)
  • Windows Server 2008 Enterprise & Datacenter (32-bit and 64-bit)
  • Windows Server 2008 R2 Enterprise & Datacenter (32-bit and 64-bit)
  • Windows Vista Enterprise & Ultimate (32-bit and 64-bit)
  • Windows 7 Enterprise & Ultimate (32-bit and 64-bit)

Supported Guest OSes after the beta:

  • Windows Server 2003 Web & Standard (32-bit and 64-bit)
  • Windows Server 2003 R2 Web & Standard (32-bit and 64-bit)
  • Windows Server 2008 Web & Standard (32-bit and 64-bit)
  • Windows Server 2008 R2 Web & Standard (32-bit and 64-bit)

There’s no plan to support Linux guest OSes at this point.