| Profil von 超楠为了爱和梦想FotosBlogListen | Hilfe |
|
24 Juli NS-trace分析3:Gnuplot 執行 GNUPLOT 程式時,GNUPLOT 首先檢查是否設定環境參數 DISPLAY, 若有則依其設定。當其確定為 X 環境時,將輸出模式設定為 X11。筆者以cbr_delay為例,先簡單示範如何把圖給畫出來。畫圖的指令是plot,要畫的檔案cbr_delay。
gnuplot> plot "cbr_delay"
圖是畫出來了,但是筆者要的不是把數據用打點的方式畫出來,而是要把這些點連起來。沒關係,接下來,只要學著修改環境變數,就可以畫出理想的圖了。
C. 修改環境變數 a.座標軸(Axis):繪圖參數在設定座標軸方面的參數可分為變數名稱、標點、網格、顯示範圍、 座標軸顯示方式與顯示與否等六方面的設定。不過筆者只介紹幾個常用的設定,詳細的設定可以參考http://phi.sinica.edu.tw/aspac/reports/94/94002/ 。
NS-trace分析2: awk脚本筆者把量測CBR封包端點到端點間延遲時間的awk程式,寫在檔案measure-delay.awk檔案中,讀者可以參考此範例,修改成符合讀者需求的程式。 BEGIN {#程式初始化,設定一變數以記錄目前最高處理封包的IDhighest_packet_id = 0;
[Loss] 筆者把量測CBR Packet Loss的情況寫在檔案measure-drop.awk內。
BEGIN { #程式初始化,設定一變數記錄packet被drop的數目 fsDrops = 0; numFs = 0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; src = $5; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12;
#統計從n1送出多少packets if (node_1==1 && node_2==2 && action == "+") numFs++;
#統計flow_id為2,且被drop的封包 if (flow_id==2 && action == "d") fsDrops++; } END { printf("number of packets sent:%d lost:%d\n", numFs, fsDrops); }
執行方法: ($為shell的提示符號)$awk -f measure-drop.awk out.tr
執行結果:
number of packets sent: 550 lost:8 這代表CBR送出了550個封包,但其中8個封包丟掉了。
[Throughput] 筆者把量測CBR Throughput的情況寫在檔案measure-throughput.awk內。在這裡的Throughput是指average throughput。
BEGIN { init=0; i=0; } { action = $1; time = $2; node_1 = $3; node_2 = $4; src = $5; pktsize = $6; flow_id = $8; node_1_address = $9; node_2_address = $10; seq_no = $11; packet_id = $12;
if(action=="r" && node_1==2 && node_2==3 && flow_id==2) { pkt_byte_sum[i+1]=pkt_byte_sum[i]+ pktsize;
if(init==0) { start_time = time; init = 1; }
end_time[i] = time; i = i+1; } } END { #為了畫圖好看,把第一筆記錄的throughput設為零,以表示傳輸開始 printf("%.2f\t%.2f\n", end_time[0], 0);
for(j=1 ; j<i ; j++){ th = pkt_byte_sum[j] / (end_time[j] - start_time)*8/1000; printf("%.2f\t%.2f\n", end_time[j], th); } #為了畫圖好看,把第後一筆記錄的throughput再設為零,以表示傳輸結束 printf("%.2f\t%.2f\n", end_time[i-1], 0); }
執行方法: ($為shell的提示符號)$awk -f measure-throughput.awk
out.tr
若是要把結果存到檔案,可使用導向的方式。(把結果存到cbr_throughput檔案中)NS-trace 分析1:awk语言简介看到一篇好的关于ns-trace分析的文章,地址为http://endoing.spaces.msn.com/?partqs=cat%3DNS%25e4%25bb%25bf%25e7%259c%259f&_c11_blogpart_blogpart=blogview&_c=blogpart
现在转载一下,呵呵
ns模擬結束後,會產生兩個檔案,一個是out.nam,這是給NAM用的,用來把模擬的過程用視覺化的方式呈現出來,這可以讓使用者用"看"的方式去瞭解封包傳送是如何從來源端送到接收端。另一個檔案是 out.tr,這個檔案記錄了模擬過程中封包傳送中所有的事件,例如第一筆記錄是一個CBR的封包,長度為1000bytes,在時間0.1秒的時候,從 n1傳送到n2。這個檔案對我們做效能分析很重要,所以要先對這個檔案的格式做仔細的介紹。
每一筆記錄的開始都是封包事件發生的原因,若是r則表示封包被某個節點所接收,若是+則表示進入了佇列,若是-則表示離開佇列,若是d則表示封包被佇列所丟棄。接著的第二個欄位表示的是事件發生的時間;欄位三和欄位四表示事件發生的地點(從from node到to node);欄位五表示封包的型態;欄位六是封包的大小,欄位七是封包的旗標標註;欄位八表示封包是屬於那一個資料流;欄位九和欄位十是表示封包的來源端和目的端,這兩個欄位的格式是a.b,a代表節點編號,b表示埠號(port number);欄位十一表示封包的序號;最後欄位十二表示封包的id。以前面trace file的第一筆為例,意思就是說有一個封包pakcet id為0,資料流id為2,序號為0,長度為1000 bytes,型態為CBR,它是從來源端1.0要到目的地3.1,在時間0.1秒的時候,從節點1進入了節點2的佇列中。
接下來,筆者先簡單介紹awk,然後如何使用awk去分析trace file,以得到Throughput、Delay、Jitter、和Loss Rate。
[awk] A.簡介 awk是一種程式語言。它具有一般程式語言常見的功能。因awk語言具有某些特點,如:使用直譯器(Interpreter)不需先行編譯;變數無型別之分(Typeless),可使用文字當陣列的註標(Associative Array)等特色。因此,使用awk撰寫程式比起使用其它語言更簡潔便利且節省時間。awk還具有一些內建功能,使得awk擅於處理具資料列(Record),欄位(Field)型態的資料;此外, awk內建有pipe的功能,可將處理中的資料傳送給外部的 Shell命令加以處理, 再將Shell命令處理後的資料傳回awk程式,這個特點也使得awk程式很容易使用系統資源。awk是如何運作的
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
一 |
二 |
三 |
四 |
五 |
六 |
七 |
八 |
九 |
十 |
十一 |
十二 | ||||||||||||||||||||||||||||||||||||||||
|
+ |
0.1 |
1 |
2 |
cbr |
1000 |
------- |
2 |
1.0 |
3.1 |
0 |
0 | ||||||||||||||||||||||||||||||||||||||||
|
欄位變數 |
意義 | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
$0 |
為一字串, 其內容為目前awk所讀入的資料列. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
$1 |
代表 $0 上第一個欄位的資料. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
$2 |
代表 $0 上第二欄個位的資料. | ||||||||||||||||||||||||||||||||||||||||||||||||||
|
…… |
…… |
|
|||||||||||||||||||||||||||||||||||||||||||||||||
|
|