如何模拟简单交换机的数据包缓冲区内部发生的情况?

如何模拟简单交换机的数据包缓冲区内部发生的情况?

我正在调试存储转发千兆交换机中 UDP 数据包丢失的情况,我想直观地了解交换机内部发生的情况,以便更好地了解问题的本质。

场景很简单 - 两个突发数据流通过交换机内部的两个端口,并且都希望通过第三个端口(两个端口共用)离开交换机。因此,交换机需要在数据包缓冲区中保留一些数据一段时间。

问题是:根据我的简单计算,缓冲区应该足够大,可以处理我正在检查的情况。一个数据流每 1.56 毫秒发送 25 kB 的突发数据(分为 1514 B 数据包),另一个数据流每 1 毫秒发送 60 kB 的突发数据。现在,即使是像 Netgear GS105E 这样的小型交换机也有 128 kB 大小的缓冲区。因此,简单的数学运算(25+60 < 128)表明,即使流同时进入,它也应该可以工作(假设没有其他大量流量)。

实际测试表明,一些交换机上两个流的大量数据包都会丢失(这似乎与缓冲区大小有关,但不仅仅是缓冲区大小)。在我的模拟中,当设置为 128 kB 时,我无法使缓冲区溢出。

我为 24 kB 大小的缓冲区录制了这个动画,其中存在溢出。但是,您可以轻松看到,只需将缓冲区增加几个字节即可解决问题,所有数据包都会通过。

我在这个模拟中做了一些简化。所有数据包都具有相同的 QoS(在实际情况下也是如此)。因此,我从模拟中省略了 QoS 队列,并将所有流量视为同等重要。接下来,我省略了缓冲区的内存管理。我可以想象这是问题的一个重要部分,但如果我的简化与完美分配的误差超过 10%,我会感到惊讶。我还假装交换机在收到第一个字节时知道帧长度,以便它在开始时保留所有所需的内存。由于我找不到有关端口入口/出口队列大小的任何文档,我假设它们都放置在共享数据包缓冲区中,它们可以根据需要占用缓冲区的大部分(尽管我认为罪魁祸首可能在这里的某个地方)。我将每个数据包的处理延迟设置为 512 ns(64 B 数据包的传播延迟)。

我不确定它是否起作用,但这些流由碎片化的 UDP 数据包组成(即 25 kB 突发是一个被碎片化为 17 个 IP 碎片的单个 UDP 数据包)。第二个流将突发创建为 2 或 3 个 20 kB UDP 数据包,每个被碎片化为 14 个 IP 碎片。

Iperf 3.7 复制类似于真实流的命令是:

iperf3 -c sink -u -b 128M -t 600 -l 25256 --pacing-timer 1560
iperf3 -c sink -u -b 400M -t 600 -l 20k --pacing-timer 1000

你知道我还忘记考虑什么因素,导致模拟结果与现实相差甚远吗?谢谢你的帮助!

动画的源代码位于https://gist.github.com/peci1/a0346538acc6c289b2c6d596b184ad21

模拟通过交换机的数据流

这是我的实际实验结果表。数据流一是固定的 - 128 Mbps,25 kB UDP 数据包,每 1.56 毫秒。我正在更改第二个流的参数,试图找到第一个流的数据包开始被交换机丢失的极限。我正在更改指定-lUDP 数据包大小的 (长度) 参数和-b指定这些数据包应生成多少带宽的 (带宽) 参数。--pacing-timer对于第二个流,始终设置为 1000。您可以看到 D-Link 和 Netgear GS105 根本无法应对 60 kB 的突发。GS108 比 GS105 好得多,而它拥有几乎相同的交换机芯片(同一个“家族”,只是端口数量不同,缓冲区稍大一些)。

转变 缓冲区大小 [kB] 最大流量1.5kB突发 最大突发流量20kB 最大突发流量60kB
Gigablox Rugged(VSC7512) 220 825 Mbps 825 Mbps 825 Mbps
Gigablox(RTL8367N-VB-CG) 250 730 Mbps 750 Mbps 790 Mbps
D-Link DIS-100G-5W (QCA8337N-AL3C) 128 110 Mbps 1 Mbps 每次爆发都会丢失数据包
合勤 XGS 1210-12 (RTL9302B) 1500 800 Mbps 830 Mbps 830 Mbps
Netgear GS310-TP (RTL8380M) 520 830 Mbps 830 Mbps 835 Mbps
Netgear GS308T (RTL8380M) 520 830 Mbps 835 Mbps 835 Mbps
Netgear GS108 v3(BCM53118) 192 630 Mbps 660 Mbps 710 Mbps
Netgear GS105E (BCM53114) 128 120 Mbps 1 Mbps 每次爆发都会丢失数据包
Renkforce RF-4270245 740 Mbps 760 Mbps 800 Mbps
Mikrotik RB260GS (AR8327) 128 835 Mbps 835 Mbps 835 Mbps
瞻博 EX2300 4GB? 800 Mbps 830 Mbps 830 Mbps

(该问题已从https://networkengineering.stackexchange.com/questions/78529/how-to-simulate-what-happens-inside-the-packet-buffer-of-a-simple-switch它被标记为离题)。

相关内容