left.gif (284 bytes)  up.gif (289 bytes)  right.gif (280 bytes)

Monitoraggio di code (2)
 

5. Come ottenere dati sulle code usando l'oggetto QueueMonitor

Una volta creato un link tra due nodi con il classico comando tcl :

    $ns duplex-link $n1 $n2  1Mb 1ms DropTail

volendo monitorare la coda di uscita del router n1 sul link da n1 a n2 bisogna innanzitutto creare un nuovo oggetto di tipo QueueMonitor con l'istruzione:

   set queue1_2 [$ns monitor-queue $n1 $n2 [$ns get-ns-traceall]]

Tale oggetto puņ essere interrogato in vari istanti di tempo per conoscere il valore delle seguenti variabili di stato:

    size_ dimensione della coda in bytes ad un certo istante
    pkts_ numero di pacchetti in coda ad un certo istante
    parrivals_ totale dei pacchetti finora arrivati
    barrivals_  totale di bytes finora arrivati
    pdepartures_ totale dei pacchetti finora partiti
    bdepartures_ totale di bytes finora partiti
    pdrops_ totale dei pacchetti finora scartati
    bdrops_  totale dei bytes finora scartati

Ad esempio per scrivere su 2 distinti trace files i valori dellle variabili pkts_ e pdrops_ in funzione del tempo di simulazione, bisogna prima aprire 2 files in scrittura:

    set tf1 [open trace1.tr w]
    set tf2 [open trace2.tr w]

Quindi bisogna scrivere una procedura che registri in successivi istanti di campionamento il valore delle variabili cercate nel file opportuno:

    proc record {} {
        global tf1 tf2 queue1_2 #variabili globali
        set ns [Simulator instance]
        set time 0.1   #tempo di campionamento
        set lung_coda [$queue1_2 set pkts_]
        set drops [$queue1_2 set pdrops_]
        set now [$ns now]  #tempo attuale
        puts $tf1 "$now $lung_coda"
        puts $tf2 "$now $drops"
        $ns at [expr $now+$time] "record" #chiamata ricorsiva
    }

I dati possono possono essere anche visualizzati con Xgraph mediante una chiamata nella procedura finish del tipo:

        exec xgraph trace1.tr -geometry 640x400 &

Vai alla pagina degli esempi sulle code
 


  left.gif (284 bytes)  up.gif (289 bytes)  right.gif (280 bytes)