NS 2.35コジヒョン書-実験9ノート-キュー管理メカニズム

4483 ワード

メモを覚えています.
現在、REDのリアルタイムと平均キュー長の表示が実現するが、表示される図形はwpiである.eduの中の动きは少し异なっています???
でもコジヒョンはmyfifoを使っていて、自分で書いたキューのはずです
droptailに変更すると、trファイルに関連付けられてエラーが発生します???解決策がわからない
DropTailキューはtraceが追跡されることをサポートしていないようで、traceがサポートされているかどうかはキューを実現するコードの中で体現されるべきで、REDには明らかにtraceの方面の内容があるため、DropTailの特性をテストしたいならば、REDのパラメータをDropTailの極端な情況に設定することができて、後でtraceがどのようにサポートするかを研究する時間があって、およびどのようにREDパラメータをDropTailの形式に設定します!
RED文献では、REDとdroptailの平均キュー長とスループットの関係を比較し、類似の図を作成したい
Tclコードは以下の通りです.
# Kezhiheng, exper 9, test DropTail and RED

if {$argc != 2} {
    puts "Usage: ns queue.tcl queuetype_ noflow_"
    puts "Example: ns queue.tcl DropTail 10"
    puts "queuetype_: DropTail or RED"
    exit
}

set par1 [lindex $argv 0]
set par2 [lindex $argv 1]

#Create a simulator object
set ns [new Simulator]

set tracefd [open zout$par1-$par2.tr w]
$ns trace-all $tracefd
set namtracefd [open out.nam w]
$ns namtrace-all $namtracefd

proc finish {} {
    global ns tracefd namtracefd par2 tcp startT
    $ns flush-trace
    close $tracefd
    close $namtracefd
    
    set time [$ns now]
    set sum_thrpt 0

    #throughput=number of ack recv * pktsize / time
    #number of ack recv = number of packet sent
    for {set i 1} {$i<=$par2} {incr i} {
        # ack_ tcp 、 , highest ACK received, 0,ns manual p194
        set ackno_($i) [$tcp($i) set ack_]
        # tcp packetSize_ 1000
        set thrpt($i) [expr $ackno_($i)*1000*8/($time-$startT($i))]
        puts $thrpt($i)
        set sum_thrpt [expr $sum_thrpt+$thrpt($i)]
    }

    set avethrpt [expr $sum_thrpt/$par2]
    puts "average throughput: $avethrpt (bps)"

    #exec nam out.nam &
    exit 0
}

# Set router nodes
set r1 [$ns node]
set r2 [$ns node]
$ns duplex-link $r1 $r2 56kb 10ms $par1
$ns queue-limit $r1 $r2 50

# Set TCP src, dest, link
for {set i 1} {$i<=$par2} {incr i} {
    set s($i) [$ns node]
    set d($i) [$ns node]
    
    $ns duplex-link $s($i) $r1 10Mb 1ms DropTail
    $ns duplex-link $r2 $d($i) 10Mb 1ms DropTail
}

# 
set queuefd [open q-$par1-$par2.tr w]
set q_ [[$ns link $r1 $r2] queue]
$q_ trace curq_
$q_ trace ave_
$q_ attach $queuefd

# DropTail ,RED ,ns manual p74
if {$par1 == "RED"} {
    # packet mode, not byte mode
    $q_ set bytes_ false
    $q_ set queue_in_bytes_ false
}

# Create tcp and ftp flow
for {set i 1} {$i<=$par2} {incr i} {
    set tcp($i) [$ns create-connection TCP/Reno $s($i) TCPSink $d($i) 0]
    $tcp($i) set fid_ $i
    
    set ftp($i) [$tcp($i) attach-app FTP]
}

# Random start ftp flow
set rng [new RNG]
$rng seed 1

set rvStart [new RandomVariable/Uniform]
$rvStart use-rng $rng
$rvStart set min_ 0.0
$rvStart set max_ 1.0

for {set i 1} {$i<=$par2} {incr i} {
    set startT($i) [expr [$rvStart value]]
    puts "startT($i) $startT($i) sec"
    $ns at $startT($i) "$ftp($i) start"
}

$ns at 200.0 "finish"

$ns run

View Code
# 
set q_ [[$ns link $r1 $r2] queue]
[$ns link $r1 $r2], $link
[[$ns link $r1 $r2] queue] [$link queue], link queue
$q_ trace curq_, $queue trace 
$q_ trace ave_

これはqueue traceファイルの内容です.
a 0.0515932 0.0288164
Q 0.0515932 1
a 0.0524252 0.0856189
Q 0.0524252 2
a 0.0891547 0.169601
Q 0.0891547 3
a 0.217742 0.251163
a 0.218574 0.359191
Q 0.218574 4

ここで、aは平均キュー長を表し、Qは現在のキュー長を表し、時にはaが複数あることが見られるが、Qは1つしかない.平均長が計算されているため、瞬時長は変化していない.瞬時長は2つの同じ長さがつながっていないからである.これは、後で抽出される時間長データの描画に影響を及ぼさず、gnuplotは自動的にx軸の時間描画を行います.
 
これはaとQを抽出するawkコードで、queue traceファイルからコンテンツを読み出し、それぞれaとQを異なるファイルに書き込むために使用されます.
BEGIN{
    # program initialize

}

{

    class = $1;
    time = $2;
    value = $3;

    #
    if(class=="a")
    {
        print time, value >> "tempa"
    }
    else if(class=="Q")
    {
        print time, value >> "tempq"
    }

}

END {
# When read over, start to calculate

}

View Code

Gnuplotのコード:
#!/bin/bash

gnuplot -persist<<EOF

set terminal gif
set output "RED.gif"
set title "RED average and current queue size"
set xlabel "time"
set ylabel "queue size"
#unset key

plot "tempa" with linespoints, "tempq" with linespoints

EOF

View Code

描画されたグラフィック:
図形の動きはwpiに似ていない.eduのグラフィック:指数重み付けの記憶因子が比較的大きいようで、平均キュー長は現在のキュー長の変換に伴って激しく変化しない.