VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

第 1 部分。关于 CPU

在本文中,我们将讨论 vSphere 中随机存取存储器 (RAM) 的性能计数器。
似乎有了内存,一切都比处理器更清晰:如果 VM 有性能问题,很难不注意到它们。 可一旦出现,对付起来就困难多了。 但首先是第一件事。

有些理论

虚拟机的 RAM 取自运行 VM 的服务器的内存。 这很明显:)。 如果服务器的 RAM 对每个人来说都不够用,ESXi 会开始使用内存回收技术来优化 RAM 的消耗。 否则,VM 操作系统会因 RAM 访问错误而崩溃。

使用 ESXi 的技术取决于 RAM 的负载:

内存状态

边界

活动

400% 的最低限度免费

达到上限后,将大内存页拆分为小内存页(TPS 工作在标准模式下)。

清除

100% 的最低限度免费

大内存页被分成小页,TPS 被迫工作。

64% 的最低限度免费

TPS + 气球

32% 的最低限度免费

TPS + 压缩 + 交换

16% 的最低限度免费

压缩+交换+块

minFree 是管理程序工作所需的 RAM。

在包含 ESXi 4.1 之前,minFree 默认固定为服务器 RAM 的 6%(可以通过 ESXi 上的 Mem.MinFreePct 选项更改该百分比)。 在后来的版本中,由于服务器内存大小的增加,minFree 开始根据主机内存量计算,而不是固定百分比。

minFree(默认)值计算如下:

为 minFree 保留的内存百分比

内存范围

6%

0-4GB

4%

4-12GB

2%

12-28GB

1%

剩余内存

例如,对于具有 128 GB RAM 的服务器,MinFree 值将为:
最小可用空间 = 245,76 + 327,68 + 327,68 + 1024 = 1925,12MB = 1,88GB
实际值可能相差几百 MB,这取决于服务器和 RAM。

为 minFree 保留的内存百分比

内存范围

128 GB 的价值

6%

0-4GB

245,76 MB

4%

4-12GB

327,68 MB

2%

12-28GB

327,68 MB

1%

剩余内存 (100 GB)

1024 MB

通常,对于生产林,只有高状态才能被认为是正常的。 对于测试和开发平台,Clear/Soft 状态可能是可以接受的。 如果主机上的 RAM 低于 64% MinFree,那么运行在其上的 VM 肯定存在性能问题。

在每个状态下,都会应用某些内存回收技术,从 TPS 开始,实际上不会影响 VM 的性能,并以 Swapping 结束。 我会告诉你更多关于它们的信息。

透明页面共享 (TPS)。 TPS,粗略地说,就是对服务器上的虚拟机内存页进行去重。

ESXi 通过计算和比较页面的哈希和来查找虚拟机 RAM 的相同页面,并删除重复页面,将它们替换为指向服务器物理内存中相同页面的链接。 结果,减少了物理内存消耗,并且可以在几乎没有或没有性能下降的情况下实现一些内存超额订阅。

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

这种机制只适用于 4 KB 的内存页(small pages)。 管理程序甚至不会尝试对 2 MB 的页面(大页面)进行重复数据删除:找到这种大小的相同页面的机会不大。

默认情况下,ESXi 将内存分配给大页面。 当达到 High 状态阈值时开始将大页面分解为小页面,并在达到 Clear 状态时强制执行(请参阅管理程序状态表)。

如果您希望 TPS 开始工作而不等待主机 RAM 填满,则需要在 Advanced Options ESXi 中设置该值 “Mem.AllocGuestLargePage” 到 0(默认 1)。 然后将禁用为虚拟机分配大内存页。

自 2014 年 XNUMX 月以来,在 ESXi 的所有版本中,VM 之间的 TPS 默认情况下已禁用,因为发现了一个漏洞,理论上允许从一个 VM 访问另一个 VM 的 RAM。 详情在这里。 我还没有看到关于利用 TPS 漏洞的实际实施的信息。

通过高级选项控制的 TPS 策略 “Mem.ShareForceSalting” 在 ESXi 上:
0 - VM 间 TPS。 TPS适用于不同VM的页面;
1 – 在 VMX 中具有相同“sched.mem.pshare.salt”值的 VM 的 TPS;
2(默认值)- VM 内 TPS。 TPS 适用于 VM 内的页面。

在测试台上关闭大页面并打开 Inter-VM TPS 绝对有意义。 它也可以用于具有大量相同类型VM的站点。 例如,在具有 VDI 的机架上,物理内存的节省可以达到百分之几十。

内存膨胀。 Ballooning 不再像 TPS 那样对 VM 操作系统是一种无害且透明的技术。 但是通过适当的应用,您可以使用 Ballooning 生活甚至工作。

与 Vmware Tools 一起,在 VM 上安装了一个名为 Balloon Driver(又名 vmmemctl)的特殊驱动程序。 当 hypervisor 开始耗尽物理内存并进入 Soft 状态时,ESXi 会通过此 Balloon Driver 要求 VM 回收未使用的 RAM。 反过来,驱动程序在操作系统级别工作,并从中请求可用内存。 管理程序查看 Balloon Driver 占用了哪些物理内存页面,从虚拟机中获取内存并将其返回给主机。 操作系统的运行没有问题,因为在操作系统级别,内存被 Balloon Driver 占用。 默认情况下,Balloon Driver 最多可占用 VM 内存的 65%。

如果 VM 上未安装 VMware Tools 或 Ballooning 被禁用(我不推荐,但有 KB:),管理程序立即切换到更严格的内存删除技术。 结论:确保 VMware Tools 在 VM 上。

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存
可以通过 VMware Tools 从操作系统检查 Balloon Driver 的操作.

内存压缩。 当 ESXi 达到硬状态时使用此技术。 顾名思义,ESXi 试图将 4KB 的 RAM 页面缩小为 2KB,从而释放服务器物理内存上的一些空间。 这种技术显着增加了对 VM RAM 页面内容的访问时间,因为页面必须首先被解压缩。 有时并非所有页面都可以压缩,并且该过程本身需要一些时间。 因此,这种技术在实践中不是很有效。

内存交换。 在短暂的内存压缩阶段后,ESXi 几乎不可避免地(如果虚拟机没有离开其他主机或关闭)将切换到交换。 如果剩余内存非常少(低状态),那么管理程序也会停止向 VM 分配内存页面,这可能会导致 VM 的来宾操作系统出现问题。

以下是交换的工作原理。 当您打开虚拟机时,会为其创建一个扩展名为 .vswp 的文件。 它的大小等于 VM 的未保留 RAM:它是配置内存和保留内存之间的差异。 当 Swapping 运行时,ESXi 将虚拟机内存页面卸载到此文件中并开始使用它而不是服务器的物理内存。 当然,即使 .vswp 依赖于快速存储,这种“有效”内存比真实内存慢几个数量级。

与 Ballooning 不同,当未使用的页面从 VM 中取出时,通过交换,操作系统或 VM 内的应用程序正在使用的页面可以移动到磁盘。 结果,VM 的性能下降到冻结点。 VM 正式运行,至少可以从操作系统中正确禁用它。 如果你有耐心😉

如果虚拟机去交换,这是一种异常情况,如果可能的话最好避免。

关键 VM 内存性能计数器

所以我们到了重点。 要监视 VM 中的内存状态,有以下计数器:

现有的 — 显示 VM 在上一个测量期间访问的 RAM (KB) 量。

用法 - 与 Active 相同,但以 VM 已配置 RAM 的百分比表示。 使用以下公式计算:活动 ÷ 虚拟机配置的内存大小。
High Usage 和 Active 并不总是 VM 性能问题的指标。 如果 VM 积极使用内存(至少可以访问它),这并不意味着没有足够的内存。 相反,这是一个查看操作系统中正在发生的事情的机会。
VM 有一个标准的内存使用警报:

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

共享 - 使用 TPS(在 VM 内部或 VM 之间)进行重复数据删除的 VM RAM 的数量。

授出 - 分配给 VM 的物理主机内存量 (KB)。 包括共享。

消费 (授予 - 共享)- VM 从主机消耗的物理内存量 (KB)。 不包括共享。

如果部分 VM 内存不是来自主机的物理内存,而是来自交换文件,或者内存是通过 Balloon Driver 从 VM 获取的,则在 Granted 和 Consumed 中不考虑此数量。
高 Granted 和 Consumed 值是完全正常的。 操作系统逐渐从管理程序中获取内存并且不归还它。 随着时间的推移,在一个活跃运行的虚拟机中,这些计数器的值会接近配置的内存量,并保持在那里。

— VM RAM (KB) 的数量,其中包含零。 这样的内存被管理程序认为是空闲的,可以提供给其他虚拟机。 来宾操作系统将某些内容写入归零内存后,它会进入已消耗状态并且不会返回。

预留开销 — 虚拟机管理程序为 VM 操作保留的 VM RAM 量 (KB)。 这是一个小数量,但必须在主机上可用,否则 VM 将无法启动。

气球 — 使用 Balloon Driver 从 VM 中获取的 RAM (KB) 量。

压缩 - 压缩的 RAM (KB) 量。

交换 - 由于服务器物理内存不足而移至磁盘的 RAM (KB) 量。
气球和其他内存回收技术计数器为零。

这是具有内存计数器的图形对于具有 150 GB RAM 的正常工作的 VM 的外观。

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

在下图中,VM 存在明显的问题。 在图表下,您可以看到对于此 VM,使用了所有描述的使用 RAM 的技术。 此 VM 的气球比消耗的大得多。 事实上,虚拟机是死的而不是活的。

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

ESXTOP

与 CPU 一样,如果我们想快速评估主机上的情况,以及最多 2 秒的时间间隔的动态,我们应该使用 ESXTOP。

Memory 的 ESXTOP 屏幕使用“m”键调出,如下所示(已选择字段 B、D、H、J、K、L、O):

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

我们会对以下参数感兴趣:

内存过量使用平均值 - 主机内存超额订阅 1、5 和 15 分钟的平均值。 如果它高于零,那么这是查看正在发生的事情的机会,但并不总是问题的指示器。

在行 电源管理器/MB и VMK内存/MB - 有关服务器物理内存和 VMkernel 可用内存的信息。 从有趣的这里你可以看到 minfree 的值(以 MB 为单位),主机在内存中的状态(在我们的例子中,高)。

排队 内存/MB 您可以看到 NUMA 节点(套接字)的 RAM 分布。 在这个例子中,分布不均匀,原则上不是很好。

以下是有关内存回收技术的一般服务器统计信息:

股票/MB 是 TPS 统计数据;

交换/MB — 交换使用统计;

邮编/MB — 内存页压缩统计;

MEMCTL/MB — Balloon Driver 使用统计。

对于单个 VM,我们可能对以下信息感兴趣。 我隐藏了 VM 名称以免混淆观众 :)。 如果ESXTOP metric和vSphere中的counter类似,我给出对应的counter。

MEMSZ — VM 上配置的内存量 (MB)。
MEMSZ = GRANT + MCTLSZ + SWCUR + 未更改。

— 授予 MB。

心脑血管疾病 — 活跃于 MB。

MCTL? - 虚拟机上是否安装了 Balloon Driver。

MCTLSZ — 气球到 MB。

MCTLGT — ESXi 想要通过 Balloon Driver (Memctl Target) 从 VM 获取的 RAM (MB) 量。

MCTLMAX - ESXi 可以通过气球驱动程序从虚拟机获取的最大 RAM (MB) 量。

西南水库 — 当前从交换文件分配给 VM 的 RAM (MB) 量。

S.W.G.T. - ESXi 想要从交换文件(交换目标)提供给 VM 的 RAM (MB) 量。

此外,通过 ESXTOP,您还可以查看有关 VM 的 NUMA 拓扑的更多详细信息。 为此,请选择字段 D、G:

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

NHN – 虚拟机所在的 NUMA 节点。 在这里您可以立即注意到宽虚拟机,它不适合一个 NUMA 节点。

非RMEM - VM 从远程 NUMA 节点占用多少兆字节的内存。

非线性记忆体 - VM 从本地 NUMA 节点获取多少兆字节的内存。

%L – 本地 NUMA 节点上 VM 内存的百分比(如果低于 80%,可能会出现性能问题)。

管理程序上的内存

如果管理程序的 CPU 计数器通常不是特别重要,那么内存的情况正好相反。 VM 上的高内存使用率并不总是表示存在性能问题,但管理程序上的高内存使用率会触发内存管理技术并导致 VM 出现性能问题。 必须监控主机内存使用警报,以防止 VM 进入 Swap。

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

取消交换

如果 VM 在 Swap 中,其性能会大大降低。 主机上出现空闲 RAM 后,Ballooning 和压缩的痕迹很快消失,但虚拟机并不急于从 Swap 返回到服务器 RAM。
在 ESXi 6.0 之前,使 VM 脱离 Swap 的唯一可靠且快速的方法是重新启动(更准确地说,关闭/打开容器)。 从 ESXi 6.0 开始,虽然不是很正式,但已经出现了一种从交换中删除 VM 的有效且可靠的方法。 在其中一次会议上,我能够与一位负责 CPU 调度程序的 VMware 工程师交谈。 他证实该方法非常有效且安全。 根据我们的经验,它也没有问题。

从 Swap 中删除 VM 的实际命令 他描述 邓肯·埃平。 我不会重复详细的描述,只是举一个使用的例子。 正如您在屏幕截图中所见,执行指定命令一段时间后,Swap 在 VM 上消失了。

VMware vSphere 中的虚拟机性能分析。 第 2 部分:内存

ESXi 内存管理技巧

最后,这里有一些技巧可以帮助您避免 RAM 导致的 VM 性能问题:

  • 避免生产集群中的内存超额订阅。 最好在集群中始终有 ~20-30% 的可用内存,以便 DRS(和管理员)有操作空间,并且 VM 在迁移期间不会进入交换。 另外,不要忘记容错余量。 令人不快的是,当一台服务器出现故障并且使用 HA 重新启动 VM 时,一些机器也会进入 Swap。
  • 在高度整合的基础设施中,尽量不要创建超过主机内存一半的虚拟机。 这将再次帮助 DRS 在集群服务器之间毫无问题地分发虚拟机。 当然,这条规则并不普遍:)。
  • 观察主机内存使用警报。
  • 不要忘记在 VM 上安装 VMware Tools 并且不要关闭 Ballooning。
  • 考虑在 VDI 和测试环境中启用 Inter-VM TPS 并禁用大页面。
  • 如果 VM 遇到性能问题,请检查它是否正在使用来自远程 NUMA 节点的内存。
  • 尽快让您的 VM 脱离 Swap! 除其他事项外,如果 VM 在 Swap 中,由于显而易见的原因,存储系统会受到影响。

这就是我对 RAM 的全部了解。 下面是一篇相关文章,供那些想深入了解细节的人使用。 下一篇文章将专门介绍 storadzh。

有用的链接http://www.yellow-bricks.com/2015/03/02/what-happens-at-which-vsphere-memory-state/
http://www.yellow-bricks.com/2013/06/14/how-does-mem-minfreepct-work-with-vsphere-5-0-and-up/
https://www.vladan.fr/vmware-transparent-page-sharing-tps-explained/
http://www.yellow-bricks.com/2016/06/02/memory-pages-swapped-can-unswap/
https://kb.vmware.com/s/article/1002586
https://www.vladan.fr/what-is-vmware-memory-ballooning/
https://kb.vmware.com/s/article/2080735
https://kb.vmware.com/s/article/2017642
https://labs.vmware.com/vmtj/vmware-esx-memory-resource-management-swap
https://blogs.vmware.com/vsphere/2013/10/understanding-vsphere-active-memory.html
https://www.vmware.com/support/developer/converter-sdk/conv51_apireference/memory_counters.html
https://docs.vmware.com/en/VMware-vSphere/6.5/vsphere-esxi-vcenter-server-65-monitoring-performance-guide.pdf

来源: habr.com

添加评论