VMXNET3接收缓冲区大小和内存使用情况


12

背景

我们发生了Windows故障转移群集遭受中断的事件。事后分析表明,已按照本文中的说明“删除”该节点

我们只是最近才将该群集完全迁移到我们的VMware环境中,看来上述事件可能是造成停机的原因。

与此相关的VMware KB文章讨论了有关增加Small Rx BuffersRx Ring #1设置的问题,但请注意,过多增加这些可能会大大增加主机上的内存开销。

Network Interface\Packets Received Discarded对约150个Windows VM 的性能计数器进行审核之后,跨16个guest虚拟机的22个vNIC有一些被丢弃的数据包。

数量很少,我不担心会给主机增加额外的内存使用量,但我想了解如何将内存用于这些设置以及内存来自何处。

问题

  1. 缓冲区数量和环大小之间有什么关系?
  2. 如何计算用于这些设置的给定值的内存量?
  3. 因为这些设置位于来宾操作系统中的NIC本身上,所以我认为它们是驱动程序设置。这使我认为使用的RAM可能是分页池或非分页池。
    1. 它是否正确?
    2. 如果是这样,我应该担心吗?
  4. 这里有我没有考虑到的问题吗?

我们正在尝试确定将受影响的VM上的虚拟机设置为最大数量(VMware主机内存使用情况除外)是否有缺点。例如,如果我们增加来宾中的池内存不足的风险,则我们更倾向于从小处着手。

这些问题中的某些(也许全部)可能并非特定于VMware或虚拟化。


当物理NIC的TCP卸载引擎行为异常并且VM表现出奇怪的行为时,我已经看到了很多问题,这可能是您可以继续研究的线索。
SpacemanSpiff 2015年

@SpacemanSpiff值得检查,但是在150个以上的虚拟机中,只有16个VM表现出这种行为。那些16分布在12个节点的群集中,它们偶尔都会收到大量流量,这似乎是引发KB文章中描述的症状的原因。其中一些是Windows群集,因此它们不随DRS一起移动,否则我可能会调查在vMotion关闭之前,所有受影响的来宾在特定主机上是否显示丢弃的数据包。我将再次检查,看看是否可以找到任何相关性。谢谢。
briantist

微突,这是什么硬件?
SpacemanSpiff 2015年

@SpacemanSpiff IBM服务器,一些不同的型号和修订版,也不确定哪个NIC,我明天可以检查详细信息。
briantist

Answers:


5

缓冲区数量和环大小之间有什么关系?

它们是相关的,但相互独立。rx“环”是指内存中的一组缓冲区,这些缓冲区用作队列,以将传入的网络数据包从主机(管理程序)传递到来宾(Windows VM)。网络驱动程序会在来宾中保留内存,并将其映射到主机内存中。

随着新的网络数据包进入主机,它们将被放入环中的下一个可用缓冲区。然后,主机触发来宾中的IRQ,来宾驱动程序通过从环中取出数据包并将其分派到来宾OS的网络堆栈,来响应该IRQ,推测该OS将其发送到来宾应用程序以接收它。假设数据包进入的速度足够慢,并且来宾驱动程序正在足够快地处理它们,则环中应该始终有一个空闲插槽。但是,如果数据包传入的速度太快,或者访客处理它们的速度太慢,则振铃可能已满,数据包可能会被丢弃(如您所见)。

增大环的大小可以帮助缓解此问题。如果增加它,则一次在环中将有更多插槽可用。这与第二种设置“ Small Rx Buffers”密切相关,它是可用于填充环中插槽的可用缓冲区的总量。环中至少需要有与插槽相同数量的缓冲区。通常,您需要更多。当来宾从环上取下缓冲区以提供给来宾网络堆栈时,它不一定总是立即返回给驱动程序。如果发生这种情况,使用备用缓冲区填充环意味着您可以更长的时间而不会丢包。

Rx环1 /小型Rx缓冲区用于非巨型帧。如果您具有默认的NIC配置,则将使用唯一的铃声。

如何计算用于这些设置的给定值的内存量?

假设您正在谈论非巨型帧,则每个缓冲区需要足够大以存储整个网络数据包,大约1.5kb。因此,如果有8192个可用缓冲区,则将使用12MB。较大的环也将使用更多的内存,但是描述符很小(字节),因此实际上是您需要担心的缓冲区。

因为这些设置位于来宾操作系统中的NIC本身上,所以我认为它们是驱动程序设置。这使我认为使用的RAM可能是分页池或非分页池。

是的,这是一个非页面缓冲池。如果对环形缓冲区进行了分页,则在回切缓冲区时可能会导致丢包。

这里有我没有考虑到的问题吗?

我不确定这是否与您的情况有关,但值得注意的是,较大的环会增加网络rx路径的缓存占用空间。在微基准测试中,您会看到较大的环通常会损害性能。就是说,在现实生活中的应用中,如果数据包丢失了,那通常比在速度突发中获得小的性能提升要大得多。

资料来源:我曾在VMware工作。


1
感谢罗杰,出色的第一答案。我已经在这家公司呆了一段时间了,所以这个问题已经不在我的讨论范围内了,但是为了完整起见,是否存在将这些内存设置为最大值的内存使用问题?该KB文章听起来像您可以那样使用大量内存,但似乎数量很少。我之所以这样问,是因为除了试错法之外,还不清楚如何调整这些值的大小,因此,如果没有/很小的缺点,将它们设置为max可能是最简单的。
briantist

1
关于:内存使用情况,我要注意两件事:1)我同意,如果您不使用巨型帧,则最大设置下的内存量仍然很小。如果使用巨型帧,则缓冲区大小约为9kb,因此将使用更多内存。2)非页面缓冲池中的可用内存量小于主机上的内存总量。我不是专家,但是此链接对如何计算可用内存有很全面的介绍:blogs.technet.microsoft.com/markrussinovich/2009/03/10/…–
罗杰·雅各布森

太好了谢谢。我希望这个答案对以后的人有所帮助(如果我再次遇到这个问题,甚至可能是我!)
briantist 2017年

0

对于1-2-3点,我没有任何答复,但是您可以向您的虚拟工程师咨询有关Vmware主机配置的信息。如果他是VCP,他会明白的:)

您真的必须检查主机,因为Windows问题可能出在主机上而不是在来宾机上。

有很多硬件功能可以解释您的问题,directpath io,rss,vcpu,电源管理方案...

我可以给您一些帮助您的虚拟团队的链接,或者您:)

该链接关于调整主机 http://buildvirtual.net/tuning-esxi-host-networking-configuration/

而这个胖pdf:

http://www.vmware.com/pdf/Perf_Best_Practices_vSphere5.0.pdf

这是关于rss的内容:

http://kb.vmware.com/selfservice/microsites/search.do?language=zh_CN&cmd=displayKC&externalId=2008925


感谢您的答复,但我是VCP。这根本不是关于主机配置的。我链接到的Microsoft文章解释说,所涉及的性能计数器不应高于0,并且应在多个VM上。除了VMware KB文章中介绍的内容外,我试图了解有关vNIC设置的信息。
briantist

-1

我无法完全搜索并指向正确的页面:所以我要您自己寻找详细信息...(对不起)

在“故障转移群集”中,有4个设置可以进行调整。并且它们不会影响缓冲区,分页或非分页...。它改变了故障转移群集做出将节点视为“已移除”的决定的方式。这些设置是:

SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold

他们可能无法解决您的问题,但是对这些问题进行调整可能会暂时使您摆脱困境。

星期一回来时,如果您还有其他问题,我将返回这篇文章

HTH,埃德温。


PS:您能告诉我们您正在运行的Windows版本吗?
Edwin van Mierlo

那是Windows2008。在这几个月之后,我得到了VMware的答复,但我什至不在发生这种情况的那家公司。答案并不简单,我一直想通读他们的答案并发表一些看法,但是我没有时间。非常感谢您提供有关群集的提示,但目前无法尝试。
briantist '16

我只注意到原始帖子已经存在了几个月,在android-app中还不是很清楚...下次我会仔细看...同时我的回答对其他可能搜索的用户仍然有效对于类似的经验。
Edwin van Mierlo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.