You are on page 1of 8

Laboratorijska vjeba br.

3 i 4 Analiza trace fajlova Cilj laboratorijske vjebe: je upoznavanje s mogunostima analize trace fajlova koritenjem awk programskog jezika i Xgrapha. Pokretanje ns-2 simulacije ima za posljedicu generisanje NAM trace fajla (out.nam) koji se koristi kao ulaz za NAM i trace fajla pod nazivom "out.tr", koji emo iskoristiti za analizu ove simulacije. Sljedea slika prikazujeformat i jedan primjer trace podataka iz fajla "out.tr".

+ 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 - 0.1 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 - 0.108 1 2 cbr 1000 ------- 2 1.0 3.1 1 1 r 0.114 1 2 cbr 1000 ------- 2 1.0 3.1 0 0 + 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0 - 0.114 2 3 cbr 1000 ------- 2 1.0 3.1 0 0

Znaenje pojedinih polja u trace fajlu je kako slijedi: - event = kod dogaaja (r = prijem paketa, + = ulazak paketa u red ekanja, - = izlazak paketa iz reda ekanja,d = odbacivanje paketa iz reda ekanja), - time = vremenski ig, sadri informaciju o trenutku u kojem se dogaaj desio, - from node = izvorni vor, - to node = odredini vor, - pkt type = tip paketa, - pkt size = veliina paketa (u bajtima), - flags = pokazivai, - fid = oznaka toka (engl. flow id) kojeg je mogue podesiti za svaki pojedini tok u OTcl skripti. Iako se oznaka toka ne mora koristiti u simulaciji, moe biti korisna u svrhu analize. Oznaka toka se takoe koristi za specificiranje boje toka za prikaz u NAM-u. - src addr = izvorna adresa (u obliku: vor.port), - dst addr = odredina adresa (u obliku: vor.port), - seq num = redni broj paketske sekvence, - pkt id = jedinstvena oznaka paketa. Dva vrlo esto koritena alata za obradu i prikaz rezultata ns2 simulacije su awk i xgraph.

awk je programski jezik, veoma rairen u Unix/Linux okruenju, a namjenjen je obradi tekstualnih datoteka, koje imaju pravilnu strukturu i organizovane su u redove, ba kao ns2 trace datoteka. Koritenjem awk se vrlo jednostavno i brzo mogu analizirati trace datoteke. Da bismo izvrili analizu rezultata simulacije, potreban nam je alat za manipulaciju velikim koliinama tekstualnih podataka. U tu svrhu moemo iskoristiti awk, programski jezik namijenjen obradi tekstualnih datoteka, uobiajen na Unix/Linux platformi. Gubitak paketa kao omjer broja odbaenih i broja generisanih paketa, raunat e se pomou sljedee awk skripte: awk '$1==opt1 {a+=1} END {print a}' tracefile pri emu - opt1, predstavlja dogaaj koji posmatramo, odnosno jednak je + ukoliko elimo saznati broj generisanih paketa ili d ukoliko elimo saznati broj odbaenih paketa - tracefile, predstavlja naziv trace datoteke koja se analizira. Sa dva izvoenja ove skripte dobijamo traene brojeve iji kolinik predstavlja postotak izgubljenih paketa. Postotak izgubljenih paketa proraunat ovom skriptom predstavlja postotak izgubljenih paketa za dati saobraajni tok u simuliranoj mrei. Primjer 1: awk skripta za prikaz gubitaka BEGIN { # Inicijalizacija. Postavljanje dvije varijable. br_odbacenih: broj odbacenih paketa. br_poslanih: broj poslanih paketa br_odbacenih = 0; br_poslanih= 0; } { akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9;

odrediste = $10; br_sekvence = $11; id_paketa = $12; if (od==2 && prema==3 && akcija == "+") br_poslanih++; if (id_toka==2 && akcija == "d") br_odbacenih++; print vrijeme " " br_odbacenih> "gubici.tr" } END { printf("Broj poslanih paketa: %d\nBroj izgubljenih paketa: %d\nGubici: %.2f %%", br_poslanih, br_odbacenih, 100*br_odbacenih/br_poslanih); } Primjer 2: U nastavku je dat primjer awk skripte koja se koristi za obradu ns2 trace datoteke i proraun saobraajnog optereenja i broja izgubljenih paketa. BEGIN { Tsim = 60; T=0.1; n=Tsim/T; for(i=0; i<n; i++) { bw[i]=0; pktloss[i]=0; } } { action = $1; time = $2; from = $3; to = $4; type = $5; pktsize = $6; flow_id = $8; src = $9; dst = $10; seq_no = $11; packet_id = $12;

k = int(time/T); if (action=="r" && from==s && to==d) bw[k] += pktsize; if (action=="d"&& from==s && to==d) pktloss[k]++; } END { for(i=0; i<n; i++) { printf("%f %f\n", i*T, bw[i]*8/(1000000*T)) > "bandwidth" printf("%f %d\n", i*T, pktloss[i]) > "pktloss" } } Skripta pretpostavlja da je interval na kojem se vri usrednjavanje propusnosti jednak 0.1 sekundu, ali jednostavnom promjenom konstante T ovaj interval se mjenja. Parametar Tsim predstavlja trajanje simulacije i mora biti usklaen sa trajanjem simulacije u ns2 modelu. Proraun propusnosti i izgubljenih paketa zasniva se na polju event ns2 trace datoteke i ako je to polje jednako r paket je primljen i veliina tog paketa se uzima u obzir pri proraunu prenesenog saobraaja u datom intervalu, dok se za proruun izgubljenih paketa uzimaju u obzir dogaaji ija je vrijednost polja event jednaka d. Rezultat izvrenja ove skripte su datoteke organizovane u dvije kolone pri emu prva kolona predstavlja vrijeme, a druga srednju koliinu prenesenog saobraaja u tom intervalu (datoteka bandwidth), odnosno broj odbaenih paketa (datoteka pktloss). Ove datoteke su pogodne za grafiki prikaz dobijenih rezultata, za tzv. x-y graf. Prilikom pozivanja ove skripte navodi se trace datoteka koja je predmet analize, te izvor (oznaka s u skripti) i odredite (oznaka d) ime se odreuje link i smjer prenosa. Znai, ovom skriptom, a na osnovu simulacijske trace datoteke dobijamo tabelarni prikazan propusnosti i broja izgubljenih paketa tokom vremena na jednosmjernom linku od vora s do vora d. gawk f imeskripte s=source d=destination tracefile Primjer 3: awk skripta za proraun kanjenja s kraja na kraj za CBR saobraaj BEGIN { najveci_id_paketa = 0; } { akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9;

odrediste = $10; br_sekvence = $11; id_paketa = $12; if ( id_paketa > najveci_id_paketa ) najveci_id_paketa = id_paketa; if ( pocetno_vrijeme[id_paketa] == 0 ) pocetno_vrijeme[id_paketa] = vrijeme; if ( id_toka == 1 && akcija != "d" ) { if ( akcija == "r" ) { krajnje_vrijeme[id_paketa] = vrijeme; } } else { krajnje_vrijeme[id_paketa] = -1; } } END { for ( id_paketa = 0; id_paketa <= najveci_id_paketa; id_paketa++ ) { pocetno = pocetno_vrijeme[id_paketa]; kraj = krajnje_vrijeme[id_paketa]; trajanje_paketa = kraj - pocetno; if ( pocetno < kraj ) printf("%f %f\n", pocetno, trajanje_paketa) > "kasnjenje.txt"; } } Primjer 4: awk skripta za proraun jittera za CBR saobraaj BEGIN { # Inicijalizacija najveci_id_paketa = 0; } { akcija = $1; vrijeme = $2; od = $3; od = $4;

tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9; odrediste = $10; br_sekvence = $11; id_paketa = $12; if ( id_paketa > najveci_id_paketa ) { najveci_id_paketa = id_paketa; } #Snimanje vremena slanja if ( pocetno_vrijeme[id_paketa] == 0 ) # Snimanje broja sekvence pkt_seqno[id_paketa] = br_sekvence; pocetno_vrijeme[id_paketa] = vrijeme; } #Snimanje vremena dolaska CBR saobracaja (id_toka=1) if ( id_toka == 2 && akcija != "d" ) { if ( akcija == "r" ) { kraj_vrijeme[id_paketa] = vrijeme; } } else { kraj_vrijeme[id_paketa] = -1; } } END { last_seqno = 0; zadnje_kasnjenje = 0; seqno_diff = 0; for ( id_paketa = 0; id_paketa <= najveci_id_paketa; id_paketa++ ) { pocetak = pocetno_vrijeme[id_paketa]; kraj = kraj_vrijeme[id_paketa]; trajanje_paketa = kraj - pocetak; if ( pocetak < kraj ) { {

seqno_diff = pkt_seqno[id_paketa] - last_seqno; delay_diff = trajanje_paketa - zadnje_kasnjenje; if (seqno_diff == 0) { jitter =0; } else { jitter = delay_diff/seqno_diff; } printf("%f %f\n", pocetak, jitter) > "jitter.txt";; last_seqno = pkt_seqno[id_paketa]; zadnje_kasnjenje = trajanje_paketa; } } Primjer 6: awk skripta za proraun protoka: BEGIN { izvorni_cvor = 0; broj_toka = 1; protok_dt = 0.1 # Interval usrednjavanja protoka (u sekundama) protok_t = 0 protok_d = 0 protok_uk = 0 protok_br = 0 } { akcija = $1; vrijeme = $2; od = $3; prema = $4; tip = $5; velicina_paketa = $6; id_toka = $8; izvor = $9; odrediste = $10; br_sekvence = $11; id_paketa = $12; if (akcija=="r" && id_toka == 2 && prema==3) { protok_d += velicina_paketa*8;

if ((vrijeme-protok_t) > protok_dt) { print vrijeme " " protok_d/protok_dt > "protok.txt"; protok_uk += protok_d/protok_dt; protok_br += 1; protok_t = vrijeme; protok_d = 0; } } } END { print "Srednji protok: " protok_uk/protok_br " [bps]" } xgraph je sastavni dio ns2 paketa. Koristi se za crtanje x-y grafika, a omoguava i prikaz vie podataka na istom grafiku. Ima veliki niz opcija od kojih se najee koriste: -geometry, specificira veliinu crtea -t, naslov -x, oznaka x ose -y, oznaka y ose Primjer upotrebe xgraph: xgraph datoteka1 datoteka2 -geometry 1200x600 -t "Naslov" -x " X ose" -y "Y ose"

Modeliranje greaka na prenosnim putevima Da bi se linkovi mogli predstaviti to realnijim, mogue je definisati link sa grekama u prenosu. Modeliranje realnog linka se realizuje koristei ns2 implementaciju modela greke, te specificirajui vjerovatnou greke pri prenosu, statistiku raspodjelu greaka, agenta koji prihvata pakete sa grekom i na kraju sam link na koji se primjenjuje model sa grekama, kao to je prikazano u sljedeem primjeru. set loss_module [new ErrorModel] $loss_module set rate_ 0.2 $loss_module ranvar [new RandomVariable/Uniform] $loss_module drop_target [new Agent/Null] $ns lossmodel $loss_module $n2 $n3

You might also like