虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理

Posted 深度运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理相关的知识,希望对你有一定的参考价值。

之前的文章介绍了CPU相关的知识,本文将对VMware虚拟化平台内存使用机制进行分析,以及怎么判断虚拟化平台是否存在瓶颈,以加深对虚拟化平台内存的了解,只有了解其原理,才能更好地预防,发现及处理问题。

1, 虚拟化平台三种内存模式

2,内存三种模式的工作方式

下图显示了三层内存的相互映射方式,虚拟机虚拟内存映射到虚拟机物理内存,虚拟机物理内存被虚拟机管理器(hypervisor)映射到ESXi主机物理内存。

虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理

   举例说明:如果你有一个虚拟机,在虚拟机里面开启一个微信应用程序,微信如果想要运行就会向虚拟机索要内存,虚拟机会提供内存给微信应用使用,这个时候内存的流向是Guest virtual memory 向 guestphysical memory申请内存。此时,虚拟机管理器会收到guest physical memory向Host physicalmemory申请内存,申请完成后微信应用程序才能正常运行。

虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理

有人会问如果这样的话,虚拟机会不会一直请求内存,但是一直不释放,造成物理内存占满的情况。其实是不会出现这种状况的,当一个虚拟机分配的虚拟机物理内存已被完全占用时,管理程序不会再向虚拟机分配更多的物理主机内存,即使内存限制设置为无限制。

3.虚拟机的内存回收

内存分配容易回收难,因为内存回收的时候,管理程序必须必须保留足够的物理主机内存来支持虚拟机物理内存分配和虚拟机运行的内存开销。但是在日常工作中我们经常会遇到ESXi主机内存过量分配的情况,ESXi通过使用透明页共享(Transparent PageSharing)、内存膨胀(Ballooning)、管理程序内存交换(hypervisor swapping)及内存压缩(memory compression)等机制保证能使内存过量分配。

a.透明页共享

当ESXi主机运行多个虚拟机时,这些虚拟机可能已加载相同的应用程序或组件,或者包含公用数据。使用透明页共享技术可以消除内存页的冗余副本,只保留一份,其余的内存可以重新分配给其它虚拟机。

b.内存膨胀

如上所述,当虚拟机的客户操作系统释放内存时,ESXi不能简单地回收主机物理内存页,虚拟机操作系统也不知道ESXi主机内存的真实使用率。当ESXi主机内存处于压力状态时,主机可以通过内存膨胀机制来回收虚拟机的物理内存页,触发内存膨胀的驱动程序在安装vmware tools的时候已经安装在操作系统中,驱动程序的名称为vmmemctl。

虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理

虚拟机操作系统内存膨胀

当主机的物理内存处于压力状态,主机需要从虚拟机中回收物理内存时,管理程序会给vmmemctl设置一个须达到的目标值,vmmemctl收到目标值后,虚拟机首先将被标记为“free”的内存“填充气球”,如果这些被标记为“free”的内存不能满足的情况下,可能触发内存交换的情况,以达到需要回收目标值。最理想的状态是,在不进行内存交换的情况下就能满足目标值,这样就不会影响虚拟机的性能。为了避免在进行内存交换的时候有可以交换的磁盘可用,所以在虚拟机进行配置时,要有足够的交换空间。当然也可以设置限制可使用内存膨胀回收的内存量,甚至可以禁用内存膨胀,但是一般情况下不建议这样做,因为内存膨胀是在保障虚拟机操作系统性能的情况下做出的选择,要比其他方式温柔的多,所以不建议禁用内存膨胀。

c.内存压缩

内存压缩就是指那些需要交换到磁盘的内存页不进行磁盘交换而是进行压缩,这种时候就是上面内存膨胀需要回收内存时,如果“free”内存不能满足回收的目标值,虚拟机会将不会内存交换到磁盘,在交换到磁盘之前管理程序会判断是进行压缩对虚拟机性能影响小,还是进行交换对虚拟机性能影响小。并不是所有的内存都适合压缩,如果一个内存页压缩比在50%以上,ESXi主机将会压缩这些内存。如果内存页压缩比在50%以下,则会通过管理程序将内存交换到磁盘。

d.管理程序内存交换

当ESXi主机使用透明页共享、内存膨胀、内存压缩等机制都不能回收内存时,才会使用管理程序内存交换。在进行内存交换时,管理程序不会判断虚拟机里面哪些内存适合交换,也就是说它不会判断页面对于虚拟机的重要程度,所以会随机选择内存页面进行交换,这就会对虚拟机造成不可预知的影响,内存交换到磁盘审核,也会严重影响虚拟机的性能。在ESXi5.5以上版本中可以设置SSD缓存交换,以较少对性能的影响。

4.使用什么机制进行回收?

根据ESXi主机实际可用内存量的不同,ESXi有4种内存状态,分别是High、Soft、Hard以及Low,具体定义阀值如下表:

状态

High

Soft

Hard

Low

可用内存百分比

6%

4%

2%

1%

可以使用esxtop命令查看当前处于哪种状态。

虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理

主机内存处于不同的状态,会触发相应的内存机制进行内存回收,具体如下表:

状态

High

Soft

Hard

Low

内存回收机制

不做任何操作

内存膨胀

内存压缩,管理程序内存交换及内存膨胀

继续内存交换

5.怎么判断是否存在性能瓶颈?

查看内存的使用情况有很多种,你可以通过vSphere网页客户端进行查看,可以通过使用VMware vRealize Operations Manager,也可以通过esxtop命令进行查看。这里简单介绍下通过esxtop命令进行分析。

SSH登录到ESXi主机,然后输入esxtop命令,输入m进入内存页面,默认5s中更新一次,可以使用s来更改更新间隔(输入s会看到Secondsto delay: 输入你想要的刷新频率,单位为秒,然后回车确认),可以使用f选择要查看的字段,具体详细命令可以参考官方手册,这里只介绍几个比较重要的参数及判断标准。

下图是一个输出截图

PMEM/MB

显示服务器的计算机内存统计信息

VMKMEM/MB

显示ESXi VMkernel的计算内存统计信息。这里面要重点注意主机的内存状态。当状态为Soft的时候说明要关注内存情况,说明主机已经存在内存压力。

PSHARE/MB

显示ESXi页共享信息

SWAP/MB

显示ESXi交换使用量统计信息

r/s 由ESXi系统从磁盘换入内存的速率,如果该值大于0,主机物理内存量过量,主机尝试回收内存,并且仅仅通过内存膨胀这机制无法满足

w/s 由ESXi系统将内存交换到磁盘的速率,如果该值大于0,可能主机物理内存已严重不足

ZIP/MB

显示ESXi内存压缩统计信息

MEMCTL/MB

curr,使用vmmemctl模块回收的物理内存总量

target,ESXi主机尝试使用vmmemctl模块回收的物理内存总量

max,ESXi主机可以使用vmmemctl模块回收的最大物理内存量

如果该值比0大,或者主机内存过量,或者虚拟机已设置了一个比当前配置内存小的内存限制时,主机开始从虚拟机回收内存。

SWCUR 该资源或虚拟机当前使用的交换量

SWTGT ESXi主机预期资源池或虚拟机交换使用量的目标

SWR/s 同SWAP/MB里面的r/s

SWW/s 同SWAP/MB里面的w/s

SWCUR

表示当前使用内存交换交换到磁盘的内存量,如果该值大于0,主机物理内存吃紧,主机尝试回收内存并且仅仅通过内存膨胀机制无法满足

CACHEUSD

当前内存压缩所使用的压缩高速缓存量,该值大于0表示主机正在进行内存压缩,主机内存不足

ZIP/s

主机内存压缩率,如果该值大于0,说明主机正在进行内存压缩

UNZIP/s

如果该值大于0,那么被压缩的内存正在被主机或者虚拟机访问,此时将对虚拟机的性能造成影响。

结束语

 本文从虚拟化平台虚拟机内存的运行机制,内存几种回收机制以及在进行问题发现及诊断时需要注意的指标进行了分析。如果存在比较严重的内存问题,有可能对磁盘的性能也会造成影响。建议在平时工作中向虚拟机分配内存的时候按需分配,使内存发挥出最大性能。由于时间有限,有些细节介绍不能够更深入的分析,不过我相信认真读完本文,对日常维护工作会带来更大的帮助。

声明:本文是结合作者自己的理解所创作,具体环境应具体讨论,本文仅作参考,封面图片来源网络,侵权删。


以上是关于虚拟化平台内存原理知多少?---浅析VMware虚拟化平台内存管理的主要内容,如果未能解决你的问题,请参考以下文章

一个电脑可以装几个虚拟机

虚拟化技术原理(CPU内存IO)

浅析Go内存管理架构

NSX技术的浅析

强软弱虚(关键词: ThreadLocal,堆外内存)

虚拟机是怎样运行的,原理是啥?