シミュレーション結果の処理方法ps (postscript) 形式で保存 # 時刻 気温 湿度...

21
シミュレーション結果の処理方法 awk, gnuplot演習第2情報通信技術論 インターネット工学

Upload: others

Post on 06-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

演習第2回

情報通信技術論

インターネット工学

Page 2: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

1

awkによるデータ処理

データ(テキスト形式)の加工・取り出しが可能

読み込んだデータを1行ごとに処理

C言語っぽい

書式

オーク

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

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

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

Page 3: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

2

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.dat 2列目($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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

3

行数を数える

wc (Word Count)

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

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

% wc weather.dat 47 188 1833 weather.dat

% wc -l weather.dat

Page 5: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

4

リダイレクション・パイプ

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

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

– 行数は?

パイプ: awkの実行結果を入力として他のコマンドを実行

– 気温>16である行の行数

% awk „$3 > 16‟ weather.dat > file

% wc -l file

% awk „$3 > 16‟ weather.dat | wc -l

Page 6: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

5

何に使うのか?

sample.tclを実行

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

ノード0

ノード2

ノード1

ノード3

cbr

tcp

% ns sample.tcl

Page 7: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

6

out.tr (抜粋)

– $1: イベント

– $2: イベント発生時刻

– $3, $4: イベント発生場所(リンク)

– $5: パケットの種類

– $11: パケットのシーケンス番号

– $12: パケット固有の番号(ID)

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

+ 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 1 r 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 2 r 1.00931 0 2 cbr 210 ------- 0 0.0 3.0 1 1

Page 8: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

7

パケットの一生を見てみる

あるパケット(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 200 r 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 200 r 1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200

Page 9: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

8

パケットの流れ

あるパケット(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 200 r 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 200 r 1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200

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

パケット

キュー

(バッファ)

リンク

Page 10: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

9

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

あるパケット(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 234 r 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 234 d 1.70306 2 3 cbr 210 ------- 0 0.0 3.0 186 234

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

パケット

キュー

(バッファ)

リンク

ドロップ

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

Page 11: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

10

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 631 r 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 631 r 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 643 r 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 643 r 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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

11

送受信パケットの抽出

送信された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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

12

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

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

ノード0

ノード2

ノード1

ノード3

cbr

tcp

% awk „$1==“d” && $5==“cbr”‟ out.tr

% awk „$1==“d” && $5==“tcp”‟ out.tr

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

Page 14: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

13

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

送信パケット数の算出

受信パケット数の算出

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

% 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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

14

通信品質の評価指標

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

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

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

送信者が送信した量

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

(総送信パケット数)

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

※ M = 106

bps = bit/sec 1 bytes = 8 bits

Page 16: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

15

gnuplotによるグラフ描画

基本的な使用方法

ニュープロット

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

(※ 実際には1行)

Page 17: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

16

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

sendai.dat 1列目($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 color gnuplot> set output “sendai.ps” gnuplot> rep gnuplot> q

Page 18: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

17

out.tcp (抜粋)

– $1: 時刻

– $16: 送信シーケンス番号

– $18: 輻輳ウインドウサイズ

– $20: スロースタート閾値

time: 1.53096 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 0 hiack: 0 seqno: 1

time: 1.57005 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 2 hiack: 1 seqno: 3

time: 1.57559 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 4 hiack: 2 seqno: 5

time: 1.60869 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 6 hiack: 3 seqno: 7

time: 1.61535 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 8 hiack: 4 seqno: 9

time: 1.62202 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 10 hiack: 5 seqno: 11

time: 1.62757 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 12 hiack: 6 seqno: 13

time: 1.64733 saddr: 1 sport: 0 daddr: 3 dport: 1 maxseq: 14 hiack: 7 seqno: 15

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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

18

各変数の時間変化の図示

シーケンス番号($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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

19

gnuplot – 補足

ラベルの指定

表示範囲の指定

片対数グラフの作成

– x軸を対数プロットにする場合

gnuplot> set log x gnuplot> 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: シミュレーション結果の処理方法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 8 15.7 57 9 16.5 57

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

20

レポートに関する補足

シミュレーションの実行、結果の処理

– もちろん、他の言語を使用しても構いません C言語

Perl, Ruby, シェルスクリプト, …

グラフの作成

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

Excel, OpenOffice Calc, …

レポート作成

– 紙で提出してください レポート用紙に手書き

LaTeX

Word, OpenOffice Writer, 一太郎, …