ns2仿真学习(四)-CoDel的队列管理仿真
2017-11-03 15:56
405 查看
路由器队列管理机制CoDel的ns2的仿真代码补丁[1]。为ns2打CoDel补丁的步骤参考[1]。
仿真脚本参考上一篇文章,将队列的管理机制由DropTail改为CoDel。脚本更改部分如下:
其他的脚本处理与上文一致。
最终的对比。
这个图与上文的图进行对比,bic仍旧占用了大部分带宽。但是CoDel使得reno与vegas得到相对多的带宽。
下面对比在仿真十秒后启动bic算法,两种队列管理机制的对比:
结论仍是如此,CoDel相对来说,改善了reno与vegas的带宽竞争能力。但是CoDel主要是限制了缓冲队列长度的积累,对于不同拥塞机制的tcp的公平性仍显得无能为力。怎么实现实现不同拥塞控制tcp流竞争公平性,是值得研究的议题。
在相同的条件下,对比下数据包的单向时延。我只检出了两种情况下与cubic相关的数据,计算时延脚本oneway_delay.awk。脚本修改自柯志亨老师的教程,抱歉找不到地址了。
从上图,可以明显看出,采用了CoDel队列管理机制的数据包单向时延较小。
[1]bufferbloat.net
[2]Gnuplot 画多条线
[3]Cronkite-Ratcliff B, Bergman A, Vargaftik S, et al. Virtualized congestion control[C]//Proceedings of the 2016 conference on ACM SIGCOMM 2016 Conference. ACM, 2016: 230-243.
仿真脚本参考上一篇文章,将队列的管理机制由DropTail改为CoDel。脚本更改部分如下:
# CoDel values # interval to keep min over set interval [delay_parse 100ms] # target in ms. set target [delay_parse 5ms] Queue/CoDel set target_ $target Queue/CoDel set interval_ $interval # Create the links: $ns duplex-link $n0 $n1 100Mb 64ms CoDel
其他的脚本处理与上文一致。
最终的对比。
这个图与上文的图进行对比,bic仍旧占用了大部分带宽。但是CoDel使得reno与vegas得到相对多的带宽。
下面对比在仿真十秒后启动bic算法,两种队列管理机制的对比:
结论仍是如此,CoDel相对来说,改善了reno与vegas的带宽竞争能力。但是CoDel主要是限制了缓冲队列长度的积累,对于不同拥塞机制的tcp的公平性仍显得无能为力。怎么实现实现不同拥塞控制tcp流竞争公平性,是值得研究的议题。
在相同的条件下,对比下数据包的单向时延。我只检出了两种情况下与cubic相关的数据,计算时延脚本oneway_delay.awk。脚本修改自柯志亨老师的教程,抱歉找不到地址了。
BEGIN { #程式初始化,設定一變數以記錄目前最高處理封包的ID。 highest_packet_id = 0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; type = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12; if(type=="tcp"&&node_1_address=="4.0"&&node_2_address=="5.0") { #記錄目前最高的packet ID if ( packet_id > highest_packet_id ) highest_packet_id = packet_id; #記錄封包的傳送時間 if ( start_time[packet_id] == 0 ) start_time[packet_id] = time; #記錄CBR (flow_id=2) 的接收時間 if ( action == "r" ) { end_time[packet_id] = time; } } } END { #當資料列全部讀取完後,開始計算有效封包的端點到端點延遲時間 for ( packet_id = 0; packet_id <= highest_packet_id; packet_id++ ) { start = start_time[packet_id]; end = end_time[packet_id]; packet_duration = end - start; #只把接收時間大於傳送時間的記錄列出來 if ( start < end ) printf("%f %f\n", start, packet_duration); } }
从上图,可以明显看出,采用了CoDel队列管理机制的数据包单向时延较小。
[1]bufferbloat.net
[2]Gnuplot 画多条线
[3]Cronkite-Ratcliff B, Bergman A, Vargaftik S, et al. Virtualized congestion control[C]//Proceedings of the 2016 conference on ACM SIGCOMM 2016 Conference. ACM, 2016: 230-243.
相关文章推荐
- TSQ/CoDel队列管理以及TCP BBR如何解决Bufferbloat问题
- 离散事件模拟-银行管理 模拟,队列
- 三队列排队论仿真(Java)
- MSMQ(2)——.net下的消息队列管理空间
- 管理 I/O 队列
- 基于google earth 的航路管理和飞行仿真系统
- Linux TC基于CBQ队列的流量管理范例
- 工业监控,SCADA,组态,仿真, 建模, 源程序,自动化管理,HMI控件,VC++源代码组件库
- 煤矿, 矿山, 石油,化工监控与仿真, 信息, 管理, 软件, 图形组件库VC++源代码
- 队列以一种先进先出的方式管理数据
- 离散事件模拟-银行管理——队列思想(双队列)
- IBM Message Broker(IBM ESB产品)启停代理、控制管理器、队列的顺序
- 队列管理对QoS影响的模拟与分析
- 停车场管理(栈和队列)
- Linux 的并发可管理工作队列机制探讨
- FOS的消息队列管理
- laravel通过supervisor管理beanstalkd任务队列
- linux高速缓冲管理中的哈希队列、空闲链表以及延迟写和提前读策略
- FreeRTOS学习浅解之三-队列管理
- 消息队列管理参考资料