ESXi 内存分配原理

上一篇我们详细讲述了CPU的调度原理,本篇讲一下内存的分配过程。

 

运行在ESXi主机上的虚拟机分配内存之和可以超过物理机的实际内存大小,这个技术叫做超额分配(overcommitment),即使单个虚拟机的内存分配值都可以超分。但是超分的结果就是可能会引起内存资源竞争,从而有可能影响到性能。

 

VMkernel中有另外一个组件叫做memory allocator,用来负责内存资源的分配,(负责CPU调度的是scheduler,上一篇提到过),如下图:

 

 

那么内存分配的过程究竟是怎样的呢?我们来详细描述一下:

 

  • 首先,内存分为三个级别,主机物理内存,客户机物理内存(虚拟机分配的内存大小),客户机虚拟内存(应用程序使用的内存)。虚拟机开机后,VMkernel 不会立即分配所有的客户机物理内存给虚拟机,初始阶段是根据OS和应用程序的需要按需分配,如下图所示。这个时候,VMkernel会把物理机的内存页面地址映射给客户机物理内存页面,从而实现内存虚拟化。

 

 

  • 其次,当OS和应用程序释放内存的时候,Guest OS会把这些内存页面地址放在free list,但是VMkernel并不知道这个list,也就是说,VMkernel是不知道Guest里边有内存释放,也不会知道哪些应用程序正在占用哪些内存页面,它只知道虚拟机分配的内存大小。(是不是感觉VMkernel挺傻的,自己的东西分给别人了,但是别人用不用也不知道,直到最后自己的东西被分完了。)如下图所示:

 

 

其中,free list是Guest OS没有分配给应用程序的,左侧第一个“红色”内存页面是应用程序暂时不用的,被称为“Idle--闲置”内存,其他三个内存页面(黄色,蓝色,灰色)是应用程序正在使用的,被称为“Active--活动”内存,所以Guest OS会把内存分为下图的树形结构:

 

 

  • 最后,当内存超分时,虚拟机请求的内存达到或者超过实际的物理内存大小时,VMkernel就要对分配出去的内存进行回收,从而触发四种内存回收机制,目的是为了保证所有的虚拟机都可以共享到内存资源,默认情况下,物理内存是平均分配的,但是如果管理员设置了资源控制参数(预留,限制,份额),那么VMkernel就会按照优先级对虚拟机的内存请求进行重分配。

     

关于超分情况下,在内存竞争时,VMkernel如何进行内存回收呢?且听下回分解~

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值