Dynamic Memory 是微软 Windows Server 2008 R2 SP1以后的新特性(Feature),是一项关于Hyper-V虚拟化的功能性改进。

熟悉虚拟化的朋友都知道,在VM的虚拟王国里,最被大家翘手称赞的就是大名鼎鼎的Memory Overcommit技术,中文名为“内存过量使用”。这项技术允许用户分配给虚拟机的内存空间大于宿主机的内存容量。这样的好处在于虚拟机可以在需要使用内存的时候向宿主机提交申请,在闲暇运行的时候不占用过多的内存;当内存不够时,超出的内存数据存放在硬盘内读写。

在过去的微软Hyper-V虚拟化解决方案中,Hyper-V的内存管理还是固定分配的方式,宿主机实际拥有多少内存,虚拟机就最大只能分配宿主机内存的最大值,而且这个值还要保留宿主机运行的内存。并且当虚拟机开启后,内存就开始占用,其他虚拟机如果要启动,所需的内存必须>=宿主机的内存-当前运行的虚拟机的内存。这是相当不合理的。很多时候,虚拟机启动也许需要1G的内存,但是启动以后,有512M被浪费了。

为了解决这样的问题,微软的Dynamic Memory (动态内存)技术应运而生了。使用Dynamic Memory  ,我们可以为虚拟机分配Startup RAM(启动内存)、Maximum RAM(最大内存)、Memory buffer(内存缓冲)、Memory weight(内存权重),动态的给虚拟机分配内存,合理分配宿主机内存,节省内存资源。下面为您解释一下这四个指标。

Startup RAM是指虚拟机开机需要占用的内存。您设置这个值的时候,通常不需要考虑虚拟机的运行内存,只需要满足系统开启的最低内存需求即可。这通常来的很小。
Startup RAM参考数值:
Windows Server 2008 R2 Enterprise Edition--512MB
Windows Server 2008 R2 Datacenter Edition--512MB
Windows 7 Ultimate Edition--512MB
Windows 7 Enterprise Edition--512MB
Windows Server 2008 Enterprise Edition--512MB
Windows Server 2008 Datacenter Edition--512MB
Windows Vista Ultimate Edition--512MB
Windows Vista Enterprise Edition--512MB
Windows Server 2003 R2 Enterprise Edition--128MB
Windows Server 2003 R2 Datacenter Edition--128MB
Windows Server 2003 Enterprise Edition--128MB
Windows Server 2003 Datacenter Edition--128MB


Maximum RAM是指虚拟机在运行的过程中最大占用的宿主机内存。您可以分配相当数量的内存给虚拟机。但是要注意,当您分配的内存大于宿主机的内存时,虚拟机最大能使用宿主机的内存上限。例如宿主机32G,虚拟机设定Maximum RAM为64G,那么虚拟机最大使用的内存仍为32G。这点需要注意。


Memory buffer,这是一个比较有意思的指标,它以百分比为参数。Memory buffer是用来实现当虚拟机的内存请求超过Maximum RAM时,宿主机分配内存的原则的。当虚拟机不够用时,宿主机会分配Maximum RAM*Memory buffer数量的内存给虚拟机。eg,当虚拟机Maximum RAM为1000M,Memory buffer为20%,如果虚拟机的内存用满后,虚拟机将得到额外的200M空间,也就是说,虚拟机有1200M内存空间。这个机制很棒吧?

Memory weight,它的优先级决定了当虚拟机内存不够时,宿主机分配给虚拟机内存的优先级。它使用拖杆来调整。

当然说了那么多指标,您还需要注意,Dynamic Memory 目前并不支持所有的虚拟机,它支持的操作系统包括 Windows Server 2008 R2 Standard and Web editions 、Windows Server 2008 R2 Enterprise and Datacenter editions、Windows 7 Ultimate and Enterprise editions(32-bit and 64bit)、Windows Server 2008 with SP2 Standard and Web editions (32-bit and 64bit)、Windows Server 2008 with SP2 Enterprise and Datacenter(32-bit and 64bit)、Windows Vista Ultimate and Enterprise editions(32-bit and 64bit)、Windows Server 2003 R2 with SP2 Standard,Web,Enterprise,and DataCenter editions(32-bit and 64bit)。

Dynamic Memory 不支持XP、Linux、Unix,这点需要注意。

说完了技术环节,您一定想知道Dynamic Memory 是如何实现的了吧?这很简单。

1、安装支持Dynamic Memory 技术系统的虚拟机

2、升级/安装虚拟机集成服务至SP1版本(插入集成服务光盘)
(集成服务是虚拟机的中间件之一,安装它能够实现宿主机和虚拟机之间更好的协调,包括共享网络、共享多媒体、鼠标焦点漫游、系统时钟同步等功能)

就那么简单两步,您就拥有了Dynamic Memory 特性了。

当完成后,请到虚拟机的配置中完成四项指标的配置。

 

谈谈Dynamic Memory_第1张图片

您将能够在Hyper-V的管理Console上看到虚拟机实际使用的内存。

至此,您已经了解到Dynamic Memory 的基本概念和配置了。不过笔者在这里有个问题。当虚拟机是Linux的时候,仍旧可以设置Dynamic Memory 的特性参数,这时候虚拟机是如何处理的呢?如果您知道这方面的技术,欢迎回复本贴和我讨论。