シミュレーション結果の処理方法 ~awk, gnuplot~ 演習第2回 情報通信技術論 インターネット工学 情報通信技術論/インターネット工学 オーク awkによるデータ処理 データ(テキスト形式)の加工・取り出しが可能 読み込んだデータを1行ごとに処理 C言語っぽい 書式 % awk ‘パターン {アクション}' 入力データファイル 条件が一致した場合に行う操作 If文の条件文みたいなもの 1 情報通信技術論/インターネット工学 awkの簡単な使用例 weather.dat 2列目($2) :Location 3列目($3) :気温 4列目($4) :湿度 Sapporo Aomori Akita Morioka Sendai Yamagata Fukushima Mito Utsunomiya Maebashi Kumagaya Tokyo 鹿児島 那覇 Kagoshima Naha 気象庁ホームページより・一部改変 LocationがSendaiの行を抜き出す % awk ‘$2 == “Sendai”’ weather.dat – ‘$2 = “Sendai”’とすると? 9.1 12.1 13.6 12.7 15.6 14.2 16.7 16.4 16.0 17.3 17.8 18.8 84 76 71 69 64 69 57 70 76 65 71 61 19.7 24.3 65 79 湿度が61の行を抜き出す % awk ‘$4 == 61’ weather.dat 気温が16以下の行を抜き出す % awk ‘$3 <= 16’ weather.dat 気温>20かつ湿度<80の行を抜き出す % awk ‘$3>20 && $4<80’ weather.dat … 札幌 青森 秋田 盛岡 仙台 山形 福島 水戸 宇都宮 前橋 熊谷 東京 使用可能な演算子の例 +, -, *, /, % <, <=, ==, !=, >, >= &&, || 2 情報通信技術論/インターネット工学 行数を数える wc (Word Count) – ファイルの行数・単語数・バイト数(サイズ)を表示 % wc weather.dat 47 188 1833 weather.dat 行数だけを出力したい場合 % wc -l weather.dat 3 情報通信技術論/インターネット工学 リダイレクション・パイプ リダイレクション: awkの実行結果をファイルに保存 – 気温>16である行をfileに保存(上書きに注意) % awk ‘$3 > 16’ weather.dat > file – 行数は? % wc -l file パイプ: awkの実行結果を入力として他のコマンドを実行 – 気温>16である行の行数 % awk ‘$3 > 16’ weather.dat | wc -l 4 情報通信技術論/インターネット工学 何に使うのか? sample.tclを実行 % ns sample.tcl cbr ノード0 ノード2 ノード1 ノード3 tcp out.tr, out.tcp, out.namが生成される 5 情報通信技術論/インターネット工学 out.tr (抜粋) – – – – – – + + r + + r $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 1 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 1.00931 0 2 cbr 210 ------- 0 0.0 3.0 1 1 … 6 情報通信技術論/インターネット工学 パケットの一生を見てみる あるパケット(ID=200, cbr)の流れに注目 % + r + r 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 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 1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200 cbr ノード0 ノード2 ノード1 ノード3 tcp 7 情報通信技術論/インターネット工学 パケットの流れ あるパケット(ID=200, cbr)の流れに注目 % + r + r 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 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 1.683153 2 3 cbr 210 ------- 0 0.0 3.0 173 200 パケット キュー (バッファ) ノード0 ノード2 ノード3 リンク 8 情報通信技術論/インターネット工学 パケットの流れ(ドロップされるパケット) あるパケット(ID=234, cbr)の流れに注目 % + r + d 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 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 1.70306 2 3 cbr 210 ------- 0 0.0 3.0 186 234 一度キューに入って(入ろうとして)からドロップされる ドロップ パケット キュー (バッファ) ノード0 ノード2 ノード3 リンク 9 情報通信技術論/インターネット工学 TCPのシーケンス番号に注目してみる あるパケット(seqno=100, tcpおよびack)の流れに注目 % awk ‘($5==“tcp”||$5==“ack”) && $11==100’ out.tr RTT 2.534623 -) 2.489317 0.045306 + r + r + r + r 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 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 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 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 2.534623 2 1 ack 40 ------- 1 3.1 1.0 100 643 tcp ノード1 ノード3 ノード2 ack 10 情報通信技術論/インターネット工学 送受信パケットの抽出 cbr ノード0 ノード2 ノード1 ノード3 tcp 送信されたcbrパケットの表示 % awk ‘$1==“+” && $3==0 && $4==2 && $5==“cbr”’ out.tr 送信されたtcpパケットの表示 % awk ‘$1==“+” && $3==1 && $4==2 && $5==“tcp”’ out.tr 受信されたcbr / tcpパケットの表示 % awk ‘$1==“r” && $3==2 && $4==3 && $5==“cbr”’ out.tr % awk ‘$1==“r” && $3==2 && $4==3 && $5==“tcp”’ out.tr 11 情報通信技術論/インターネット工学 ドロップされたパケットの抽出 cbr ノード0 ノード2 ノード1 ノード3 tcp 廃棄されたcbr /tcpパケットの表示 % awk ‘$1==“d” && $5==“cbr”’ out.tr % awk ‘$1==“d” && $5==“tcp”’ out.tr ※ 廃棄された場所(リンク)は問わない 12 情報通信技術論/インターネット工学 送受信/ドロップパケット数の算出 送信パケット数の算出 % 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 13 情報通信技術論/インターネット工学 通信品質の評価指標 受信者が受信した量 ヘッダを含む (総受信パケット数)×(パケットサイズ)[bytes] スループット[Mbps] = (通信時間)[s] 送信者がパケットを送出した時間 ドロップの場所は問わない (総ドロップパケット数) パケットドロップ率[%] = (総送信パケット数) ×100 送信者が送信した量 ※ M = 106 bps = bit/sec 1 bytes = 8 bits 14 情報通信技術論/インターネット工学 ニュープロット gnuplotによるグラフ描画 基本的な使用方法 % gnuplot … gnuplot> p “データファイル” u x軸のデータがある列:y軸のデータがある列 t “凡例名” (※ 実際には1行) w プロット形式 gnuplot> rep “データファイル” … … 納得のいくグラフが作成できたら … gnuplot> set term post color gnuplot> set output “ファイル名.ps” gnuplot> rep gnuplot> q (終了) % gv ファイル名.ps (結果の確認) % lpr ファイル名.ps (印刷) 15 情報通信技術論/インターネット工学 gnuplotの簡単な使用例 sendai.dat 1列目($1) :時刻 2列目($2) :気温 3列目($3) :湿度 # 時刻 1 2 3 4 5 6 7 8 9 10 11 12 気温 18.4 16.0 16.7 16.2 16.0 15.9 16.4 15.7 16.5 16.9 16.3 16.3 湿度 48 67 51 49 50 51 48 57 57 56 65 65 … 23 24 13.3 12.5 83 90 気象庁ホームページより・一部改変 x軸を時刻、y軸を気温としてプロット gnuplot> p “sendai.dat” u 1:2 w lp – プロット形式:l, lp, st, d, iなど – 目的に合わせてプロット形式を選択する – 凡例はお好みで x軸を時刻、y軸を湿度として上のグラフに 重ねてプロット gnuplot> rep “sendai.dat” u 1:3 w lp ps (postscript)形式で保存 gnuplot> gnuplot> gnuplot> gnuplot> set term post color set output “sendai.ps” rep q 16 情報通信技術論/インターネット工学 out.tcp (抜粋) – – – – $1: 時刻 $16: 送信シーケンス番号 $18: 輻輳ウインドウサイズ $20: スロースタート閾値 time: 0.00000 saddr: 1 sport: 0 daddr: cwnd: 1.000 ssthresh: 20 dupacks: 0 time: 1.53096 saddr: 1 sport: 0 daddr: cwnd: 2.000 ssthresh: 20 dupacks: 0 time: 1.57005 saddr: 1 sport: 0 daddr: cwnd: 3.000 ssthresh: 20 dupacks: 0 time: 1.57559 saddr: 1 sport: 0 daddr: cwnd: 4.000 ssthresh: 20 dupacks: 0 time: 1.60869 saddr: 1 sport: 0 daddr: cwnd: 5.000 ssthresh: 20 dupacks: 0 time: 1.61535 saddr: 1 sport: 0 daddr: cwnd: 6.000 ssthresh: 20 dupacks: 0 time: 1.62202 saddr: 1 sport: 0 daddr: cwnd: 7.000 ssthresh: 20 dupacks: 0 time: 1.62757 saddr: 1 sport: 0 daddr: cwnd: 8.000 ssthresh: 20 dupacks: 0 time: 1.64733 saddr: 1 sport: 0 daddr: cwnd: 9.000 ssthresh: 20 dupacks: 0 3 dport: 1 rtt: 0.000 3 dport: 1 rtt: 0.030 3 dport: 1 rtt: 0.040 3 dport: 1 rtt: 0.040 3 dport: 1 rtt: 0.040 3 dport: 1 rtt: 0.040 3 dport: 1 rtt: 0.040 3 dport: 1 rtt: 0.040 3 dport: 1 rtt: 0.040 maxseq: -1 srtt: 0.000 maxseq: 0 srtt: 0.030 maxseq: 2 srtt: 0.030 maxseq: 4 srtt: 0.030 maxseq: 6 srtt: 0.030 maxseq: 8 srtt: 0.030 maxseq: 10 srtt: 0.030 maxseq: 12 srtt: 0.030 maxseq: 14 srtt: 0.030 hiack: -1 seqno: 0 rttvar: 12.000 bkoff: hiack: 0 seqno: 1 rttvar: 0.015 bkoff: hiack: 1 seqno: 3 rttvar: 0.015 bkoff: hiack: 2 seqno: 5 rttvar: 0.015 bkoff: hiack: 3 seqno: 7 rttvar: 0.015 bkoff: hiack: 4 seqno: 9 rttvar: 0.015 bkoff: hiack: 5 seqno: 11 rttvar: 0.015 bkoff: hiack: 6 seqno: 13 rttvar: 0.015 bkoff: hiack: 7 seqno: 15 rttvar: 0.015 bkoff: 1 1 1 1 1 1 1 1 1 … 17 情報通信技術論/インターネット工学 各変数の時間変化の図示 シーケンス番号($16: seqno) gnuplot> p “out.tcp” u 2:16 t “seqno” w l 輻輳ウインドウサイズ($18: cwnd) スロースタート閾値($20: ssthresh) gnuplot> p “out.tcp” u 2:18 t “cwnd” w st gnuplot> rep “out.tcp” u 2:20 t “ssthresh” w st 輻輳ウインドウサイズと”20”の最小値 gnuplot> p “out.tcp” u 2:($18 < 20 ? $18 : 20) w st ※ 単純に列数を示す場合以外は$が必要 18 情報通信技術論/インターネット工学 gnuplot – 補足 ラベルの指定 gnuplot> set xl [x軸のラベル] gnuplot> set yl [y軸のラベル] gnuplot> rep 表示範囲の指定 gnuplot> set xr [x軸の最小値:x軸の最大値] gnuplot> set xr [y軸の最小値:y軸の最大値] gnuplot> rep 片対数グラフの作成 – x軸を対数プロットにする場合 gnuplot> set log x gnuplot> rep 19 情報通信技術論/インターネット工学 レポートに関する補足 シミュレーションの実行、結果の処理 – もちろん、他の言語を使用しても構いません C言語 Perl, Ruby, シェルスクリプト, … グラフの作成 – もちろん、他のアプリケーションを使用しても構いません グラフ用紙に手書き Excel, OpenOffice Calc, … レポート作成 – 紙で提出してください レポート用紙に手書き LaTeX Word, OpenOffice Writer, 一太郎, … 20
© Copyright 2024 ExpyDoc