[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