シミュレーション結果の処理方法 ~ awk, gnuplot ~

21
シシシシシシシシシシシシシシシ awk, gnuplot 演演演 2 演 演演演演演演演 演演演演演演演演演

Upload: kachina-baker

Post on 03-Jan-2016

81 views

Category:

Documents


0 download

DESCRIPTION

シミュレーション結果の処理方法 ~ awk, gnuplot ~. 演習第 2 回 情報通信技術論 インターネット工学. awk によるデータ処理. オーク. データ(テキスト形式)の加工・取り出しが可能 読み込んだデータを 1 行ごとに処理 C 言語っぽい 書式. % awk ‘ パターン { アクション }' 入力データファイル. 条件が一致した場合に行う操作. If 文の条件文みたいなもの. awk の簡単な使用例. weather.dat - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: シミュレーション結果の処理方法 ~ awk, gnuplot ~

シミュレーション結果の処理方法~ awk, gnuplot ~

演習第 2回

情報通信技術論インターネット工学

Page 2: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

2

awk によるデータ処理

データ(テキスト形式)の加工・取り出しが可能 読み込んだデータを 1 行ごとに処理 C 言語っぽい

書式

オーク

% awk ‘ パターン { アクション }'  入力データファイル

If 文の条件文みたいなもの

条件が一致した場合に行う操作

Page 3: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

3

awk の簡単な使用例

Location が Sendai の行を抜き出す

– ‘$2 = “Sendai”’ とすると?

湿度が 61 の行を抜き出す

気温が 16 以下の行を抜き出す

気温> 20 かつ湿度< 80 の行を抜き出す

使用可能な演算子の例

札幌 Sapporo 9.1 84

青森 Aomori 12.1 76

秋田 Akita 13.6 71

盛岡 Morioka 12.7 69

仙台 Sendai 15.6 64

山形 Yamagata 14.2 69

福島 Fukushima 16.7 57

水戸 Mito 16.4 70

宇都宮 Utsunomiya 16.0 76

前橋 Maebashi 17.3 65

熊谷 Kumagaya 17.8 71

東京 Tokyo 18.8 61

鹿児島 Kagoshima 19.7 65那覇 Naha 24.3 79

札幌 Sapporo 9.1 84

青森 Aomori 12.1 76

秋田 Akita 13.6 71

盛岡 Morioka 12.7 69

仙台 Sendai 15.6 64

山形 Yamagata 14.2 69

福島 Fukushima 16.7 57

水戸 Mito 16.4 70

宇都宮 Utsunomiya 16.0 76

前橋 Maebashi 17.3 65

熊谷 Kumagaya 17.8 71

東京 Tokyo 18.8 61

鹿児島 Kagoshima 19.7 65那覇 Naha 24.3 79

weather.dat2 列目 ($2) : Location 3 列目 ($3) :気温4 列目 ($4) :湿度

気象庁ホームページより・一部改変

% awk ‘$2 == “Sendai”’ weather.dat

% awk ‘$4 == 61’ weather.dat

% awk ‘$3 <= 16’ weather.dat

% awk ‘$3>20 && $4<80’ weather.dat

+, -, *, /, %<, <=, ==, !=, >, >=&&, ||

Page 4: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

4

行数を数える wc (Word Count)

– ファイルの行数・単語数・バイト数(サイズ)を表示

行数だけを出力したい場合

% wc weather.dat 47 188 1833 weather.dat

% wc -l weather.dat

Page 5: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

5

リダイレクション・パイプ リダイレクション: awk の実行結果をファイルに保

存– 気温> 16 である行を file に保存(上書きに注意)

– 行数は?

パイプ: awk の実行結果を入力として他のコマンドを実行– 気温> 16 である行の行数

% awk ‘$3 > 16’ weather.dat > file

% wc -l file

% awk ‘$3 > 16’ weather.dat | wc -l

Page 6: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

6

何に使うのか? sample.tcl を実行

out.tr, out.tcp, out.nam が生成される

ノード 0

ノード 2

ノード 1

ノード 3

cbr

tcp

% ns sample.tcl

Page 7: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

7

out.tr ( 抜粋 )

– $1: イベント– $2: イベント発生時刻– $3, $4: イベント発生場所(リンク)– $5: パケットの種類– $11: パケットのシーケンス番号– $12: パケット固有の番号 (ID)

+ 1 0 2 cbr 210 ------- 0 0.0 3.0 0 0- 1 0 2 cbr 210 ------- 0 0.0 3.0 0 0+ 1.00375 0 2 cbr 210 ------- 0 0.0 3.0 1 1- 1.00375 0 2 cbr 210 ------- 0 0.0 3.0 1 1r 1.00556 0 2 cbr 210 ------- 0 0.0 3.0 0 0+ 1.00556 2 3 cbr 210 ------- 0 0.0 3.0 0 0- 1.00556 2 3 cbr 210 ------- 0 0.0 3.0 0 0+ 1.0075 0 2 cbr 210 ------- 0 0.0 3.0 2 2- 1.0075 0 2 cbr 210 ------- 0 0.0 3.0 2 2r 1.00931 0 2 cbr 210 ------- 0 0.0 3.0 1 1

+ 1 0 2 cbr 210 ------- 0 0.0 3.0 0 0- 1 0 2 cbr 210 ------- 0 0.0 3.0 0 0+ 1.00375 0 2 cbr 210 ------- 0 0.0 3.0 1 1- 1.00375 0 2 cbr 210 ------- 0 0.0 3.0 1 1r 1.00556 0 2 cbr 210 ------- 0 0.0 3.0 0 0+ 1.00556 2 3 cbr 210 ------- 0 0.0 3.0 0 0- 1.00556 2 3 cbr 210 ------- 0 0.0 3.0 0 0+ 1.0075 0 2 cbr 210 ------- 0 0.0 3.0 2 2- 1.0075 0 2 cbr 210 ------- 0 0.0 3.0 2 2r 1.00931 0 2 cbr 210 ------- 0 0.0 3.0 1 1

Page 8: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

8

パケットの一生を見てみる あるパケット (ID=200, cbr) の流れに注目

ノード 0

ノード 2

ノード 1

ノード 3

cbr

tcp

% awk ‘$12 == 200’ out.tr+ 1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200- 1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200r 1.65431 0 2 cbr 210 ------- 0 0.0 3.0 173 200+ 1.65431 2 3 cbr 210 ------- 0 0.0 3.0 173 200- 1.672033 2 3 cbr 210 ------- 0 0.0 3.0 173 200r 1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200

Page 9: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

9

パケットの流れ あるパケット (ID=200, cbr) の流れに注目

% awk ‘$12 == 200’ out.tr+ 1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200- 1.64875 0 2 cbr 210 ------- 0 0.0 3.0 173 200r 1.65431 0 2 cbr 210 ------- 0 0.0 3.0 173 200+ 1.65431 2 3 cbr 210 ------- 0 0.0 3.0 173 200- 1.672033 2 3 cbr 210 ------- 0 0.0 3.0 173 200r 1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200

ノード 0 ノード 2 ノード 3

パケット

キュー(バッファ)

リンク

Page 10: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

10

パケットの流れ(ドロップされるパケット)

あるパケット (ID=234, cbr) の流れに注目% awk ‘$12 == 234’ out.tr+ 1.6975 0 2 cbr 210 ------- 0 0.0 3.0 186 234- 1.6975 0 2 cbr 210 ------- 0 0.0 3.0 186 234r 1.70306 0 2 cbr 210 ------- 0 0.0 3.0 186 234+ 1.70306 2 3 cbr 210 ------- 0 0.0 3.0 186 234d 1.70306 2 3 cbr 210 ------- 0 0.0 3.0 186 234

ノード 0 ノード 2 ノード 3

パケット

キュー(バッファ)

リンク

ドロップ

一度キューに入って(入ろうとして)からドロップされる

Page 11: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

11

TCP のシーケンス番号に注目してみる

あるパケット (seqno=100, tcp および ack) の流れに注目 % awk ‘($5==“tcp”||$5==“ack”) && $11==100’ out.tr

+ 2.489317 1 2 tcp 1040 ------- 1 1.0 3.1 100 631- 2.49209 1 2 tcp 1040 ------- 1 1.0 3.1 100 631r 2.499863 1 2 tcp 1040 ------- 1 1.0 3.1 100 631+ 2.499863 2 3 tcp 1040 ------- 1 1.0 3.1 100 631- 2.503757 2 3 tcp 1040 ------- 1 1.0 3.1 100 631r 2.519303 2 3 tcp 1040 ------- 1 1.0 3.1 100 631+ 2.519303 3 2 ack 40 ------- 1 3.1 1.0 100 643- 2.519303 3 2 ack 40 ------- 1 3.1 1.0 100 643r 2.529517 3 2 ack 40 ------- 1 3.1 1.0 100 643+ 2.529517 2 1 ack 40 ------- 1 3.1 1.0 100 643- 2.529517 2 1 ack 40 ------- 1 3.1 1.0 100 643r 2.534623 2 1 ack 40 ------- 1 3.1 1.0 100 643

ノード 2ノード 1 ノード 3

tcp

ack

RTT 2.534623-) 2.489317 0.045306

Page 12: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

12

送受信パケットの抽出

送信された cbr パケットの表示

送信された tcp パケットの表示

受信された cbr / tcp パケットの表示

ノード 0

ノード 2

ノード 1

ノード 3

cbr

tcp

% awk ‘$1==“+” && $3==0 && $4==2 && $5==“cbr”’ out.tr

% awk ‘$1==“r” && $3==2 && $4==3 && $5==“cbr”’ out.tr

% awk ‘$1==“+” && $3==1 && $4==2 && $5==“tcp”’ out.tr

% awk ‘$1==“r” && $3==2 && $4==3 && $5==“tcp”’ out.tr

Page 13: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

13

ドロップされたパケットの抽出

廃棄された cbr /tcp パケットの表示

ノード 0

ノード 2

ノード 1

ノード 3

cbr

tcp

% awk ‘$1==“d” && $5==“cbr”’ out.tr

% awk ‘$1==“d” && $5==“tcp”’ out.tr

※ 廃棄された場所(リンク)は問わない

Page 14: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

14

送受信/ドロップパケット数の算出

送信パケット数の算出

受信パケット数の算出

ドロップパケット数の算出

% awk ‘$1==“+” && $3==0 && $4==2 && $5==“cbr”’ out.tr | wc -l

% awk ‘$1==“+” && $3==1 && $4==2 && $5==“tcp”’ out.tr | wc -l

% awk ‘$1==“r” && $3==2 && $4==3 && $5==“cbr”’ out.tr | wc -l

% awk ‘$1==“r” && $3==2 && $4==3 && $5==“tcp”’ out.tr | wc -l

% awk ‘$1==“d” && $5==“cbr”’ out.tr | wc -l

% awk ‘$1==“d” && $5==“tcp”’ out.tr | wc -l

Page 15: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

15

通信品質の評価指標

スループット [Mbps] =(総受信パケット数) × (パケットサイズ) [bytes]

(通信時間) [s]送信者がパケットを送出した時間

受信者が受信した量 ヘッダを含む

送信者が送信した量

パケットドロップ率 [%] =                 ×100  (総ドロップパケット数)

(総送信パケット数)

ドロップの場所は問わない

※ M = 106

bps = bit/sec 1 bytes = 8 bits

Page 16: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

16

gnuplot によるグラフ描画

基本的な使用方法

ニュープロット

% gnuplot…gnuplot> p “ データファイル” u x 軸のデータがある列 :y 軸のデータがある列 t “ 凡例名” w プロット形式gnuplot> rep “ データファイル” ……納得のいくグラフが作成できたら…gnuplot> set term post colorgnuplot> set output “ ファイル名 .ps”gnuplot> repgnuplot> q ( 終了 )

% gv ファイル名 .ps ( 結果の確認 )% lpr ファイル名 .ps ( 印刷 )

(※ 実際には 1 行)

Page 17: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

17

gnuplot の簡単な使用例

x 軸を時刻、 y 軸を気温としてプロット

– プロット形式: l, lp, st, d, i など– 目的に合わせてプロット形式を選択する– 凡例はお好みで

x 軸を時刻、 y 軸を湿度として上のグラフに重ねてプロット

ps (postscript) 形式で保存

# 時刻 気温 湿度 1 18.4 48 2 16.0 67 3 16.7 51 4 16.2 49 5 16.0 50 6 15.9 51 7 16.4 48 8 15.7 57 9 16.5 57 10 16.9 56 11 16.3 65 12 16.3 65

23 13.3 83 24 12.5 90

# 時刻 気温 湿度 1 18.4 48 2 16.0 67 3 16.7 51 4 16.2 49 5 16.0 50 6 15.9 51 7 16.4 48 8 15.7 57 9 16.5 57 10 16.9 56 11 16.3 65 12 16.3 65

23 13.3 83 24 12.5 90

sendai.dat1 列目 ($1) :時刻 2 列目 ($2) :気温 3 列目 ($3) :湿度

気象庁ホームページより・一部改変

gnuplot> p “sendai.dat” u 1:2 w lp

gnuplot> rep “sendai.dat” u 1:3 w lp

gnuplot> set term post colorgnuplot> set output “sendai.ps”gnuplot> repgnuplot> q

Page 18: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

18

out.tcp ( 抜粋 )

– $1: 時刻– $16: 送信シーケンス番号– $18: 輻輳ウインドウサイズ– $20: スロースタート閾値

time: 0.00000 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: -1 hiack: -1 seqno: 0  cwnd: 1.000 ssthresh: 20 dupacks: 0 rtt: 0.000 srtt: 0.000 rttvar: 12.000 bkoff: 1

time: 1.53096 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 0 hiack: 0 seqno: 1 cwnd: 2.000 ssthresh: 20 dupacks: 0 rtt: 0.030 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.57005 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 2 hiack: 1 seqno: 3 cwnd: 3.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.57559 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 4 hiack: 2 seqno: 5 cwnd: 4.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.60869 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 6 hiack: 3 seqno: 7 cwnd: 5.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.61535 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 8 hiack: 4 seqno: 9 cwnd: 6.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.62202 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 10 hiack: 5 seqno: 11 cwnd: 7.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.62757 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 12 hiack: 6 seqno: 13 cwnd: 8.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.64733 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 14 hiack: 7 seqno: 15 cwnd: 9.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 0.00000 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: -1 hiack: -1 seqno: 0  cwnd: 1.000 ssthresh: 20 dupacks: 0 rtt: 0.000 srtt: 0.000 rttvar: 12.000 bkoff: 1

time: 1.53096 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 0 hiack: 0 seqno: 1 cwnd: 2.000 ssthresh: 20 dupacks: 0 rtt: 0.030 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.57005 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 2 hiack: 1 seqno: 3 cwnd: 3.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.57559 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 4 hiack: 2 seqno: 5 cwnd: 4.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.60869 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 6 hiack: 3 seqno: 7 cwnd: 5.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.61535 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 8 hiack: 4 seqno: 9 cwnd: 6.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.62202 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 10 hiack: 5 seqno: 11 cwnd: 7.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.62757 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 12 hiack: 6 seqno: 13 cwnd: 8.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

time: 1.64733 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 14 hiack: 7 seqno: 15 cwnd: 9.000 ssthresh: 20 dupacks: 0 rtt: 0.040 srtt: 0.030 rttvar: 0.015 bkoff: 1

Page 19: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

19

各変数の時間変化の図示 シーケンス番号 ($16: seqno)

輻輳ウインドウサイズ ($18: cwnd) スロースタート閾値 ($20: ssthresh)

輻輳ウインドウサイズと” 20” の最小値

gnuplot> p “out.tcp” u 2:16 t “seqno” w l

gnuplot> p “out.tcp” u 2:18 t “cwnd” w st gnuplot> rep “out.tcp” u 2:20 t “ssthresh” w st

gnuplot> p “out.tcp” u 2:($18 < 20 ? $18 : 20) w st ※ 単純に列数を示す場合以外は $ が必要

Page 20: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

20

gnuplot – 補足

ラベルの指定

表示範囲の指定

片対数グラフの作成– x軸を対数プロットにする場合

gnuplot> set log xgnuplot> rep

gnuplot> set xr [x 軸の最小値 :x 軸の最大値 ]gnuplot> set xr [y 軸の最小値 :y 軸の最大値 ]gnuplot> rep

gnuplot> set xl [x 軸のラベル ]gnuplot> set yl [y 軸のラベル ]gnuplot> rep

Page 21: シミュレーション結果の処理方法 ~ awk, gnuplot ~

情報通信技術論/インターネット工学

21

レポートに関する補足 シミュレーションの実行、結果の処理

– もちろん、他の言語を使用しても構いません C 言語 Perl, Ruby, シェルスクリプト , …

グラフの作成– もちろん、他のアプリケーションを使用しても構いません

グラフ用紙に手書き Excel, OpenOffice Calc, …

レポート作成– 紙で提出してください

レポート用紙に手書き LaTeX Word, OpenOffice Writer, 一太郎 , …