VMware ESX内存管理(2)



原文:http://www.van-lieshout.com/2009/05/esx-memory-management-part-2/

在了解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系统管理层(虚拟层?)是随机的采集和监测一段时间内客户端内存和页面访问情况. 这个值与客户机总内存推算出客户机内存的使用.

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

- 虚拟机内存分配结束 -



发表评论