Thuật toán tăng giảm

11 417 1
Thuật toán tăng giảm

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Thuật toán tăng giảm

Phụ lục PHẦN PHỤ LỤC Thuật toán tăng giảmTăng cộng giảm nhân AIMD #define_param a range 0.1 to 1 default 0.1 #define_param b range 0.1 to 0.9 default 0.5 maxrate = 1.0; if(traffic > 1){ rate = rate * b; } else{ rate = rate + a; rate = min(rate, maxrate); } • Tăng cộng giảm cộng AIAD #define_param a range 0.1 to 0.9 default 0.2 #define_param b range 0.1 to 0.9 default 0.3 maxrate = 1.0; minrate = 0.0; if(traffic > 1){ rate = rate - b; rate = max(rate, minrate); } else{ rate = rate + a; rate = min(rate, maxrate); } • Tăng nhân giảm cộng MIAD #define_param a range 1 to 2 default 1.2 #define_param b range 0.1 to 0.9 default 0.5 maxrate = 1.0; minrate = 0.0; if(traffic > 1){ rate = rate - b; rate = max(rate, minrate); } else{ rate = rate * a; rate = min(rate, maxrate); } Phụ lục • Tăng nhân giảm nhân MIMD #define_param a range 1 to 2.0 default 1.2 #define_param b range 0.1 to 0.9 default 0.5 maxrate = 1.0; if(traffic > 1){ rate = rate * b; } else{ rate = rate * a; rate = min(rate, maxrate); } Kịch bản xây dựng trong ns2 #--------- So do ket noi mang ----------------------------------------------# # n0 # \ Bottleneck Dich # n1--R0-----------------------R1 # / # n2 # # Cac luong xcp va tcp dung chung router xcp Queue/XCP set tcp_xcp_on_ 1 Agent/TCP set minrto_ 1 # Tao doi tuong mo phong set ns [new Simulator] $ns use-scheduler Heap # Tao file trace set f_all [open out.tr w] $ns trace-all $f_all #----------------------------------------------------------------------------- # Dinh nghia cac ham su dung trong chuong trinh chinh #----------------------------------------------------------------------------- # Tao tham so cho hang RED proc set-red-params { qsize } { Queue/RED set thresh_ [expr 0.6 * $qsize] Queue/RED set maxthresh_ [expr 0.8 * $qsize] Phụ lục Queue/RED set q_weight_ 0.001 Queue/RED set linterm_ 10 Queue/RED set bytes_ false ; Queue/RED set queue_in_bytes_ false ; Agent/TCP set old_ecn_ true Queue/RED set setbit_ true } #---------------------------------------------------------------------------- # Tao topo mang proc create-topology2 { BW delay qtype qsize numSideLinks deltaDelay } { global ns # Thiet lap kich co hang den kich co duong truyen # Gia su rang kich co goi la 1000Bytes if { $qsize == 0 } { set qsize [expr round([expr ($BW / 8) * 2 * $delay])] } #Khai bao 2 nut R0 R1 set i 0 while { $i < 2 } { global R$i set R$i [$ns node] incr i } $R0 color red $R1 color blue $R0 label "That co chai" $R1 label "Dich" # Khai bao link: nodes bw delay queue $ns duplex-link $R0 $R1 [set BW]Mb [set delay]ms $qtype $ns queue-limit $R0 $R1 $qsize $ns queue-limit $R1 $R0 $qsize # Xu li hang bi that co chai, cho phep thiet lap cac tham so RED global Bottleneck rBottleneck set Bottleneck [[$ns link $R0 $R1] queue] set rBottleneck [[$ns link $R1 $R0] queue] global l rl set l [$ns link $R0 $R1] set rl [$ns link $R1 $R0] global all_links set all_links "$l $rl " Phụ lục # Duong truyen nha'nh co cung bang thong nhu duong that co chai set i 0 while { $i < $numSideLinks } { global n$i q$i rq$i l$i rl$i set n$i [$ns node] $ns duplex-link [set n$i] $R0 [set BW]Mb [expr $delay + $i* $deltaDelay]ms $qtype $ns queue-limit [set n$i] $R0 $qsize $ns queue-limit $R0 [set n$i] $qsize set q$i [[$ns link [set n$i] $R0] queue] set rq$i [[$ns link $R0 [set n$i]] queue] set l$i [$ns link [set n$i] $R0] set rl$i [$ns link $R0 [set n$i]] set all_links "$all_links [set l$i] [set rl$i]" incr i } } #------------------------------------------------------------------------------------------ #------Lop GeneralSender: can thiet cho phia goi ftp------------------------------ Class GeneralSender -superclass Agent GeneralSender instproc init { id node rcvrTCP otherparams } { global ns $self next $self instvar tcp_ id_ ftp_ node_ tcp_rcvr_ tcp_type_ set id_ $id set node_ $node if { [llength $otherparams] > 1 } { set TCP [lindex $otherparams 1] } else { set TCP "TCP/Reno" } set tcp_type_ $TCP set tcp_ [new Agent/$TCP] $tcp_ set packetSize_ 1000 $tcp_ set class_ $id set ftp_ [new Source/FTP] $ftp_ set agent_ $tcp_ $ns attach-agent $node $tcp_ $ns connect $tcp_ $rcvrTCP set tcp_rcvr_ $rcvrTCP Phụ lục set startTime [lindex $otherparams 0] $ns at $startTime "$ftp_ start" puts " Khoi tao phia goi $id_ tai thoi gian t= $startTime s" } GeneralSender instproc trace-xcp parameters { $self instvar tcp_ id_ tcpTrace_ global ftracetcp$id_ ns set ftracetcp$id_ [open xcp$id_.tr w] set tcpTrace_ [set ftracetcp$id_] $tcp_ attach-trace [set ftracetcp$id_] if { -1 < [lsearch $parameters cwnd] } { $tcp_ tracevar cwnd_ } } #----------------------------------------------------------------------------------------- #------------------------Thuc hien chuc nang ve do thi----------------------# # do thi bien trace xcp proc plot-xcp { TraceName nXCPs PlotTime what } { exec rm -f xgraph_cwnd.tcp set f [open xgraph_cwnd.tcp w] set a cwnd puts $f "TitleText: $TraceName" puts $f "Device: Postscript" foreach i $nXCPs { # trace TCP duoc flushed khi cac nguon ngung exec rm -f temp.tcp exec touch temp.tcp global ftracetcp$i if [info exists ftracetcp$i] { flush [set ftracetcp$i] } set result [exec awk -v PlotTime=$PlotTime -v what=$what { { if (( $6 == what ) && ($1 > PlotTime)) { print $1, $7 >> "temp.tcp"; } } } xcp$i.tr] puts $f \"$what$i exec cat temp.tcp >@ $f Phụ lục puts $f "\n" flush $f } close $f exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "cwnd (KBytes)" xgraph_$a.tcp & return } #------------------------------------------------------------------------------------ proc plot-xcp-queue { PlotTime traceFile } { exec rm -f xcp_queue exec rm -f temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y exec touch temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y exec awk -v PT=$PlotTime { { if (($1 == "q" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.q" } else if (($1 == "a" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.a" } else if (($1 == "p" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.p" } } } $traceFile set ff [open xcp_queue w] puts $ff "TitleText: Trang thai hang DROPTAIL XCP" puts $ff "Device: Postscript \n" puts $ff \"queue exec cat temp.q >@ $ff puts $ff \n\"ave_queue exec cat temp.a >@ $ff puts $ff \n\"prob_drop exec cat temp.p >@ $ff close $ff exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "Queue (goi)" xcp_queue & Phụ lục } #------------------------------------------------------------------------------------- proc plot-red-queue { PlotTime traceFile } { exec rm -f red_queue exec rm -f temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y exec touch temp.q temp.a temp.p temp.avg_enqueued temp.avg_dequeued temp.x temp.y exec awk -v PT=$PlotTime { { if (($1 == "Q" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.q" } else if (($1 == "a" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.a" } else if (($1 == "p" && NF>2) && ($2 > PT)) { print $2, $3 >> "temp.p" } } } $traceFile set ff [open red_queue w] puts $ff "TitleText: Trang thai hang RED TCP" puts $ff "Device: Postscript \n" puts $ff \"queue exec cat temp.q >@ $ff puts $ff \n\"ave_queue exec cat temp.a >@ $ff puts $ff \n\"prob_drop exec cat temp.p >@ $ff close $ff exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "Queue (goi)" red_queue & } #--------------------------------------------------------------------------------------- proc plot-red {varname filename PlotTime} { exec rm -f $filename exec touch $filename set result [exec awk -v PlotTime=$PlotTime -v what=$varname -v file=$filename { { Phụ lục if (( $1 == what ) && ($2 > PlotTime)) { print $2, $3 >> file ; } } } ft_red_Bottleneck.tr] exec xgraph -P -bg white -fg black -zg black -x "Thoi gian (s)" -y "Hieu qua su dung" -t "Hieu qua su dung router XCP khi co 1 luong TCP" $filename } #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- MO PHONG -*-*-*-*-*-*-*-*--*-*-*-*-* set seed 472904 set qType XCP set BW 20; # Mb/s set nXCPs 3; # so luong set delay 10; # ms set rtg [new RNG] $rtg seed $seed # thiet lap bo dem den kich co duong dan set qSize [expr round([expr ($BW / 8.0) * 4 * $delay * 1.0])]; puts "\n CAC THONG SO MO PHONG\n" puts " Bang thong = $BW Mb/s\n" puts " Do tre = $delay ms\n" puts " Kich co hang = $qSize KBytes\n" set tracedXCPs "0 1 2 3 " set SimStopTime 30 set PlotTime 0 #------------------------------Khoi tao mo phong----------------------------------# # Goi ham tao topo set-red-params $qSize create-topology2 $BW $delay $qType $qSize $nXCPs 0.0 foreach link $all_links { set queue [$link queue] switch $qType { "XCP" { $queue set-link-capacity [[$link set link_] set bandwidth_]; } "DropTail/XCP" { Phụ lục $queue set-link-capacity-Kbytes [expr [[$link set link_] set bandwidth_] / 8000]; } default { puts "Incorrect qType $qType" exit 0 } } } # Tao cac nguon: # Tao 3 nguon XCP set i 0 while { $i < $nXCPs } { set StartTime [expr [$rtg integer 1000] * 0.001 * (0.01 * $delay) + $i * 0.0] set rcvr_XCP [new Agent/TCPSink/XCPSink] $ns attach-agent $R1 $rcvr_XCP set src$i [new GeneralSender $i [set n$i] $rcvr_XCP "$StartTime TCP/Reno/XCP"] [[set src$i] set tcp_] set packetSize_ 1000 [[set src$i] set tcp_] set window_ [expr $qSize * 10] $ns color $i Blue incr i } # Tao 1 nguon TCP tu node 0 set StartTime 0.0900000000000000023 set rcvr_TCP [new Agent/TCPSink] $ns attach-agent $R1 $rcvr_TCP set src$i [new GeneralSender $i $n0 $rcvr_TCP "$StartTime TCP/Reno"] [[set src$i] set tcp_] set packetSize_ [expr 100 * ($i +10)] # don vi Byte [[set src$i] set tcp_] set window_ [expr $qSize * 10] # KByte $ns color $i Red incr i #------------------------------------- Trace --------------------------------------------# set i 0 # Trace cac nguon foreach i $tracedXCPs { [set src$i] trace-xcp "cwnd" } # Trace cac hang Phụ lục foreach queue_name "Bottleneck rBottleneck" { set queue [set "$queue_name"] switch $qType { "XCP" { global "ft_red_$queue_name" global "tcp_$queue_name" set "ft_red_$queue_name" [open ft_red_[set queue_name].tr w] $queue attach [set ft_red_$queue_name] set "tcp_$queue_name" [open tcp.tr w] set tcpq [$queue set vq_(1)] $tcpq attach [set tcp_$queue_name] $tcpq trace curq_ $tcpq trace ave_ $tcpq trace prob1_ } "DropTail/XCP" {} } } #------------------------ Chay mo phong----------------------------------# proc flush-files {} { set files "f_all ft_red_Bottleneck ft_red_rBottleneck" global tracedXCPs foreach file $files { global $file if {[info exists $file]} { flush [set $file] close [set $file] } } foreach i $tracedXCPs { global src$i set file [set src$i tcpTrace_] if {[info exists $file]} { flush [set $file] close [set $file] } } } proc finish {} { global ns if {[info exists f]} { . Phụ lục PHẦN PHỤ LỤC Thuật toán tăng giảm • Tăng cộng giảm nhân AIMD #define_param a range 0.1 to 1 default 0.1. rate = rate * b; } else{ rate = rate + a; rate = min(rate, maxrate); } • Tăng cộng giảm cộng AIAD #define_param a range 0.1 to 0.9 default 0.2 #define_param

Ngày đăng: 24/04/2013, 09:47

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan