annotate paper/evaluation.tex @ 17:32ba010cf7da

slide
author fuchita
date Mon, 18 Feb 2008 05:05:25 +0900
parents 9bbcbcd1c3ec
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
1 \chapter{分散デバッグ機能と評価}
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
2 4章にてJava言語によるLindaサーバーとLinda APIの実装を行った事を報告した。
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
3 Java言語による実装を得た事により、Federated Lindaへの機能拡張を比較的容易に行う事が可能となった。
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
5 Federated LindaによるCompact Routingの実験においては、ルーティングテーブルの構築を例に、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
6 分散環境でのスケーラビリティをもった実装を確認しようとしたが、現状のLindaの実装では個々のノードが
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
7 どのような通信状態をもってスケーラビリティを達成するのか明確に確認することが困難なばかりか、
13
fuchita
parents: 12
diff changeset
8 格子状のメッシュ型トポロジにおける実験においては、どのような通信状態によってノード全体のスケーラビリティが低下
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
9 しているのかを確認するすべが存在しなかった。これを解決する為には、Federated Lindaの通信を阻害せずに
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
10 大域的な情報でデバッグが行えるインターフェースが必要である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
11
13
fuchita
parents: 12
diff changeset
12 よって本章では、分散環境におけるデバッグの難しさと分散デバッグに必要な機能について説明し、
fuchita
parents: 12
diff changeset
13 そのうちから通信状態の集中を検知するという点において、
fuchita
parents: 12
diff changeset
14 Java版Lindaサーバーへの通信状態のデバッグインターフェースの実装と、視覚的に通信状態を確認する
fuchita
parents: 12
diff changeset
15 モニターツール実装の二点を行い、
fuchita
parents: 12
diff changeset
16 その評価を行う。
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
17 本論文でFederated Lindaに追加する分散デバッグ機能のアプローチは、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
18 4章で必要性を述べた通信状態のデバッグをJava版Linda サーバーへの拡張を行う事で実現するものである。
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
19
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
20 %分散アルゴリズムのデバッグの難しさ
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
21 %逐次アルゴリズムのデバッグ手法 ーー二分法
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
22 %gdbの全ノードへの手法による限界、ログをprintfするのではダメ
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
23 %デバッグする対象 デッドロック、ライブロック、スケーラビリティ、通信の集中、大量のパケット(ACK)
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
24 %個々の部品が正しく動いていても全体として正しく動かない場合がある。二分法は無力、
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
25 %スナップショットがあれば二分法が使える、量はかなり多い、デッドロックの検出も可能、循環した依存性の検出
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
26 %分散デバッガでおかしなぶぶんを見つけて、入力タプルと出力タプルを特定
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
27 %そうすれば逐次型でデバッグできる
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
28 %重要なのはスナップショット、便利
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
29 %分散デバッグアルゴリズム自体がスケールしなければいけない、一カ所にデータを集めるのはいけない
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
30 %通信の集中は統計で見れる-> 今回はコレ
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
31 %ビジュアライゼーション、意味不明なprintfを視覚的に
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
32
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
33 \section{分散環境におけるデバッグ}
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
34 分散環境における分散プログラムのデバッグは逐次型プログラムに比べて困難である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
35 それは、一般的に用いられるgdbやIDE(統合開発環境)のデバッガが逐次プログラムをデバッグする為に
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
36 機能を提供するのに対して、分散プログラムには、一般的なデバッガではデバッグが困難な特徴が
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
37 存在する為である。
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
38
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
39 ここでは一般的なデバッガを用いた二分法によるデバッグ手法と、分散プログラム開発での
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
40 シーケンシャルなデバッグ手法では解決困難な問題点について説明する。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
41 \newpage
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
42 \subsection{二分法による逐次アルゴリズムのデバッグ}
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
43 一般的なgdbやIDEのデバッガ等を用いた二分法での逐次アルゴリズムのデバッグは、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
44 プログラムの単体試験や結合試験工程では大変有効な手法である。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
45
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
46 特にこの手法を用いるのにおいて適している状況は、プログラムにおけるバグの存在が既知であり、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
47 そのバグを生じさせることが確実であるという場合である。以下に二分法の基本的な方法を示す。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
48
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
49 \begin{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
50 \begin{itembox}[l]{二分法によるデバッグ}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
51 {\small
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
52 \begin{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
53 \begin{verbatim}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
54 [条件定義]
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
55 ・バグは既知であり、再現性があること
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
56 ・バグはプログラムの状態(大域変数と局所変数の値)から判断できること
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
57
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
58 [二分法]
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
59 1. プログラムの初期実行をα = s0とする
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
60 2. バグが発生している時点の実行ステートメントを β = sN とする
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
61 3. N' = N/2 とし sN'のプログラムの状態にバグがあるかどうかを調べる
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
62 4. バグがあるかないかによってα = sN'またはβ = sN'とする
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
63
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
64 5. 上記を繰り返す事により α +1 = β となる
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
65 6. これにより、バグが存在する時点の実行ステートメントとプログラムの状態を得る
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
66 \end{verbatim}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
67 \end{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
68 }
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
69 \end{itembox}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
70 \end{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
71
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
72 上記の手法は簡単ながらも非常に強力なデバッグ手法であり、半ば自動化された作業によってバグの特定を
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
73 可能とする。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
74 しかし、分散プログラムの開発工程においては、上記の手法では解決困難な状況が存在する。
17
fuchita
parents: 16
diff changeset
75 次は、そのような状況についてFederated Lindaの通信状態のデバッグを例に説明する。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
76 \subsection{シーケンシャルなデバッグ手法の問題点}
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
77 二分法を用いたシーケンシャルなデバッグ手法を前述したが、分散アルゴリズムの開発においては、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
78 二分法では解決できない状況が存在する。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
79
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
80 その状況とは、分散環境の各ノード、つまり全体を構成する個々の部品が正しく動いていても、全体としては
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
81 正しく動かないという状況が存在する事を指す。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
82
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
83 ここで、Federated Lindaの通信状態を例にシーケンシャルなデバッグ(つまり単体の部品のデバッグ)が
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
84 有効な場合と、単体のシーケンシャルなデバッグでは全体の動作の正しさをデバッグできない例をそれぞれ
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
85 示す。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
86
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
87 \newpage
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
88 \subsubsection{単体のデバッグが有効な例}
16
9bbcbcd1c3ec Chapter 5
fuchita
parents: 15
diff changeset
89 図\ref{seqdeb}に示すのはFederated Lindaにおける通信にて、単体のプロセスに対する逐次デバッグが
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
90 有効な場合の通信状態である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
91 この通信の場合においては1つのInputに対して1つのOutputを持つプロセスのデバッグを行う事で、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
92 全体の動作に関係する通信の流れをとらえることが可能であるからである。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
93 \begin{figure}[htbp]
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
94 \begin{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
95 \includegraphics[width=8cm]{fig/pdf/seqdeb.pdf}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
96 \caption{単体のデバッグが有効なFederated Lindaの通信}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
97 \label{seqdeb}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
98 \end{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
99 \end{figure}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
100
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
101 \vspace{-1cm}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
102 \subsubsection{単体のデバッグでは全体の正しさをデバッグできない例}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
103 続いて図\ref{nonseqdeb}に示すのはFederated Lindaにおける通信で、単体のデバッグでは全体の正しさを
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
104 デバッグできない例である。なぜ全体の動作に対する正しさをデバッグできないかというと、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
105 図に示すデバッガを接続したプロセスが1つのInputに対して1つのOutputを正しく出力する事がデバッグ
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
106 できても、デバッグを行ったプロセスとは関係しない通信の流れが存在する為に、プロセスの全体の通信に対
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
107 する依存性をデバッグできない為である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
108
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
109 \begin{figure}[htbp]
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
110 \begin{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
111 \includegraphics[width=8cm]{fig/pdf/nonseqdeb.pdf}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
112 \caption{単体ではデバッグが困難なFederated Lindaの通信}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
113 \label{nonseqdeb}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
114 \end{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
115 \end{figure}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
116
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
117 このような個々のプロセスをデバッグしただけでは全体の正しさが分からない場合、gdbやIDEのデバッガとい
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
118 った逐次デバッガを全ノードに対して接続することが考えられるが、このような手法は全体を構成するノード
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
119 が大規模化した場合においてその手間やリソースの集中におけるスケーラビリティの低下や、一度に大量の
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
120 デバッグ情報が取り扱われる為に、その中から求めている情報を取捨選択することの困難さ等が問題となる
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
121 ので、全ての分散環境におけるデバッグの手法としては正しくない。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
122
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
123 また、デバッガによるプロセスの停止によってネットワークの遅延や送信データの喪失が起これば、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
124 全体の通信の同期に必要とされるデータが揃わないまま同期を取ることになる。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
125 そうなると本当の意味での同期が取られていないということになり、バグ再現の為の条件が一定の通信状態
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
126 を要求する場合において問題がある。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
127
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
128 \section{分散デバッグ機能の検討}
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
129 これまで二分法による逐次アルゴリズムのデバッグと分散環境におけるデバッグの問題点を述べた。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
130 ここでは、Federated Lindaに必要なデバッグ機能を提案するために、分散アルゴリズムにおいてデバッグ
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
131 すべき要素を挙げ、それらをデバッグ可能な機能としてスナップショットを用いた分散デバッグを説明する。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
132 %また、Federated Lindaを用いる事でスケーラビリティを持った分散デバッグ機能を実現することについても
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
133 %述べる。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
134 \subsection{分散アルゴリズムにおいてデバッグすべき対象}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
135 %デバッグする対象 デッドロック、ライブロック、スケーラビリティ、通信の集中、大量のパケット(ACK)
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
136 分散アルゴリズムにおいてデバッグすべき対象には以下のものがある。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
137 {\large
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
138 \begin{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
139 \begin{verbatim}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
140 ・デッドロック
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
141 ・ライブロック
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
142 ・スケーラビリティ
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
143 ・通信の集中
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
144 ・大量のパケットの送信
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
145 \end{verbatim}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
146 \end{center}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
147 }
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
148 \subsubsection{デッドロック}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
149 デッドロックとは、あるプロセスが永遠にブロックされている状態を示す。そのプロセスはある条件が
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
150 真になる(例えばある資源がreadできるようになる)のを待っているが、その条件を真にするはずの別の
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
151 プロセスがその条件を執行しないが為に、どちらも何もできなくなるのである。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
152
17
fuchita
parents: 16
diff changeset
153 Federated Lindaにおけるプロセスの通信は、pollingベースの通信ループを持ち、
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
154 通信のパケットは一旦キューに溜め、ある一定のタイミングでまとめて通信を行うことから明確な「待ち」
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
155 というプロセス状態は発生しないが、ユーザープログラムによる「待ち」処理記述の可能性からデッド
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
156 ロックの検出は必要である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
157
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
158 \subsubsection{ライブロック}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
159 ライブロックはデッドロックと異なり、プロセスは実行状態にあるものの、適用されるべきプログラム状態
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
160 の変化が何も成し遂げられない状態を指す。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
161
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
162 例としてFederated Lindaにおけるプロセス間通信で説明すると、あるルーティングテーブルの構築に対
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
163 して2つのプロセスがそれぞれルーティング情報を保持しており、それぞれが相手のプロセスの
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
164 保持するルーティング情報を必要としている場合に、両者が相手のルーティング情報を得る為に自身
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
165 の保持する情報を解放した場合が考えられる。当然ながら、この両方のプロセスは相手の情報を期待して
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
166 いる為に実質的に何も達成できないという状態になる。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
167
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
168 \subsubsection{スケーラビリティ}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
169 スケーラビリティとは、サービスを受けるユーザー数が小規模から大規模に変化しても同じ様に同等
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
170 の能力を発揮できるという性能基準のことである。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
171
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
172 Federated Lindaにおけるスケーラビリティの確認は、前提としてはノード数の増加に対する
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
173 プログラムの実行速度やサービス提供能力のパフォーマンスを、実際のアプリケーションを用いて
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
174 行う事があるが、現在の様に開発途中の段階では、部分的なプログラムの動作を見てその領域における
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
175 スケーラビリティを検証することが必要である。その点においてデバッグインターフェースによる
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
176 スケーラビリティの測定を可能とする事は重要であると考えられる。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
177
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
178 \subsubsection{通信の集中}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
179 分散プログラムの開発段階においては、通信の集中によるバグの発生は常に起こりうる事態である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
180 事実、Federated LindaによるCompact Routingの実装では、ある1つのノードに対してルーティング情報が
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
181 集中的に転送されるというバグが発生した。しかもそのようなバグは通常の逐次デバッガを用いた
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
182 デバッグ手法では、パケット集中を行っている複数のノードに対して複合的なバグ原因を検証することは
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
183 困難である。やはりこのような事態をデバッグするには従来の逐次デバッグとは異なる、分散デバッグ
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
184 インターフェースをもってデバッグを行う事が必要と考える。
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
185
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
186 \subsubsection{大量のパケットの送信}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
187 前述した通信の集中とは逆に、大量のパケットを単体、または複数のノードに対して通常とは異なる
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
188 量で送信するバグも起こりうる。このような場合、大量のパケットによる多ノードへの通信集中はもち
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
189 ろん、送信したノードからのACKnowledgementが大量にネットワーク内に流れる事による、通信効率の
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
190 低下や輻輳の発生を生み出す可能性がある。この問題をデバッグする為には、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
191 プログラムが停止してからではデバッグできない事から、
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
192 輻輳を発生させているプロトコルを動的に検知する必要がある。%###シスコのルーターはそうやってる###
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
193 やはり、この場合も通常の逐次デバッガでは検知が困難なことから、分散デバッグインターフェースを
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
194 用いてデバッグを行う事が望ましいと考える。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
195
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
196
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
197 \subsection{スナップショットによる分散デバッグ}
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
198 %スナップショットがあれば二分法が使える、量はかなり多い、デッドロックの検出も可能、循環した依存性の検出
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
199 %分散デバッガでおかしなぶぶんを見つけて、入力タプルと出力タプルを特定
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
200 %そうすれば逐次型でデバッグできる
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
201 %重要なのはスナップショット、便利
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
202 %分散デバッグアルゴリズム自体がスケールしなければいけない、一カ所にデータを集めるのはいけない
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
203
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
204 現在主に用いられている単体の逐次デバッガは分散環境用に作られていないことから、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
205 分散環境でのデバッグの場合、1プロセスに対してデバッガを動かすか、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
206 複数プロセスに対してそれぞれデバッガを動かしてデバッグを行うかの
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
207 どちらかのスタイルがとられると述べたが、これではデバッグすべきプロセスが増えるとその
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
208 手間はかなりの物になり、現実的なデバッグ手法とは言えない。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
209
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
210 また、分散プログラム環境下ではプログラム状態の非決定性が存在するため通常のデバッグには無い
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
211 問題があることも述べた。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
212 シーケンシャルなデバッグ手法では、通信の到着順序によっても分岐が変化してしまうことから、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
213 デバッグ対象のエラーに対して再現性を確保するのが難しいという問題である。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
214 通常、分散環境下でのデバッグではこれらの点をふまえて、
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
215
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
216 \begin{itemize}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
217 \item {通信におけるプログラムの状態が決定的になるようテストする}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
218 \item {非決定性をシミュレートする}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
219 \item {バリア同期で通信を止めてメモリ等の状態を調べる}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
220 \item {各ノードでスナップショットを取得し、ログを解析する}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
221 \end{itemize}
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
222
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
223 といった方法がとられる。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
224
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
225 今回、Federated Lindaを用いた分散プログラム開発の為のデバッグインターフェースを考えるにあたって、
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
226 上記のうちから「各ノードでスナップショットを取得し、ログを解析する」という手法が最も適している
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
227 と考える。
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
228
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
229 その理由は、スナップショットを用いる事で、Federated Lindaにおける各ノードの通信を止める事無く
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
230 デバッグに必要なプログラムの状態を確認できるという点と、各ノードの大域的な状態を保存する事で
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
231 先に述べた「分散アルゴリズムにおいてデバッグすべき対象」をそれぞれデバッグすることが可能となる
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
232 からである。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
233
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
234 以下で大域的な状態とはどのような物かを説明し、どのようにスナップショットを用いたデバッグインタ
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
235 ーフェースを用いるべきかを説明する。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
236
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
237 \subsubsection{大域的なプログラム状態とは}
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
238 Federated Lindaにおける大域的なプログラム状態には二つの要素があり、各ノードのメモリ状態
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
239 (あるいはそれに類するデータ構造)を持つ事を第一としている。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
240 このメモリ状態を各スナップショットでのタイミングごとに正確に
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
241 取得することにより、プログラムの大域変数や局所変数を用いたバグの特定を可能とする。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
242
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
243 例えば、
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
244 先に述べた様なデッドロックの原因となる排他ロックの要求及び保持を検出する検出器の作成を行い、
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
245 スナップショットのログからデッドロックの追跡を行う事。または、二分法を用いてバグの存在するプロ
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
246 グラムの実行ステートメントとプログラム状態を取得する事が可能となる。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
247
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
248 また、大域的なプログラム状態の要素として第二に、スナップショットを取るタイミングで実行中の
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
249 プロセスが発行した通信に対する状態についても取得すべきと考える。スナップショット取得のタイミングで
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
250 考えられる通信の状態は4つのパターンに分類され、そのパターンとは、
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
251 \\
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
252 \begin{itembox}[l]{-}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
253 {\large
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
254 \begin{center}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
255 \begin{verbatim}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
256 スナップショット取得のタイミング = T
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
257 通信受信先でのスナップショット取得のタイミング = T'
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
258 \end{verbatim}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
259 \end{center}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
260 }
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
261 \end{itembox}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
262
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
263 とすると、
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
264 \begin{itembox}[l]{-}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
265 \begin{itemize}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
266 \item {Tの前にパケットを送信し、T'よりも早くパケットを受け取る場合}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
267 \item {Tの前にパケットを送信し、T'よりも遅くパケットを受け取る場合}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
268 \item {Tの後にパケットを送信し、T'よりも早くパケットを受け取る場合}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
269 \item {Tの後にパケットを送信し、T'よりも遅くパケットを受け取る場合}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
270 \end{itemize}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
271 \end{itembox}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
272
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
273 という4つのパターンである。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
274
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
275 この、スナップショット取得のタイミングに対する通信の状態は、プロセスの再現性や、
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
276 プロセスの状態がある時点でどのように保たれているかを検知する上での同期処理に密接に関わってくる。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
277 通信の状態を同期する処理が行えなければ、ネットワークを介し他のノードと通信を行っている分散
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
278 プログラムの大域的状態を取得する事は、プログラム状態の決定性に欠けることとなる。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
279 よって、分散環境でのスナップショットを考えるにあたっては、上記4パターン通信状態を
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
280 どのように同期するかが重要である。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
281
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
282 \subsubsection{スナップショットを用いた分散デバッグ手法}
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
283 %スナップショットがあれば二分法が使える、量はかなり多い、デッドロックの検出も可能、循環した依存性の検出
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
284 %分散デバッガでおかしなぶぶんを見つけて、入力タプルと出力タプルを特定
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
285 %そうすれば逐次型でデバッグできる
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
286
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
287 ここまで、スナップショットを用いて分散デバッグを行う事と、そのための大域的プログラム状態について
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
288 説明した。ここでは、分散環境で取得したスナップショットをどのように用いてデバッグを行うべきかを
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
289 検討する。
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
290
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
291 \subsubsection{スナップショットのモニターツールと逐次デバッガによるデバッグ}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
292 スナップショットを取得した場合、そのスナップショット・ログは膨大である。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
293 よって、実際にスナップショット・ログからデバッグを行う為には様々な切り口で
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
294 情報を取捨選択できるモニターツールが必要であると考える。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
295 図\ref{snapdeb}にスナップショットのモニタツールを用いたデバッグの様子を示す。
5
c6eefabf35c0 Chapter 5 fix
fuchita
parents: 4
diff changeset
296
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
297 \begin{figure}[htbp]
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
298 \begin{center}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
299 \includegraphics[width=12cm]{fig/pdf/snapdeb.pdf}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
300 \caption{スナップショット・ログを用いたデバッグ}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
301 \label{snapdeb}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
302 \end{center}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
303 \end{figure}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
304
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
305 上記の図ではスナップショット・ログより、大域的プログラム状態の項で
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
306 説明したプログラムのメモリー状態とスナップショット取得のタイミングにおける通信状態を同期させる
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
307 ことによってFederated Lindaの大域的状態を取得している。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
308 また、同期されたスナップショット・ログをモニタツールという、ユーザーが必要なデバッグ情報を取捨
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
309 選択するツールを用いる事を考える。ユーザーはモニタツールを用いて(例えば二文法によるバグ箇所の
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
310 検知などを利用)、どのプロセスから出力と入力があったタプルにバグの原因があるのかを特定するこ
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
311 とができる。そうすれば、その後のバグの修正においては逐次デバッガによるデバッグが可能となる。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
312
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
313 \subsection{分散デバッグ機能のスケーラビリティ}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
314 全ノードに対してデバッグプロセスを走らせてデバッグを行うような
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
315 手法は、デバッグのインターフェースにおけるスケーラビリティを考慮してはいない。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
316
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
317 事実、システム資源の異なるノードに対してネットワークを介したリモートデバッグの手法は
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
318 数多く開発されていても、それが大規模システムを想定した分散プログラムに対してスケーラビリティを
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
319 保ったままデバッグ可能という解を得てはいない。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
320
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
321 Federated Lindaはタプルのリレーという、より分散プログラムを意識したモデルであることから、デバッグ
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
322 インターフェースの大域的状態の取得にもスケーラビリティを持った実装を目指す。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
323 その基本的なアイデアは、デバッグ情報を取得するインターフェースに対してもLindaプロトコルによるタプ
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
324 ルの伝搬を利用して実装するというものである。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
325
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
326 下図\ref{FDLindaDebug}に示すように、Federated Lindaを用いたデバッグインターフェースは、デバッガ
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
327 プロセスからあるノードに対してデバッグ情報の取得を指示するオペレーションを発行し、デバッグ情報の
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
328 取得を行うデバッグプロトコルとしてタプル間を伝搬させる。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
329 デバッガが受け取る結果はFederared Linda内のスナップショットとしての大域的状態であり、それを元に
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
330 デバッグを行う。このような仕組みをとる事で、大規模な分散プログラム環境であってもスケーラビリティ
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
331 を保ったままデバッグを行う事が可能となる。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
332
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
333 \begin{figure}[htbp]
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
334 \begin{center}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
335 \includegraphics[width=14cm]{fig/pdf/FDLindaDebug.pdf}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
336 \caption{スケーラビリティを意識したデバッグインターフェース}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
337 \label{FDLindaDebug}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
338 \end{center}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
339 \end{figure}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
340
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
341 %\newpage
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
342 \section{通信状態デバッグインターフェースの実装}
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
343 ここまで、Federated Lindaを用いた分散環境環境における分散デバッグインターフェースの機能の検討
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
344 を行った。その結果、Federated Lindaで用いられるべき分散デバッグインターフェースはスナップショット
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
345 を用いて、デッドロック、ライブロック、スケーラビリティ、通信の集中、大量のパケットの送信、といった
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
346 要素のデバッグを行う事が必要との結論を得た。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
347
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
348 しかし、検討したスナップショットでのデバッグインターフェースの実装の為には、現実装の
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
349 Federated Lindaで用いられるProtocol Engineには更なる改良が必要である。なぜならば、現在のProtocol
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
350 Engineはルーティングテーブルを内部データとして保持することから、Federated Lindaの大域的状態を
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
351 取得するにはProtocol Engineまでのスナップショットが必要となるからである。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
352 これを解消する為にはProtocol Engineの内部状態をステートレスに実装し、その挙動はやり取りするXML
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
353 に全て埋め込むという実装が求められる。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
354
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
355 本論文では、前述した分散アルゴリズムにおいてデバッグすべき対象のうちから、
6
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
356 通信の集中を検知するデバッグインターフェースについて実装を行った。
d2f357e68afe Chapter 5
fuchita
parents: 5
diff changeset
357 このデバッグインターフェースを用いる事により、3章で提示したCompact Routingを用いるFederated Linda
13
fuchita
parents: 12
diff changeset
358 において、格子状のメッシュ型トポロジで起こった、デバッグ困難な通信の集中を伴う状態の検知を行う事を目標とする。
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
359 以下にその詳細を示す。
4
633fe343d3a7 add Chapter 5
fuchita
parents: 3
diff changeset
360
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
361
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
362 \subsection{Java版Linda サーバーへの機能実装}
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
363 通信状態デバッグインターフェースとしてJava版のタプルサーバーへの機能拡張を行った。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
364 この実装はFederated Lindaの通信を止めずに、通信のログを取りたい時に各Java版Lindaサーバーへデバッグ
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
365 タスクを投入し、デバッグタスクを切断してもFederated Lindaの通信状況は変化せず続く、というように
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
366 Federated Lindaを動かしながらのConnect,Disconnectに対応する。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
367 図\ref{comdebug1}にその様子を示す。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
368 \begin{figure}[htbp]
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
369 \begin{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
370 \includegraphics[width=16cm]{fig/pdf/comdebug1.pdf}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
371 \caption{デバッグタスクのConnect,Disconnect処理}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
372 \label{comdebug1}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
373 \end{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
374 \end{figure}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
375
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
376 Federated Lindaの通信を止める事無く通信のデバッグタスクを投入できることで、通信ログが欲しい
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
377 状況に適宜、通信デバッグタスクを投入することができる。また、Federated Linda全体の通信状態の
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
378 遷移が知りたい場合は、Federated Lindaを構成するLindaサーバーの全てに対して通信デバッグタスクを
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
379 投入し、Federated Linda内部のシーケンス番号やタプルID、または時系列情報をもとにその整合を行う。
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
380 図\ref{comdebug2}に実装したデバッグインターフェースの動作の様子を示す。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
381 \begin{figure}[htbp]
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
382 \begin{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
383 \includegraphics[width=16cm]{fig/pdf/comdebug2.pdf}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
384 \caption{通信状態のデバッグインターフェース}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
385 \label{comdebug2}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
386 \end{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
387 \end{figure}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
388
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
389 \newpage
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
390 \subsection{実装の詳細}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
391 今回、Java版タプルサーバーへの機能拡張として追加した、通信状態のデバッグインターフェースは、
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
392 以下のクラスから構成される。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
393 \begin{figure}[htbp]
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
394 \begin{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
395 \includegraphics[width=14cm]{fig/pdf/comdebugClass.pdf}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
396 \caption{通信デバッグインターフェースのクラス図}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
397 \label{comdebugClass}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
398 \end{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
399 \end{figure}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
400
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
401 class ComDebugはJava版Lindaサーバーにおける通信状態のデバッグインターフェースを提供する。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
402 通信状態のログはハッシュテーブルであるCom\_Hashtableに蓄えられ、デバッグインターフェースの
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
403 接続先を表すリンクドリストのReport\_Channellistに対して、Report()メソッドを用いてデバッグクライア
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
404 ントにLindaのタプルとして送信される。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
405
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
406 class ComDebug\_Clientは通信状態のデバッグインターフェースにおけるクライアントプログラムであり、
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
407 その実行時にLindaサーバーのホストネームとポート番号を指定して接続する。クライアントプログラムの
17
fuchita
parents: 16
diff changeset
408 通信ループはclass FederatedLinda.java, class PSXLinda.javaで定義されたSelectorベースのLinda APIの
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
409 通信ループを用いる。クライアントプログラムが受け取る通信パケットはLindaのタプルデータである。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
410
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
411 \subsubsection{機能拡張を行ったLindaサーバーの通信ループ}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
412 以下に、今回の通信状態デバッグインターフェース拡張を行った、Java版Lindaサーバーの通信ループ
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
413 を示す。
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
414 \begin{center}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
415 \begin{itembox}[l]{ComDebug機能拡張部分}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
416 {\footnotesize
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
417 \begin{verbatim}
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
418 if (debug) {
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
419 System.out.println("data from : "+key.channel());
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
420 }
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
421 if((mode == '!') || (len == 0)) {
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
422 ClosewishComDebug(key, command, reportCh_list);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
423 }
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
424 else if(mode == PSX_CHECK) {
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
425 sendtext = Check(key, command);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
426 }
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
427 else if(mode == PSX_IN || mode == PSX_RD){
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
428 sendtext = In_Rd(key, command, mode);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
429 } else if (mode == PSX_WAIT_RD) {
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
430 Wait_Rd(key, command, mode);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
431 } else if(mode == PSX_OUT) {
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
432 sendtext = Out(command, data);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
433 } else {
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
434 System.out.println("Uncorrect buffer");
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
435 System.exit(1);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
436 }
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
437 //COM_DEBUG
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
438 if(id > PRIVILEGED_ID_START && id < PRIVILEGED_ID_END){
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
439 ComDebug.addChannel(key, reportCh_list);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
440 }
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
441 //DEBUG用カウンタ
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
442 String debug_rep = ComDebug.Com_inc(key, com_Loggingtable,
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
443 mode, id, seq, sendtext);
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
444 //DEBUG用レポート
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
445 ComDebug.Report(reportCh_list, command, debug_rep);
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
446 \end{verbatim}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
447 }
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
448 \end{itembox}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
449 \end{center}
13
fuchita
parents: 12
diff changeset
450 通信ループ内において、通信状態のデバッグインターフェースを受け付けるのは、要求があった
fuchita
parents: 12
diff changeset
451 idがPRIVILEGED(特権的な)\_IDとして確保した領域であった場合である。今回は1〜65535ま
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
452 でのタプルスペースIDのうちidが32769以降の場合において、その要求をデバッグインター
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
453 フェースの為の特権IDとして用いた。特権IDでの要求を検知した場合、ComDebug.addChannel
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
454 を行い、通信状態の報告を行うセッションのリストに追加を行う。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
455 また、報告を行っていたセッションが切断された場合はコネクションのクローズ処理と共に、
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
456 reportCh\_remove()メソッドによって報告セッションリストから対象の削除を行う。これにより、
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
457 デバッグインターフェースの動的な接続と切断が実現される。
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
458
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
459 ComDebug.Com\_inc(),ComDebug\_Report()においては通信状態の更新と報告を行う。
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
460 これらのコードの追加によって、Java版Lindaサーバーへの通信状態のデバッグインターフェ
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
461 ース機能拡張を行った。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
462
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
463 \subsubsection{ComDebug\_Clientの出力ログ}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
464 最後に、この通信デバッグインターフェースを用いて取得したログを示す。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
465 このデバッグインターフェースを用いて取得できるログは以下の様になっている。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
466 \begin{center}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
467 {\footnotesize
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
468 \begin{verbatim}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
469 start : java -classpath FederatedLinda-Java/bin fdl.ComDebug_Client
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
470 -h ged.cr.ie.u-ryukyu.ac.jp -p 10000 &
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
471 Connected:PSXLinda: true
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
472 COM_DEBUG Connected.[ged.cr.ie.u-ryukyu.ac.jp:10000]
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
473 1203044062523 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
474 54481 i=2 id=32769 seq=3 data=none
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
475 1203044071138 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
476 54482 i=1 id=65535 seq=3224368 data=02
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
477 1203044071266 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
478 54482 i=2 id=1 seq=3224368 data=none
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
479 1203044071273 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
480 54482 i=3 id=2 seq=3201696 data=none
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
481 1203044093482 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
482 54488 o=1 id=1 seq=0 data=<graph name = "Graf">
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
483 <node label = "A" tsid = "ged.cr.ie.u-ryukyu.ac.jp:10000">
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
484 <destination label = "B"/>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
485 </node>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
486 <node label = "B" tsid = "ged.cr.ie.u-ryukyu.ac.jp:10001">
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
487 <destination label = "C"/>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
488 <destination label = "D"/>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
489 </node>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
490 <node label = "C" tsid = "ged.cr.ie.u-ryukyu.ac.jp:10002">
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
491 <destination label = "D"/>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
492 </node>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
493 <node label = "D" tsid = "ged.cr.ie.u-ryukyu.ac.jp:10003">
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
494 <destination label = "A"/>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
495 </node>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
496 </graph>
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
497
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
498 CloseInfo >133.13.57.210:10000--133.13.57.210:54488
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
499 1203044093772 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
500 54482 i=4 id=1 seq=3224368 data=none
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
501 1203044094228 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
502 54492 i=1 id=65535 seq=3269152 data=03
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
503 1203044094427 ged.cr.ie.u-ryukyu.ac.jp:10000--ged.cr.ie.u-ryukyu.ac.jp:
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
504 54492 o=1 id=2 seq=0 data=ged.cr.ie.u-ryukyu.ac.jp:10001
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
505 .....
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
506 \end{verbatim}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
507 }
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
508 \end{center}
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
509
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
510 \subsection{視覚的に通信状態を確認するツールの開発}
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
511 Lindaサーバーへの通信状態デバッグ機能の追加と、その為のクライアントプログラムによって、
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
512 Federated Lindaの通信状態のログを取得する事ができた。しかし、取得したログはそれだけではどのよう
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
513 な通信状態の変化があったのかを直感的に知る事は難しい。よって、前述したデバッグインタ
13
fuchita
parents: 12
diff changeset
514 ーフェースを用いて取得したログを、視覚的に確認できるツールの開発を行った。
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
515
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
516 このツールは、Federated LindaのLink Configurationに用いたOmni Graffleファイル、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
517 同じくLink Configurationに用いたノードリスト、そしてデバッグインターフェースで取得した通信
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
518 状態のログ、をもとにその通信状態をモニターする為のツールである。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
519 図\ref{comdeb}にその様子を示す。
8
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
520
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
521 \begin{figure}[htbp]
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
522 \begin{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
523 \includegraphics[width=14cm]{fig/pdf/comdeb.pdf}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
524 \caption{通信状態の表示ツール利用}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
525 \label{comdeb}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
526 \end{center}
f249657a801d Chap5 fix
fuchita
parents: 6
diff changeset
527 \end{figure}
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
528
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
529 ツールの開発はログのパースと格納をPythonによって行い、GUI部分の表示においてはwxPythonを用いて
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
530 実装した。wxPythonとは、フリーの GUI ツールキット wxWidgets の Python バインディングであり、
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
531 Windows, MacOSX, その他 GTK ベースの UNIX システムの多くで利用可能である。
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
532
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
533 \subsubsection{バインディングとは}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
534 プログラムの実行時間の8割9割がコードの1割2割の部分(ホットスポット)で費されるという
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
535 経験則は広く知られている。したがって、ホットスポットをCで記述して
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
536 実行効率の改善を図り、ホットスポット以外をスクリプト言語で記述するという手法が
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
537 有用である。そうすれば、実行速度と開発速度の双方を高めることができるからである。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
538 そこで、CやC++で書かれたモジュールを各種のスクリプト言語から呼び出せるようにする機構が
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
539 必要になるが、それをスクリプト言語バインディングと呼ぶ。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
540
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
541
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
542 \subsubsection{通信ログ・モニターツール}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
543 今回作成したツールの構成は以下のようになっている。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
544 \begin{center}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
545 \begin{itembox}[l]{各Pythonスクリプト}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
546 %{\footnotesize
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
547 \begin{verbatim}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
548 [Omni Graffleパース担当]
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
549 ・Graffle2Arrangement.py
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
550 -- パースされたデータからラベル付けされたノードクラスを生成
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
551 ・ParseGraffle.py
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
552 -- Onmi Graffleファイルをパースする
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
553 ・PListReader.py
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
554 -- Apple plist XML 形式のデータを読み込む
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
555
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
556 [wxPythonによる表示担当]
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
557 ・run.py
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
558 -- 実行スクリプト、メイン処理ルーチンとしてVisualizer.pyを呼ぶ
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
559 ・Visualizer.py
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
560 -- 描画処理、イベントハンドラ処理を記述
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
561 ・images.py
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
562 -- エンコード済みBitmapデータ(Base64エンコード)
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
563 \end{verbatim}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
564 %}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
565 \end{itembox}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
566 \end{center}
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
567
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
568 作成したツールは、通信状態のログを取得したFederated Lindaのトポロジ構成を、
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
569 Federated LindaのLink Configurationで使用したOmni Graffleファイルとノードリストから生成して表示する。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
570 その後、表示したトポロジ図のノードと投入する通信状態のログからそれぞれのマッチングを行い、
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
571 通信状態の変化をステップ実行で確認できる。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
572
13
fuchita
parents: 12
diff changeset
573 ツール上に表示可能な通信ログのデータは、送信ノードのTSID, 受信ノードのTSID, In/Out/Rd/Ck の
fuchita
parents: 12
diff changeset
574 モード情報と累積発行回数, タプルID, シーケンス番号, タプルのデータ内容, である。
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
575 図\ref{visual01}に通信ログ・モニタツールの動作状況を示す。
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
576 \newpage
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
577 \begin{figure}[htbp]
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
578 \begin{center}
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
579 \includegraphics[width=16cm]{fig/pdf/visual01.pdf}
0
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
580 \caption{通信量のグラフィカルな表示ツール}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
581 \label{visual01}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
582 \end{center}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
583 \end{figure}
420c2d37b2bf Initial revision
fuchita
parents:
diff changeset
584
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
585 \section{Federated Lindaの実装を用いたデバッグインターフェースの評価}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
586 実装した通信状態のデバッグインターフェースの評価として、3章で述べたDistance Vector型及び、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
587 Compact Routingの実装を用いるFederated Lindaの通信状態デバッグを行う。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
588 この評価の狙いは通信デバッグインターフェースを用いることで、従来のFederated Lindaにおける
13
fuchita
parents: 12
diff changeset
589 printf情報などを用いたテスト駆動開発では困難であった、通信状態の確認を可能とする事である。
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
590 また、この評価によるバグ要因の特定も目標とする。
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
591
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
592 \subsection{評価条件}
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
593 \subsubsection{問題点}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
594 Federated Lindaは分散アルゴリズムを用いてタプルの伝搬を行うが、先行研究にて開発した
13
fuchita
parents: 12
diff changeset
595 Distance Vector型及び、Compact Routingの実装は共に格子状のメッシュ型トポロジ上での
fuchita
parents: 12
diff changeset
596 ルーティングテーブルの構築に問題がある。Distance Vector型はメッシュ型トポロジ上での
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
597 ルーティングテーブル
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
598 の構築が、ライン型トポロジや、バイナリツリー型トポロジとの場合に比べて、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
599 大幅に時間がかかるという問題、
13
fuchita
parents: 12
diff changeset
600 Compact Routingの実装では格子状のメッシュ型トポロジ上でのルーティングテーブルの構築が、
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
601 通信の集中や、Landmark情報の更新の失敗によって、構築が行えないという問題である。
13
fuchita
parents: 12
diff changeset
602 図\ref{meshtime}にDistance Vector型において格子状のメッシュ型トポロジでのルーティングテーブルの
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
603 構築時間とバイナリツリー型トポロジによる物を比較した結果を示す。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
604
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
605 \begin{figure}[htbp]
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
606 \begin{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
607 \includegraphics[width=14cm]{fig/pdf/exetime.pdf}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
608 \caption{ノード数に対してルーティングテーブル構築にかかる時間}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
609 \label{meshtime}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
610 \end{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
611 \end{figure}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
612
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
613 結果から分かる様に、ルーティングテーブルの構築時間はノード数に対して2乗オーダー
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
614 的に増加する。このような結果は、たとえノード間のリンク数がバイナリツリー型トポロジに比べて、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
615 メッシュトポロジの方が多いと考えても大きすぎると考える。また、Distance Vector型を元に実装を
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
616 行ったCompact Routingの実装も格子状のメッシュトポロジ上ではルーティングテーブルの構築に致命的な
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
617 問題がある。このような問題点は、現実装になんらかのバグが存在する為と考え、今回実装したデバッグ
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
618 インターフェースによるデバッグを行う。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
619
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
620 \subsubsection{実験を行う Federated Lindaの構成}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
621 ルーティングテーブルの構築は6ノードで構成される格子状のメッシュトポロジにおいて行い。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
622 その通信状態を、実装した通信状態のデバッグインターフェースでログの取得を行った。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
623 図\ref{meshgraffle}にFederated LindaのLink Configurationに用いたOmni graffleファイルを示す。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
624
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
625 \begin{figure}[htbp]
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
626 \begin{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
627 \includegraphics[width=14cm]{fig/pdf/clsmesh006.pdf}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
628 \caption{Link Configurationに用いたOmni Graffleファイル}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
629 \label{meshgraffle}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
630 \end{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
631 \end{figure}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
632
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
633 \subsubsection{通信状態のデバッグを行う実験}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
634 実装したデバッグインターフェースによるログ取得を行うのは以下の2実験である。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
635 \begin{itemize}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
636 \item {6ノードの格子状メッシュトポロジにおけるDistance Vector型のルーティングテーブル構築}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
637 \item {6ノードの格子状メッシュトポロジにおけるCompact Routing実装のルーティングテーブル構築}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
638 \end{itemize}
11
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
639
3df86394349f *** empty log message ***
fuchita
parents: 10
diff changeset
640
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
641
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
642 \subsection{評価}
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
643 評価条件に示した実験を行い、6ノードで構成される格子状のメッシュトポロジにおける
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
644 Federated Lindaのルーティングテーブル構築の通信状態ログを取得した。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
645
13
fuchita
parents: 12
diff changeset
646 これにより、通信状態ログを用いたモニターツールでのデバッグが可能となった。
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
647 ここで示す通信状態ログによるデバッグとは、Lindaサーバー単体、Lindaサーバー全体、タプルID、
13
fuchita
parents: 12
diff changeset
648 シーケンス番号などを単位に通信ログをモニターツールに投入し、ステップ実行でタプルの通信を
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
649 確認するデバッグ方法である。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
650 図\ref{debug1}と図\ref{debug2}にその様子を示す。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
651
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
652 \begin{figure}[htbp]
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
653 \begin{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
654 \includegraphics[width=12cm]{fig/pdf/debug1.pdf}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
655 \caption{トポロジ及び通信イベントの表示}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
656 \label{debug1}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
657 \end{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
658 \end{figure}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
659
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
660 \begin{figure}[htbp]
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
661 \begin{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
662 \includegraphics[width=12cm]{fig/pdf/debug2.pdf}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
663 \caption{ステップ実行したシーケンスでの転送タプルを表示}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
664 \label{debug2}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
665 \end{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
666 \end{figure}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
667
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
668 \newpage
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
669 \subsubsection{バグ要因の特定}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
670 通信ログ・モニターツールを用いてDistace Vector型、Compact Routing実装のデバッグを
13
fuchita
parents: 12
diff changeset
671 行った所、Link Configuratin処理が正しく終了していない為に、ルーティングテーブル構築時の
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
672 通信量が増えているというバグを発見した。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
673
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
674 通常、Federated Lindaにおけるルーティングテーブルの構築は、最初にLink Configurationを
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
675 示したXMLの投入をある1ノードに行い、そのノードから隣接ノードへのLink Configuratin XML
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
676 の転送とコネクトをもって全ノード間のコネクションのLink Configurationを行う。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
677
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
678 しかし、格子状のメッシュトポロジでは、隣接ノードへの転送から次ノードへ別経路で
13
fuchita
parents: 12
diff changeset
679 Link Configurationが到達する為、Link Configuratinを行うタプル転送が消滅せずに、
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
680 ルーティングテーブルの構築中でもLink Configurationが発生しているというバグである。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
681
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
682 図\ref{bugfig}にその様子を示す。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
683
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
684 \begin{figure}[htbp]
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
685 \begin{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
686 \includegraphics[width=14cm]{fig/pdf/bug.pdf}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
687 \caption{格子状メッシュトポロジにおけるLink Configurationのバグ}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
688 \label{bugfig}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
689 \end{center}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
690 \end{figure}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
691
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
692 ルーティングテーブルの構築時においてもLink Configurationのタプル転送が発生していたことで、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
693 Distance Vector型での構築時間はバイナリツリー型トポロジに対して大幅に増加していたという
13
fuchita
parents: 12
diff changeset
694 ことが、今回の通信状態デバッグインターフェースによって特定できた。また、Compact Routing実装の、
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
695 格子状メッシュトポロジにおけるルーティングテーブルの構築失敗もローカルネットワークの構築と
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
696 Landmark情報の更新にDistance Vector型の転送方法を用いている為に、同様に別経路からの情報更新
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
697 要求が正常終了せずに流れている為と分かった。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
698
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
699 \subsubsection{デバッグにおけるモニターツールの有用性}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
700 なぜこのようなバグをこれまで特定することが出来なかったのかというと、これまでのFederated Linda
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
701 による分散アルゴリズムの開発は、多数のターミナルによるテスト駆動でプログラム状態の変化を標準出力へ
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
702 表示させるという手法をとっていたからである。逐次プログラムの開発においては、標準出力へのprintf
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
703 デバッグは有効なデバッグ手法と言えるが、ノード全体の通信を止めずにテストを行わなければならない
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
704 状況が存在する分散プログラムの開発では、大量のprintf情報が全ノード分出力されるため、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
705 printfデバッグは実用的とは言えない。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
706
15
c3eb838fb504 *** empty log message ***
fuchita
parents: 13
diff changeset
707 今回、通信状態のデバッグインターフェースと、そのログを視覚的に表示し、ステップ実行により通信の
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
708 確かさを確認できるモニターツールを開発したことにより、これまで困難であった通信状態のデバッグ
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
709 を可能とした。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
710
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
711
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
712
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
713 \section{考察}
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
714 本章では分散環境(特にFederated Lindaを用いた)におけるデバッグ機能について、その実装を行う為に、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
715 最初に二分法を用いた基本的な逐次デバッグ手法と、それではデバッグ困難な分散環境での通信状態を
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
716 紹介し、それらより分散デバッグ機能の検討を行った。分散アルゴリズムにおいてデバッグすべき対象には、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
717 デッドロック, ライブロック, スケーラビリティ, 通信の集中, 大量のパケットの送信, 等があり、
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
718 それらをデバッグするには大域的なプログラム状態を取得する分散スナップショットが有効であることを
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
719 示した。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
720
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
721 Java版Lindaサーバーを開発したことにより、以前のC言語による実装よりも機能拡張を容易に行う事が
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
722 可能となった。そのため、前述した分散アルゴリズムにおいてデバッグすべき対象のうち、通信の集中
13
fuchita
parents: 12
diff changeset
723 を検知できるデバッグインターフェースとして、通信状態のログ取得デバッグインターフェースと、
fuchita
parents: 12
diff changeset
724 そのログを視覚的に表示し、ステップ実行で通信の状態を確かめられるログ・モニターツールを開発した。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
725
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
726 開発した通信状態のデバッグインターフェースの評価として、6ノードで構成される格子状メッシュトポロジ
13
fuchita
parents: 12
diff changeset
727 におけるルーティングテーブルの構築を、Distance Vectorg型とCompact Routing実装のFederated Lindaで
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
728 行い、通信状態のデバッグインターフェースを適用した。
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
729 この結果、正常終了しなかったLink Configurationのタプル転送が別経路から送信されているというバグ
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
730 要因を特定した。
3
f3ef2f99653f *** empty log message ***
fuchita
parents: 2
diff changeset
731
12
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
732 通信状態のログ・モニターツールを用いる事で、これまでprintfによるデバッグでは困難であった通信状態
d0afeaf4d60c Chapter 5
fuchita
parents: 11
diff changeset
733 の確認を非常に分かりやすく行うことができる。これは、スナップショットを用いたログデバッグであっても
13
fuchita
parents: 12
diff changeset
734 同様で、デッドロック, ライブロック, スケーラビリティ, 通信の集中, 大量のパケットの送信,
fuchita
parents: 12
diff changeset
735 等の効率的な
fuchita
parents: 12
diff changeset
736 検知を行うには、なんらかのスナップショット・モニターツールの開発が必要であると考える。