队列管理内容"/>
Python实现的基于数据包队列管理内容
基于数据包队列管理内容
实验内容
实验内容一
重现 Bufferbloat 结果
- h1(发送方)在对 h2 进行 iperf 的同时,测量 h1 的拥塞窗口值(cwnd)、r1-eth1 的队列长度(qlen)、h1 与 h2 间的往返延迟(rtt)
- 变化 r1-eth1 的队列大小,考察其对 iperf 吞吐率和上述三个指标的影响
实验内容二
解决 BufferBloat 问题
- Tail Drop
- RED
- CoDel
数据处理及结果
重现 Bufferbloat 结果
处理的可视化脚本位于 10-bufferbloat/reproduce_data.ipynb
中,实验根据获取的数据,利用 Matplotlib 画图,得到了下列结果。
CWND
上图为拥塞窗口大小随时间变化的曲线。测试刚开始时,队列大小为 100
的拥塞窗口迅速增长达到 600
的峰值,队列大小为 200
的的拥塞窗口迅速增长达到 1200
的峰值。可见该实验环境下,拥塞窗口峰值大小为队列大小的两倍。
接着拥塞窗口迅速回落到队列大小一致的水平,接着再次增长。拥塞窗口随收包增长,随丢包下降。另外可以看到大队列后续的波动较小队列不明显。
QLEN
上图为即时队列长度随时间变化的曲线。队列大小为 100
的曲线的上界为 100
。测试刚开始时队列快速上升达到峰值,当队列满时,直接丢弃新接收的包,由于发送速率骤降,使得队列长度降低至最大队列长度的 40% 左右。随后一直这次循环下去。
RTT
上图为 RTT 随时间变化的曲线。测试刚开始时,由于接收队列的快速增长,网络延时急剧增加,随后也随着队列缩短而减少。之后的时间内,延时随着队列长度的变化而变化,波动明显。另外可以看到大队列后续的波动较小队列不明显。
iperf 吞吐率
队列大小 200
时,iperf Transfer 成功的带宽平均大约为 29.4Mb/s,峰值为 37.7 Mb/s,有 2/3
的时间区间会下降到 0。
队列大小 100
时,iperf Transfer 成功的带宽平均大约为 15Mb/s,峰值为 37.7 Mb/s,有 1/3
的时间区间会下降到 0。
队列大小 10
时,iperf Transfer 成功的带宽平均大约为 9Mb/s,峰值为 12.6 Mb/s,最低为 6.9Mb/s。
因此可以看出队列越长,iperf Transfer 为 0 的可能性越大,但是 Transfer 成功时的带宽也越大。
解决 BufferBloat 问题
上图中出现了三种方式来 BufferBloat 问题的曲线。
可以看出,tail drop 的队列延时远高于 RED 和 CoDel。其中 CoDel 的性能表现最佳。
另外值得注意的是,tail drop 曲线一直出现“尖端”情况,和 ppt 中稳定的一段峰值不同,这是因为 Mininet 环境下仿真环境的差异导致的。在 Mininet 中,maxq 参数实际上是一个模拟延迟和丢包的批处理大小,与真实的队列大小有区别,只是近似仿真。因此结果存在差异。
更多推荐
Python实现的基于数据包队列管理内容
发布评论