[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ns] monitor-queue & throughput
Dear all,
In my network topology:
n0
\
\ 1.5Mbps
n1 ------n3
/
/
n2
I use QUEUE-MONITOR object to get bdepartures_, and then try to get the
throughput of the link n1 n3. Like Marc Greis's tutorial, I use record to
get the bdepartures_ peroidically.
set qmon_size [$ns monitor-queue $n1 $n3 [open queue.tmp w] 0.05]
proc record {} {
global ns qmon_size qsize qbw qlost old_departure
set time 0.05
set now [$ns now]
puts $qmon_size instvar size_ pkts_ barrivals_ bdepartures_
parrivals_ pdepartures_ bdrops_ pdrops_
puts $qsize "$now [$qmon_size set size_]"
1? puts $qbw "$now [expr ($bdepartures_-$old_departure)*8/$time]"
1? set old_departure $bdepartures_
2-> #if { $now !=0} { puts $qbw "$now [expr $bdepartures_*8/$now]" }
puts $qlost "$now $pdrops $bdrops_"
$ns at [expr $now+$time] "record"
}
in record proc, there are two ways to calculate the throughput. First I
use [expr ($bdepartures_-$old_departure)*8/$time], but the throughput
result is above 1.5Mbps, since I use bdepartures_ not barrivals_, I can
not understand why I get this result.
Through the other one, I can get the correct result.
Does anybody explain why the throughput is above the bandwidth 1.5Mbps.
Thanks in advance.
I attach my script. throughput.tcl
puts " n0"
puts " \\"
puts "5Mb,10ms \\ 1.5Mb,10ms"
puts " n1 ---------- n3"
puts "5Mb,10ms /"
puts " /"
puts " n2"
#Create a simulator object
set ns [new Simulator]
#On definit les codes couleurs
$ns color 0 red
$ns color 1 blue
set namf [open queue.nam w]
set nsf [open queue.ns w]
$ns namtrace-all $namf
$ns trace-all $nsf
set qsize [open queuesize.tr w]
set qbw [open queuebw.tr w]
set qlost [open queuelost.tr w]
#On cree les noeuds
set n0 [$ns node]
set n1 [$ns node]
set n2 [$ns node]
set n3 [$ns node]
#On annote les noeuds
$n1 label "Switch (25)"
#On cree la procedure de fin
proc finish {} {
global ns namf qsize qbw qlost
$ns flush-trace
close $qsize
close $qbw
close $qlost
exec nam queue.nam &
exec xgraph queuesize.tr -t "Queuesize" &
exec xgraph queuebw.tr -t "Throughput" &
exec xgraph queuelost.tr -t "Lost" &
exit 0
}
#On cree la procedure d'enregistrement
set old_departure 0
proc record {} {
global ns qmon_size qmon_bw qmon_lost qsize qbw qlost old_departure
set ns [Simulator instance]
set time 0.05
set now [$ns now]
$qmon_size instvar size_ pkts_ barrivals_ bdepartures_ parrivals_ pdepartures_ bdrops_ pdrops_
puts $qsize "$now [$qmon_size set size_]"
puts $qbw "$now [expr ($bdepartures_ - $old_departure)*8/$time]"
set old_departure $bdepartures_
#if { $now !=0 } { puts $qbw "$now [expr $bdepartures_*8/$now]" }
#puts $qbw "$now [expr $bdepartures_*8/$time] $bdepartures_"
#set bdepartures_ 0
puts $qlost "$now $pdrops_ $bdrops_"
$ns at [expr $now+$time] "record"
}
#On cree les liens
$ns duplex-link $n1 $n3 1.5Mb 10ms DropTail
$ns duplex-link $n0 $n1 5Mb 10ms DropTail
$ns duplex-link $n2 $n1 5Mb 10ms DropTail
$ns duplex-link-op $n1 $n3 orient right
$ns duplex-link-op $n0 $n1 orient right-down
$ns duplex-link-op $n2 $n1 orient right-up
$ns duplex-link-op $n1 $n3 queuePos 0.5
$ns queue-limit $n1 $n3 25
set tick 0.5
set tcp0 [$ns create-connection TCP $n0 TCPSink $n3 0]
$tcp0 set packetSize_ 1460
$tcp0 set tcpTick_ $tick
$tcp0 set fid_ 0
#Create a CBR traffic source and attach it to tcp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 set packetSize_ 1460
$cbr0 set rate_ 1200k
$cbr0 attach-agent $tcp0
set tcp1 [$ns create-connection TCP $n2 TCPSink $n3 1]
$tcp1 set packetSize_ 1460
$tcp1 set tcpTick_ $tick
$tcp1 set fid_ 1
#Create a CBR traffic source and attach it to tcp1
set cbr1 [new Application/Traffic/CBR]
$cbr1 set packetSize_ 1460
$cbr1 set rate_ 1200k
$cbr1 attach-agent $tcp1
####################
# QUEUE MONITOR #
####################
set qf_size [open queue.size w]
set qmon_size [$ns monitor-queue $n1 $n3 $qf_size 0.05]
#On demarre la simulation
$ns at 0.0 "record"
$ns at 0.1 "$cbr0 start"
$ns at 0.5 "$cbr1 start"
$ns at 5.1 "$cbr0 stop"
$ns at 5.5 "$cbr1 stop"
#Call the finish procedure after 5 seconds of simulation time
$ns at 5.5 "finish"
#Run the simulation
$ns run