Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isrm:laboratoare:02 [2018/01/19 16:03]
dragos.niculescu
isrm:laboratoare:02 [2019/02/28 20:45] (current)
mbarbulescu
Line 37: Line 37:
 </​file>​ </​file>​
 Poate fi plotat scriind: Poate fi plotat scriind:
-<​code>​+<​code ​gnuplot>
 set style line 1 lc rgb '#​0060ad'​ lt 1 lw 2 pt 7 ps 3.5 set style line 1 lc rgb '#​0060ad'​ lt 1 lw 2 pt 7 ps 3.5
 plot '​data1'​ with linespoints ls 1 plot '​data1'​ with linespoints ls 1
Line 44: Line 44:
 Aici setăm tipul de punct (pt) și dimensiunea punctului Aici setăm tipul de punct (pt) și dimensiunea punctului
 (ps), și culoarea (lc) de utilizat. Pentru stilurile de puncte și linii disponibile,​ puteți să (ps), și culoarea (lc) de utilizat. Pentru stilurile de puncte și linii disponibile,​ puteți să
-rulați comanda test la promptul gnuplot. Imaginea rezultată este+rulați comanda ​**test** la promptul gnuplot. Imaginea rezultată este
 {{ :​isrm:​laboratoare:​02:​gnuplot:​plotting_data1.png?​nolink |}} {{ :​isrm:​laboratoare:​02:​gnuplot:​plotting_data1.png?​nolink |}}
  
Line 82: Line 82:
  
 Și plotăm cu comenzile: Și plotăm cu comenzile:
-<​code>​+<​code ​gnuplot>
 # albastru: # albastru:
 set line style 1 lc rgb '# 0060ad'​ lt 1 lw 2 pt 7 ps 3.5 set line style 1 lc rgb '# 0060ad'​ lt 1 lw 2 pt 7 ps 3.5
Line 131: Line 131:
  
 Vom plota astfel: Vom plota astfel:
-<​code ​shell>+<​code ​gnuplot>
  set xrange [ -2 : 52 ]  set xrange [ -2 : 52 ]
  set yrange [ 0 : 0.12 ]  set yrange [ 0 : 0.12 ]
Line 158: Line 158:
 directă a datelor de intrare: directă a datelor de intrare:
  
-<​code ​shell>+<​code ​gnuplot>
  set yrange [ 0:120 ]  set yrange [ 0:120 ]
- plot '​battery.dat'​ using 1:​($2*1000):​($4*1000)\+ plot '​battery.dat'​ using 1:​($2*1000):​($3*1000)\
                     w yerrorbars ls 1                     w yerrorbars ls 1
 </​code>​ </​code>​
Line 168: Line 168:
  
 În ultimul grafic adăugăm date teoretice și o legendă: În ultimul grafic adăugăm date teoretice și o legendă:
-<code >+<​code ​gnuplot>
 # Legendă # Legendă
 set key at  50,112 set key at  50,112
Line 175: Line 175:
 # Curba teoretică # Curba teoretică
 P(x) = 1.53**2 * x/(5.67 + x)**2 * 1000 P(x) = 1.53**2 * x/(5.67 + x)**2 * 1000
-plot '​battery.dat'​ using 1:​($2*1000):​($4*1000) \+plot '​battery.dat'​ using 1:​($2*1000):​($3*1000) \
                     title "​Power"​ w yerr ls 2 , \                     title "​Power"​ w yerr ls 2 , \
       P(x) title '​Theory'​ w lines ls 1       P(x) title '​Theory'​ w lines ls 1
Line 190: Line 190:
  
   * Alte comenzi utile gnuplot:   * Alte comenzi utile gnuplot:
-<​code ​shell>+<​code ​gnuplot>
 set term png       # setează terminalul într-un format set term png       # setează terminalul într-un format
 set out '​file.png'​ # va plota într-un fisier set out '​file.png'​ # va plota într-un fisier
Line 203: Line 203:
  
  
-  * **Exercițiul 1** realizați folosind ''​gnuplot''​ graficul din laboratorul 1. Indicați semnificațiile axelor și legenda. Salvați imaginea în format ''​png/​svg'',​ și scriptul pentru restaurarea imaginilor. + **Exercițiul 1** realizați folosind ''​gnuplot''​ graficul din laboratorul 1. Indicați semnificațiile axelor și legenda. Salvați imaginea în format ''​png/​svg'',​ și scriptul pentru restaurarea imaginilor. 
-       * Exemplu<​code>​+       * Exemplu<​code ​gnuplot>
 plot '​out.tr'​ using 1:2 t "​TCP"​ with lp, \ plot '​out.tr'​ using 1:2 t "​TCP"​ with lp, \
      '​out.tr'​ using 1:3 t "​UDP"​ with lines lw 3      '​out.tr'​ using 1:3 t "​UDP"​ with lines lw 3
Line 218: Line 218:
 === 2. Introducere în awk === === 2. Introducere în awk ===
     * AWK (K vine de la Kernighan) este mic, simplu, și rapid, spre deosebire de perl sau python. Nu poți face tot ce faci în perl/​python,​ dar poți face foarte ușor multe taskuri de procesare de text. Are o sintaxă apropiată de C, dar preferă datele organizate pe coloane, ca foarte multe date în rețelistică:​ trace-uri de simulare, tcpdump, loguri, etc. Un mare avantaj este ca poate fi rulat direct de pe linia de comandă, fără a mai folosi un script separat - de multe ori apare într-un pipeline cu cat, sed, tr.      ​     * AWK (K vine de la Kernighan) este mic, simplu, și rapid, spre deosebire de perl sau python. Nu poți face tot ce faci în perl/​python,​ dar poți face foarte ușor multe taskuri de procesare de text. Are o sintaxă apropiată de C, dar preferă datele organizate pe coloane, ca foarte multe date în rețelistică:​ trace-uri de simulare, tcpdump, loguri, etc. Un mare avantaj este ca poate fi rulat direct de pe linia de comandă, fără a mai folosi un script separat - de multe ori apare într-un pipeline cu cat, sed, tr.      ​
-    * În cazul cel mai des întâlnit, se specifică un program care este rulat succesiv pentru fiecare linie de intrare: <​code>​cat trace.out | awk '​{print $2}'</​code>​ afișează coloana a doua a fiecărei linii. De exemplu, pentru acest fișier: <file txt trace.out>​+    * În cazul cel mai des întâlnit, se specifică un program care este rulat succesiv pentru fiecare linie de intrare: <​code ​awk>cat trace.out | awk '​{print $2}'</​code>​ afișează coloana a doua a fiecărei linii. De exemplu, pentru acest fișier: <file txt trace.out>​
 10 2    0.2 10 2    0.2
 11 3 0.3 11 3 0.3
Line 225: Line 225:
 13 3 0.1 13 3 0.1
 14 4 0.05 </​file>​ 14 4 0.05 </​file>​
-    * <​code>​cat trace.out | awk '​{print $1+$2, $2 $3, i++;​}'</​code>​ produce <​code>​+    * <​code ​awk>cat trace.out | awk '​{print $1+$2, $2 $3, i++;​}'</​code>​ produce <​code>​
 12 20.2 0 12 20.2 0
 14 30.3 1 14 30.3 1
Line 239: Line 239:
        * tipurile sunt slabe - int, float, string, din context  ​        * tipurile sunt slabe - int, float, string, din context  ​
        * spațiu este operator de concatenare pe stringuri        * spațiu este operator de concatenare pe stringuri
-    * <​code>​cat trace.out | awk 'NF==3 { s+=$3; n++} /​1[2-3]/​{print $0} END{print ​ n, s/​n}'</​code>​ produce <​code>​+    * <​code ​awk>cat trace.out | awk 'NF==3 { s+=$3; n++} /​1[2-3]/​{print $0} END{print ​ n, s/​n}'</​code>​ produce <​code>​
 12 2 0.2 12 2 0.2
 13 3 0.1 13 3 0.1
Line 250: Line 250:
  
 /​********************** /​**********************
-  - Exercițiul 2: Folosind <​code>​set qfile [$ns monitor-queue $n3 $n4  [open queue.tr w] 0.1]+  - Exercițiul 2: Folosind <​code ​tcl>set qfile [$ns monitor-queue $n3 $n4  [open queue.tr w] 0.1]
 [$ns link $n3 $n4] queue-sample-timeout;​ </​code>​ [$ns link $n3 $n4] queue-sample-timeout;​ </​code>​
  ​plotați dimensiunea în pachete cozii pe link-ul de ieșire [[http://​www.mathcs.emory.edu/​~cheung/​Courses/​558-old/​Syllabus/​90-NS/​trace.html#​QMon | Formatul]] fișierului queue.tr  ​  ​plotați dimensiunea în pachete cozii pe link-ul de ieșire [[http://​www.mathcs.emory.edu/​~cheung/​Courses/​558-old/​Syllabus/​90-NS/​trace.html#​QMon | Formatul]] fișierului queue.tr  ​
      * {{:​isrm:​laboratoare:​02:​lab02qsize.png?​300|}}      * {{:​isrm:​laboratoare:​02:​lab02qsize.png?​300|}}
 ************************/​ ************************/​
-  - **Exercițiul 2**: În laboratorul 1, folosiți <code tcl>$tcp attach [open tcp.tr w]+ 
 + **Exercițiul 2**: În laboratorul 1, folosiți <code tcl>$tcp attach [open tcp.tr w]
 $tcp trace cwnd_ $tcp trace cwnd_
 $tcp trace rtt_ </​code>​ $tcp trace rtt_ </​code>​
Line 266: Line 267:
  
  === 3. comenzi utile de shell ===   === 3. comenzi utile de shell === 
-  * <​code>​+  * bash face toate calculele pe integer. ​<​code ​bash>
 $ x=5  $ x=5 
 $ echo $(($x / 3)) $ echo $(($x / 3))
 1 1
 </​code>​ </​code>​
- +  ​* <​code ​bash>
-bash face toate calculele pe integer.  +
-  ​* <​code>​+
 $ awc() { awk "​BEGIN{print $*}"; } $ awc() { awk "​BEGIN{print $*}"; }
 funcția poate fi adăugata la .bashrc funcția poate fi adăugata la .bashrc
-echo "$x / 3"+awc "$x / 3"
 1.66667 1.66667
 </​code>​ </​code>​
-  * este necesar adesea să rulăm o buclă de pe linia de comandă <​code>​+  * este necesar adesea să rulăm o buclă de pe linia de comandă <​code ​bash>
 $for i in `seq 10 2 20`; do awc "$i / 10"; done  $for i in `seq 10 2 20`; do awc "$i / 10"; done 
 1 1
Line 290: Line 289:
 </​code>​ </​code>​
   * în multe cazuri se lucrează direct de la prompt pentru a pregăti datele de plotat ​   * în multe cazuri se lucrează direct de la prompt pentru a pregăti datele de plotat ​
-  * script one liner <color red>​**foarte des folosit în majoritatea laboratoarelor**</​color>,​ datele vor fi pe ecran și în fișierul "​out.a" ​ <​code>​+  * script one liner <color red>​**foarte des folosit în majoritatea laboratoarelor**</​color>,​ datele vor fi pe ecran și în fișierul "​out.a" ​ <​code ​bash>
 $ i=1; while [ $i -le 10 ]; do echo -n "$i "; ns ./​script.tcl -rate0 "​$(($i*100))Kbps"​| grep Throughput |head -n1 | awk '​{print $2}'; i=$(($i+1));​ done | tee ./​out.a ​ $ i=1; while [ $i -le 10 ]; do echo -n "$i "; ns ./​script.tcl -rate0 "​$(($i*100))Kbps"​| grep Throughput |head -n1 | awk '​{print $2}'; i=$(($i+1));​ done | tee ./​out.a ​
 1 505744.0 1 505744.0
Line 346: Line 345:
       * detaliu http://​www.isi.edu/​nsnam/​ns/​doc/​node186.html       * detaliu http://​www.isi.edu/​nsnam/​ns/​doc/​node186.html
  
-  - Exercițiul 3: modificați ''​simple-wireless.tcl''​ din Marc Greis sec IX pentru ​+ **Exercițiul 3**: modificați ''​simple-wireless.tcl''​ din Marc Greis sec IX pentru ​
     * a utiliza noul format de trace ( cu ''​$ns_ use-newtrace''​)     * a utiliza noul format de trace ( cu ''​$ns_ use-newtrace''​)
     * a monitoriza evenimentele de la nivelele 2 și 4 (agent și MAC)     * a monitoriza evenimentele de la nivelele 2 și 4 (agent și MAC)
Line 364: Line 363:
     * comparați pierderile între cadrele ACK și RTS (( ACK=0 pierderi, RTS=14 pierderi. Dacă nodurile sunt în apropiere, conversația RTS-CTS-Date-ACK se desfășoară cu bine, nu se pierd ACK-uri. La distanță mare, destinația nu răspunde la RTS, deci sunt pierdute, și nu se mai ajunge la ACK.))     * comparați pierderile între cadrele ACK și RTS (( ACK=0 pierderi, RTS=14 pierderi. Dacă nodurile sunt în apropiere, conversația RTS-CTS-Date-ACK se desfășoară cu bine, nu se pierd ACK-uri. La distanță mare, destinația nu răspunde la RTS, deci sunt pierdute, și nu se mai ajunge la ACK.))
     * justificați diferențele     * justificați diferențele
-  - dezactivați RTS/CTS folosind <​code>​Mac/​802_11 set RTSThreshold_ ​   3000</​code>​ și comparați performanța TCP cu cazul precendent. Sugestie: plotați evoluția în timp a numerelor de secvență ​  ((Numărul de secvență în timp este de fapt throughput. RTS-CTS introduce un overhead, de fapt timp pierdut, care duce la un throughput redus. ​)) + 
-    * <​code>​ cat simple.tr | grep '​^r' ​ | grep AGT | grep tcp | grep -v ack | awk '​{print $3, $47}' </​code>​ + ​**Exercițiu 4** dezactivați RTS/CTS folosind <​code>​Mac/​802_11 set RTSThreshold_ ​   3000</​code>​ și comparați performanța TCP cu cazul precendent. Sugestie: plotați evoluția în timp a numerelor de secvențăNumărul de secvență în timp este de fapt throughput. RTS-CTS introduce un overhead, de fapt timp pierdut, care duce la un throughput redus.  
-    * {{:​isrm:​laboratoare:​02:​lab02tcp_rts.png?​300|}} ​+   ​* <​code ​bash> cat simple.tr | grep '​^r' ​ | grep AGT | grep tcp | grep -v ack | awk '​{print $3, $47}' </​code>​ 
 +   ​* {{:​isrm:​laboratoare:​02:​lab02tcp_rts.png?​300|}} ​
isrm/laboratoare/02.1516370598.txt.gz · Last modified: 2018/01/19 16:03 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0