ネットワークコンピューティング実習

1. URL
2. 担当教員
3. TA (ティーチングアシスタント)
4. ネットワークに関する疑問
5. 講義目的: 到達目標
6. 授業方法
7. 成績評価
8. スケジュール
9. 大崎が担当する科目に共通の連絡事項・アドバイス
10. Debian GNU/Linux のインストール
11. UNIX (UNIX とは、ユーザ権限、パッケージ管理)
12. Debian GNU/Linux セットアップ〜パッケージ管理
13. シェル (ファイル操作、リダイレクト、パイプ)
14. X ウィンドウシステム & ウィンドウマネージャ
15. エディタ (Emacs チュートリアル)
16. シミュレータ導入 (インストール、実行、可視化)
17. Python 言語 (1) (名前、変数、式)
18. Python 言語 (2) (文、スコープ、サブルーチン)
19. Python 言語 (3) (オブジェクト指向プログラミング)
20. 最終レポート課題 (実施報告書)
21. シミュレータ解説 (1) (概要、エージェント)
22. シミュレータ解説 (2) (モビリティ、可視化)
23. ソフトウェア設計・実装
24. オプション課題: 性能評価 (p% 配送遅延)

オプション課題: 性能評価 (p% 配送遅延)

内容目標

- dtnsim の monitor.Log モジュールを用いて、シミュレーションのログを出力できるようになる

- monitor.Log モジュールが出力するログの意味を理解できるようになる

- エピデミックブロードキャストにおける代表的な性能指標 (p% 配送遅延) を理解し、シミュレーション結果のログから計算できるようになる

- 乱数のシードの異なるシミュレーションを繰り返し実行し、性能指標の平均や信頼区間を計算できるようになる。

課題

課題 1

dtnsim を以下の条件で実行せよ。 (1) エージェント数は 10、 (2) 移動モデルは RandomWaypoint、 (3) 経路制約なし、 (4) エージェントは Epidemic。 次に、 デフォルトの monitor.Cell クラスではなく、 シミュレーションのログを標準出力に書出す monitor.Log モジュールを用いて実行せよ。

課題 2

monitor.Log モジュールの出力の意味 (各フィールドの意味) を、 monitor/log.py を読んで推測せよ。 また、 monitor.Log モジュールの出力と、 monitor.Cell モジュールを用いた可視化結果と比較し、 推測の正しさを確認せよ。

課題 3

p% 配送遅延を求めるフィルタプログラム p-coverage を作成せよ。

標準入力から monitor.Log モジュールからの出力を読み込み、 標準出力に p% 配送遅延を出力せよ。 プログラム p-coverage の引数は、 ノード数と p% 配送率の p とせよ。

例えば 50% 配送遅延であれば、 ノード数が N の時、 N / 2 のノードにメッセージが配送された時刻を求めて出力すればよい。

p-coverage を正しく作成すれば、 例えば以下のような結果が得られるようになる。 シミュレーションの特性上、 表示される値は実行する度に毎回変化することに注意する。

> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage 10 50
1410

課題 4

課題 3 のシミュレーションを、 乱数のシードを変化させて 10 回実行し、 その時の 50% 配送遅延の平均および 95% 信頼区間を求めよ。

平均および 95% 信頼区間の計算には py-stats を使用せよ。

stats - calcurate statistics of values in each column
https://github.com/h-ohsaki/py-stats

課題

課題 1

> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic | cellx -L30
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log
605     forward 1       6       1-2-1
605     status  1       1       0       0       0       0
615     forward 1       4       1-2-1
615     status  2       2       0       0       0       0
615     forward 6       1       1-2-1   dup
615     status  3       3       1       0       0       0
630     forward 4       5       1-2-1
630     status  4       4       1       0       0       0
670     forward 5       1       1-2-1   dup
670     status  5       5       2       0       0       0
700     forward 1       5       1-2-1   dup
700     status  6       6       3       0       0       0
705     forward 5       6       1-2-1   dup
705     status  7       7       4       0       0       0
740     forward 1       5       1-2-1   dup
      :
      :

※ プログラムの中断は C-c (Ctrl キーを押しながら c キーを押す)

課題 2

2 カラム目が forward の行:
シミュレーション時刻
forward
送信元エージェントの ID
宛先エージェントの ID
メッセージ ID
メッセージのステータス

2 カラム目が status の行:
シミュレーション時刻
status
送信メッセージ数の総和
受信メッセージ数の総和
重複メッセージ数の総和
ユニークメッセージ数の総和 ※
配送完了したメッセージ数 ※※
配送完了したユニークメッセージ数 ※※
※ 未使用
※※ ブロードキャスト時には意味を持たない

課題 3

p-coverage の例 (Python)
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage

> wget https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage
> chmod +x p-coverage
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage 10 50

(別解)

p-coverage の例 (シェルスクリプト)
https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage.sh

> wget https://lsnl.jp/~ohsaki/lecture/netcompx/2025/performance/p-coverage.sh
> chmod +x p-coverage.sh
> dtnsim -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage.sh 10 50

課題 4

同じ処理を 10 回繰り返すには、シェルの for ループを使えばよい。

> for i in (seq 10)
> dtnsim -s $i -n 10 -m RandomWaypoint -p NONE -a Epidemic -M Log | ./p-coverage 10 50
> end | tee log
1565
2720
3440
3330
2140
2155
1410
4640
2755

これにより、実行結果 (実行したコマンドの標準出力) がファイル log に保存される。

py-stats のインストール

> sudo PIP_BREAK_SYSTEM_PACKAGES=1 pip3 install -U py-stats

10 回の試行で得られた 50% 配送遅延の統計値を求める。

> pystats -v log
count   9
sum     24155
min     1410
max     4640
mean    2683.89
median  2720
mode    2755
var     919127
stddev  958.711
cv      35.721
skew    0.556121
kurt    -0.43412
quant10 1410
quant25 2140
quant50 2720
quant75 3330
quant90 4640
conf90  525.693
conf95  626.358
conf99  823.213
findex  0.88684

平均が 2683.89、95% 信頼区間が +/-626.358 であることがわかる。


Hiroyuki Ohsaki (ohsaki[atmark]lsnl.jp)
[<23. ソフトウェア設計・実装]