使用 tcpdump 捕获数据包会延迟数秒,直到下次调用

使用 tcpdump 捕获数据包会延迟数秒,直到下次调用

我正在维护一个 40G 网络设备的硬件测试套件,我们的许多测试包括从测试主机通过tcpreplayDUT 发送手工制作的 UDP 数据包并返回到测试主机,我们在测试主机上捕获数据包tcpdump并处理输出。

测试主机配备Intel XL710 NIC,运行带有i40e驱动程序的Linux 5.4.0,设置如下所示:

************       **********       *******
|       th0> ----- >sw0  sw1> ----- >dut0 |
| Testhost |       | Switch |       | DUT |
|       th1< ----- <sw3  sw2< ----- <dut1 |
************       **********       *******

我们的问题是,在一次测试中,从 发送的最后几个(<10)个数据包th0通常不会显示在tcpdump的输出中,该输出在最后一个数据包发送后几秒钟内运行。我们通过观察交换机上的队列计数器th1确保在这种情况下数据包在运行sw3时已经离开,因此可以排除 DUT 故障。 没有列出被内核丢弃的数据包,丢失的数据包总是在下一次测试的后续调用中显示,这是意料之外的,但只有在通过链路发送了更多数据包之后才会显示。tcpdumptcpdumptcpdump

执行tcpdump--immediate-mode标志没有帮助。丢失的数据包也不会显示在rx_packets计数器输出中ethtool -S th1

我甚至不确定如何解释这一切,但我最好的猜测是这些数据包以某种方式被 NIC 或 Linux 网络堆栈缓冲,直到更多数据包到达才会被清除。我将不胜感激任何关于可能发生的事情的提示,我还可以做些什么来调试这个问题,或者如何解决这个问题。

相关内容