因为内存通常是最有限的资源,ESXi采用内存过量配置(Memory overcommitment,即配置后的虚拟机内存可能超过物理内存(RAM))对内存进行管理。使用内存过量配置时,ESXi必须使用技术从一个或多个VM中回收内存,这些技术被称为:透明页面共享(Transparent Page Sharing,TPS)、气球(ballooning)、交换(swap)和内存压缩(Memory compression)。
1、 透明页面共享
ESXi主机运行相同操作系统的VM时,保存一个可能相同的内存页面,释放相同其它重复的页面。这一过程对OS完全透明,并不知道自己和其它VM共享一个相同的内存页面。
2、 气球
从运行的VM中取得不需要的内存,并将其分配给其它需要内存资源的VM。在生产环境中,系统正常运行工作时,需要的内存很少,而启动时分配的内存远大于正常工作时所需的内存,从而造成大量的内存资源未使用(称为闲置内存,idle memory),并很少使用。因为内存是共享的,因此可以收回供其它VM使用。
此时出现一个问题,ESXi怎么确定在使用气球技术回收内存资源时,哪个VM会释放内存呢?
共享(share)解决了这一难题。共享定义了VM的优先级,有4个级别:低、中、高和自定义(使用1:2:4比例或自定义比例)。ESXi主机优先从共享级别低的VM中回收内存,给共享级别高的VM使用。
此时,又出现了另一个问题:优先级设置比较高的VM可能积累一些或大量内存未使用,而优先级设置比较低的VM需要使用大量活动内存,由于共享并未规定使用活动内存的标准,因此,优先级设置比较低的VM将受到惩罚。
我们可以有一个思路:无论VM的共享优先级是什么,优先回收空闲的内存。这种思路就是ESXi的闲置内存税(idle memory tax)。默认情况下,闲置内存税参数被设置为75%,即回收闲置内存的75%。闲置内存税赋予ESXi主机使用内存页面的样本概率方法进行内存回收。每个VM都在一个可设置的时间间隔内单独采样,默认情况下,ESXi每30秒采样100个页面。
3、 交换
气球技术的全面性,保证了能够高效回收内存,但是此时出现一个问题需要解决,就是内存资源全部都在使用中,这样就无法回收内存资源。
当VM启动时,创建一个扩展名为.vswp的交换文件。只有能够创建和访问这个文件时才能启动VM(这意味着应该注意可用的存储空间)。
ESXi主机使用交换文件是为了防止出现使用内存过量配置但气球驱动程序无法从其它VM回收内存的情况。在这种情况下,ESXi使用磁盘作为内存。但是这个技术可能永远不会使用,因为磁盘访问会大大影响性能。交换的唯一好处就是内存不足的时候VM不会崩溃。
注意:硬盘访问时间是以毫秒(ms,千分之一秒)计算,而内存访问时间以纳秒(ns,十亿分之一)计算,两者相差100万倍。因此交换技术应该不会永远使用。
4、 内存压缩
内存压缩的原理是将要交换的页以压缩的形式存储在被保护的内存空间中,当系统访问该页引起缺页时,系统会内存中找到该被压缩的页,并将其解压缩后供系统使用。内存压缩在系统存储层次中逻辑地加入了一层:内存压缩层,因此,可以说内存压缩层是虚拟化管理器决定硬盘上交换页面的中间层。
对压缩内存的访问快于硬盘访问,没有太多的性能损失。当一个虚拟页面必须交换时,ESXi首先试图在2KB或者更小的块上面压缩。
这是本人写的第一篇关于虚拟化的博客,也是第一次写博客,有不足之出希望大家多多斧正指教。