设置 页面有一些我们可以配置内存的选项.

1. Allocated memory
该值在虚拟机属性的硬件选项卡中, 为虚拟机用到的物理内存总额, 虚拟机不能超过该限制 获取更多的内存.
2. Reservations(保留)
分配虚拟机的最少内存量, 确保虚拟机可以获得的最小内存. 当该条件不能得到满足时, 将无法启动虚拟机. 就是所谓的”接入控制”. 该值在虚拟机属性的资源选项卡中设置, 默认情况下没有配置该选项.
3. Limits(限制)
该值约束虚拟机使用的内存上限.

VMkernel交换 文件
当虚拟机运行需要更多内存时利用该文件将内存内容交换到磁盘以释放内存. 当设置保留后,  保留的内存将得到保护, 不会被交换到磁盘. 因此每当虚拟机启动时, VMkernel会创建一个容量为限制减去保留后大小的交换文件. 例如我们有一个虚拟机限制内存为1024M, 保留内存为512M, 则创建的交换文件大小为1024MB-512MB=512MB. 如果我们将保留内存设为1024M, 就不会创建交换文件.
请记住, 在默认情况下, 没有设置任何保留和限制, 因此为每个虚拟机创建与分配内存相同大小的交换文件.

4. Shares(份额)
份额指定虚拟机的相对优先级或重要性, 份额高的虚拟机相比份额低的虚拟机可消耗更多的资源. 不像固定的限制(Limits)和保留(Reservations), 份额(Shares)能 动态改变.

记住份额 系统仅在内存资源匮乏导致争用发生时发挥作用.

份额通常指定为高(High)、正常(Normal)、低(Low)或自 定义值. 这些值按4:2:1比例指定份额值.
低: 1MB按5个份额分配给虚拟机.
正常: 1MB按10个份额分配给虚拟机.
高: 1MB按20个份额分配给虚拟机.

例: 我们有5个虚拟机, 各分配2,000M内存, 份额值设为”Normal”. ESX 服务器只有4,000MB物理内存可用于虚拟机. 这里每个虚拟机可得到20,000个份额(10*2,000), 所有虚拟机共计份额为100,000(20,000*5), 这里每个虚拟机将获得同等的资源20,000/100,000=1/5现有的资源=4,000/5=800MB.
现在我们改变1号虚拟机的份额为”High”, 1号虚拟机将获得40,000个份额(20*2,000), 因此1号虚拟机得到的资源为40,000/120,000=1/3现有的资源=4,000/3=1,333MB, 其他四个虚拟机得到资源为20,000/120,000=1/6现有的资源=4000/6=666MB

我们可配置资源池以代替基于一个虚拟机的这些设置, ESX资源池共用CPU和内存资源.
在了解ESX内存管理如何工作前, 需弄清以下三个定义.
 



  • 机器内存(Machine Memory): 为ESX服务器上安装的物理内存, 由ESX Kernel管理.
  • 物理内存(Physical Memory): 分配给虚拟机的内存, 在虚拟客户系统看来就是它的物理内存, 由进行管理.
  • 虚拟内存(Virtual Memory): 运行客户操作系统上的应用系统看到的内存.



虚拟机内存使用


现在让我们注意内存是如何分配给客户机的. 每当应用程序需要一个内存页用于存储数据, 需要通过操作系统提交请求. 操作系统监控着哪些内存页正被使用, 哪些处于空闲的状态. 想象是两个简单的列表, 一个用于空闲内存页, 另一个用于已分配页. 因此当收到应用程序提交的请求时, 操作系统会在其空闲内存页中为应用程序指定一个内存页. 然后操作系统将此内存页从”空闲列表”移到”已分配列表”.


在ESX系统管理层(虚拟层?), 内存是按需进行分配. 当虚拟机第一次访问物理内存, 系统管理层将为虚拟机指派机器内存页. 管理程序会为每个虚拟机在保持一条从物理内存页到机器内存页(PMP-MMP)的映射记录, 因此管理程序清楚哪些内存页被使用以及在机器内存中的位置.


我们知道了如何分配内存, 但在应用程序不需要内存页时会发生什么. 在这种情况下应用程序将再次通过操作系统的一个系统调用去释放内存. 释放的内存页从”已分配列表”又移回到”空闲列表”.因为操作系统根本不清楚自己实际是虚拟机, 也没有与系统管理层(虚拟层?)交互. 虚拟层根本不知道这些内存页现在是空闲的. 所以, 系统管理程序(虚拟层?)仅仅是分配内存给虚拟机, 虽然在虚拟机操作系统里内存页不断的被分配和释放, 但是系统管理无法回收客户端释放的内存.


虚拟机摘要中包含的主机内存使用和客户机内存使用, 其中主机内存使用是分配给虚拟机的物理内存. 记住该值包含虚拟化管理(如PMP-MMP影射表)所需内存. 在一个内存使用过量的服务器上主机内存使用是基于共享的, 但客户机内存使用会被标注为高水位.(On a non-memory overcommitted host this represents a “high water mark” on the guest’s memory usage, but host memory usage is based on shares when the host is overcommitted.)


摘要中的客户机内存是客户端操作系统和活动的应用程序所需要的内存额. 并不是如前面提到的ESX系统管理层(虚拟层?)根本不知道客户端物理内存页的实际状况. 实际上该值是通过统计抽样计算得出的. 这意味着ESX系统管理层(虚拟层?)是随机的采集和监测一段时间内客户端内存和页面访问情况. 这个值与客户机总内存推算出客户机内存的使用.



上图描述了客户机内存状态. 分配给客户机的总内存, 可分配给操作系统和应用程序, 或不分配.分配的内存可处于有效或失效状态.