应用程序 A 通过 TCP 向 B 发送流量。B 使用多播 (UDP) 将流量进一步发送到 C。D 上的应用程序通过 TCP 获取此数据。
A -> (TCP) -> B -> (UDP) -> C -> (TCP) -> D
A - Windows Server
B - ESX 主机上的 Linux VM
C - 另一个 ESX 主机上的 Linux VM(无负载 - 仅有一个 VM)
D - Windows 客户端
什么时候乙将流量发送到C由于 NIC(ixgbe)级别上发生的流量(突发)的性质,可以观察到多次丢弃(rx_missed_errors 直接对应于正在运行的应用程序C观察)。
增加环形缓冲区的大小(C) 达到最大值 (4096) 会使情况变得更糟。
所有连接均为 10G,流量水平不超过 2Gbit/s(突发期间)(使用 检查sar -n DEV 1
)。
问题:
如何测量间隔小于 1 秒的突发事件?
为什么增加戒指尺寸会使情况变得更糟?
有没有办法减慢 B 上的流量,以便可以在 C 上处理而不会在 NIC 级别丢失?(流量整形,更改 tcp 窗口大小/缓冲区大小?)
为什么如果我用 Windows 主机替换 B,则根本不会发生丢失,就好像 udp 突发以更易于理解的方式形成一样。
我还能用什么其他方法来分析这个问题?
谢谢