背景
我们曾遇到过 Windows 故障转移群集中断的事件。事后分析显示该节点已被“删除”,如本文所述。
我们最近才将该集群完全迁移到我们的 VMware 环境中,看起来上述事件可能是导致中断的原因。
相关的 VMware 知识库文章关于这一点讨论了增加Small Rx Buffers
和Rx Ring #1
设置,但警告说过多增加这些可能会大大增加主机的内存开销。
Network Interface\Packets Received Discarded
在对我们约 150 台 Windows VM 的性能计数器进行审核后,发现 16 个客户机上的 22 个 vNIC 有一些丢弃的数据包。
由于数量足够小,所以我不担心额外的内存使用会给主机带来负担,但我想了解这些设置的内存使用方式以及内存来自哪里。
问题
- 缓冲区数量和环大小之间有什么关系?
- 如何计算这些设置的给定值所使用的内存量?
- 由于这些设置位于客户操作系统内的 NIC 本身上,因此我假设它们是驱动程序设置。这让我认为使用的 RAM 可能是分页或非分页池。
- 它是否正确?
- 如果是这样,我应该担心吗?
- 这里是否存在我没有考虑到的问题?
我们正在尝试确定在受影响的虚拟机上将这些设置为最大值是否有缺点,除了 VMware 主机内存使用量。例如,如果我们增加客户机中池内存耗尽的风险,我们更倾向于从小处着手。
其中一些问题(或许是全部问题)可能并非特定于 VMware 或虚拟化。
答案1
缓冲区数量和环大小之间有什么关系?
它们相关但又独立。rx“环”是指内存中的一组缓冲区,用作将传入的网络数据包从主机(虚拟机管理程序)传递到客户机(Windows VM)的队列。网络驱动程序在客户机中保留内存,并将其映射到主机内存中。
当新的网络数据包进入主机时,它们会被放入环中的下一个可用缓冲区。然后,主机在客户机中触发 IRQ,客户机驱动程序会对此作出响应,将数据包从环中取出,并将其分派到客户机操作系统的网络堆栈,客户机操作系统可能会将其发送给打算接收数据包的客户机应用程序。假设数据包进入的速度足够慢,而客户机驱动程序处理它们的速度足够快,环中应该总是有一个空闲的插槽。但是,如果数据包进入的速度太快,或者客户机处理它们的速度太慢,环可能会变满,数据包可能会被丢弃(正如您在您的情况中所看到的那样)。
增加环大小可以帮助缓解此问题。如果增加环大小,环中一次将有更多可用插槽。这将转到第二个设置“小型 Rx 缓冲区”,即可用于填充环中插槽的可用缓冲区总量。至少需要有与环中插槽一样多的缓冲区。通常您需要更多。当客户机从环中取出缓冲区以提供给客户机网络堆栈时,它可能不会总是立即返回给驱动程序。如果发生这种情况,有备用缓冲区来填充环意味着您可以更长时间不丢包。
Rx 环 #1/小型 Rx 缓冲区用于非巨型帧。如果您有默认 NIC 配置,则将只使用这个环。
如何计算这些设置的给定值所使用的内存量?
假设您谈论的是非巨型帧,则每个缓冲区需要足够大才能存储整个网络数据包,大约 1.5kb。因此,如果您有 8192 个可用缓冲区,则将使用 12MB。更大的环也会使用更多内存,但描述符很小(字节),因此您真正需要担心的是缓冲区。
由于这些设置位于客户操作系统内的 NIC 本身上,因此我假设它们是驱动程序设置。这让我认为使用的 RAM 可能是分页或非分页池。
是的,这是一个非分页池。如果环形缓冲区已分页,则在缓冲区重新分页时可能会导致数据包丢失。
这里是否存在我没有考虑到的问题?
我不确定这是否与您的情况有关,但可能值得注意的是,更大的环会增加网络 rx 路径的缓存占用空间。在微基准测试中,您会看到更大的环通常会损害性能。也就是说,在实际应用中,如果数据包丢失,这通常比速度爆发中的小幅性能提升更为严重。
来源:我在 VMware 工作。
答案2
我对第 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 的:
答案3
我无法进行全面搜索并将您指向正确的页面:所以我请您自己查找详细信息......(抱歉)
在故障转移群集中,有 4 个设置可以调整;它们不会影响缓冲区或分页或非分页...它改变了故障转移群集决定将节点视为“已删除”的方式。这些设置是:
SameSubnetDelay SameSubnetThreshold CrossSubnetDelay CrossSubnetThreshold
它们可能无法解决您的问题,但调整这些可能会让您摆脱困境......
周一回来后,如果你还有其他问题,我会再回来看看这篇文章。
HTH,埃德温。