comparison paper/evaluation.tex @ 6:d2f357e68afe

Chapter 5
author fuchita
date Thu, 14 Feb 2008 09:07:37 +0900
parents c6eefabf35c0
children f249657a801d
comparison
equal deleted inserted replaced
5:c6eefabf35c0 6:d2f357e68afe
121 また、デバッガによるプロセスの停止によってネットワークの遅延や送信データの喪失が起これば、 121 また、デバッガによるプロセスの停止によってネットワークの遅延や送信データの喪失が起これば、
122 全体の通信の同期に必要とされるデータが揃わないまま同期を取ることになる。 122 全体の通信の同期に必要とされるデータが揃わないまま同期を取ることになる。
123 そうなると本当の意味での同期が取られていないということになり、バグ再現の為の条件が一定の通信状態 123 そうなると本当の意味での同期が取られていないということになり、バグ再現の為の条件が一定の通信状態
124 を要求する場合において問題がある。 124 を要求する場合において問題がある。
125 125
126 \section{分散デバッグの機能} 126 \section{分散デバッグ機能の検討}
127 これまで二分法による逐次アルゴリズムのデバッグと分散環境におけるデバッグの問題点を述べた。 127 これまで二分法による逐次アルゴリズムのデバッグと分散環境におけるデバッグの問題点を述べた。
128 ここでは、Federated Lindaに必要なデバッグ機能を提案するために、分散アルゴリズムにおいてデバッグ 128 ここでは、Federated Lindaに必要なデバッグ機能を提案するために、分散アルゴリズムにおいてデバッグ
129 すべき要素を挙げ、それらをデバッグ可能な機能としてスナップショットを用いた分散デバッグを説明する。 129 すべき要素を挙げ、それらをデバッグ可能な機能としてスナップショットを用いた分散デバッグを説明する。
130 %また、Federated Lindaを用いる事でスケーラビリティを持った分散デバッグ機能を実現することについても 130 %また、Federated Lindaを用いる事でスケーラビリティを持った分散デバッグ機能を実現することについても
131 %述べる。 131 %述べる。
231 231
232 以下で大域的な状態とはどのような物かを説明し、どのようにスナップショットを用いたデバッグインタ 232 以下で大域的な状態とはどのような物かを説明し、どのようにスナップショットを用いたデバッグインタ
233 ーフェースを用いるべきかを説明する。 233 ーフェースを用いるべきかを説明する。
234 234
235 \subsubsection{大域的なプログラム状態とは} 235 \subsubsection{大域的なプログラム状態とは}
236 Federated Lindaにおける大域的なプログラム状態とは、各ノードのメモリ状態(あるいはそれに類するデータ 236 Federated Lindaにおける大域的なプログラム状態には二つの要素があり、各ノードのメモリ状態
237 構造)を持つ事を第一としている。このメモリ状態を各スナップショットでのタイミングごとに正確に 237 (あるいはそれに類するデータ構造)を持つ事を第一としている。
238 このメモリ状態を各スナップショットでのタイミングごとに正確に
238 取得することにより、プログラムの大域変数や局所変数を用いたバグの特定を可能とする。 239 取得することにより、プログラムの大域変数や局所変数を用いたバグの特定を可能とする。
239 240
240 例えば、 241 例えば、
241 先に述べた様なデッドロックの原因となる排他ロックの要求及び保持を検出する検出器の作成を行い、 242 先に述べた様なデッドロックの原因となる排他ロックの要求及び保持を検出する検出器の作成を行い、
242 スナップショットのログからデッドロックの追跡を行う事。または、二分法を用いてバグの存在するプロ 243 スナップショットのログからデッドロックの追跡を行う事。または、二分法を用いてバグの存在するプロ
249 \begin{itembox}[l]{-} 250 \begin{itembox}[l]{-}
250 {\large 251 {\large
251 \begin{center} 252 \begin{center}
252 \begin{verbatim} 253 \begin{verbatim}
253 スナップショット取得のタイミング = T 254 スナップショット取得のタイミング = T
254 パケット受信先でのスナップショット取得のタイミング = T' 255 通信受信先でのスナップショット取得のタイミング = T'
255 \end{verbatim} 256 \end{verbatim}
256 \end{center} 257 \end{center}
257 } 258 }
258 \end{itembox} 259 \end{itembox}
259 260
283 284
284 ここまで、スナップショットを用いて分散デバッグを行う事と、そのための大域的プログラム状態について 285 ここまで、スナップショットを用いて分散デバッグを行う事と、そのための大域的プログラム状態について
285 説明した。ここでは、分散環境で取得したスナップショットをどのように用いてデバッグを行うべきかを 286 説明した。ここでは、分散環境で取得したスナップショットをどのように用いてデバッグを行うべきかを
286 検討する。 287 検討する。
287 288
288 289 \subsubsection{スナップショットのモニターツールと逐次デバッガによるデバッグ}
289 290 スナップショットを取得した場合、そのスナップショット・ログは膨大である。
290 291 よって、実際にスナップショット・ログからデバッグを行う為には様々な切り口で
291 %\subsection{分散デバッグ機能のスケーラビリティ} 292 情報を取捨選択できるモニターツールが必要であると考える。
292 293 図\ref{snapdeb}にスナップショットのモニタツールを用いたデバッグの様子を示す。
293 294
294 295 \begin{figure}[htbp]
295 \section{通信状態のデバッグインターフェース} 296 \begin{center}
297 \includegraphics[width=12cm]{fig/pdf/snapdeb.pdf}
298 \caption{スナップショット・ログを用いたデバッグ}
299 \label{snapdeb}
300 \end{center}
301 \end{figure}
302
303 上記の図ではスナップショット・ログより、大域的プログラム状態の項で
304 説明したプログラムのメモリー状態とスナップショット取得のタイミングにおける通信状態を同期させる
305 ことによってFederated Lindaの大域的状態を取得している。
306 また、同期されたスナップショット・ログをモニタツールという、ユーザーが必要なデバッグ情報を取捨
307 選択するツールを用いる事を考える。ユーザーはモニタツールを用いて(例えば二文法によるバグ箇所の
308 検知などを利用)、どのプロセスから出力と入力があったタプルにバグの原因があるのかを特定するこ
309 とができる。そうすれば、その後のバグの修正においては逐次デバッガによるデバッグが可能となる。
310
311 \subsection{分散デバッグ機能のスケーラビリティ}
312 全ノードに対してデバッグプロセスを走らせてデバッグを行うような
313 手法は、デバッグのインターフェースにおけるスケーラビリティを考慮してはいない。
314
315 事実、システム資源の異なるノードに対してネットワークを介したリモートデバッグの手法は
316 数多く開発されていても、それが大規模システムを想定した分散プログラムに対してスケーラビリティを
317 保ったままデバッグ可能という解を得てはいない。
318
319 Federated Lindaはタプルのリレーという、より分散プログラムを意識したモデルであることから、デバッグ
320 インターフェースの大域的状態の取得にもスケーラビリティを持った実装を目指す。
321 その基本的なアイデアは、デバッグ情報を取得するインターフェースに対してもLindaプロトコルによるタプ
322 ルの伝搬を利用して実装するというものである。
323
324 下図\ref{FDLindaDebug}に示すように、Federated Lindaを用いたデバッグインターフェースは、デバッガ
325 プロセスからあるノードに対してデバッグ情報の取得を指示するオペレーションを発行し、デバッグ情報の
326 取得を行うデバッグプロトコルとしてタプル間を伝搬させる。
327 デバッガが受け取る結果はFederared Linda内のスナップショットとしての大域的状態であり、それを元に
328 デバッグを行う。このような仕組みをとる事で、大規模な分散プログラム環境であってもスケーラビリティ
329 を保ったままデバッグを行う事が可能となる。
330
331 \begin{figure}[htbp]
332 \begin{center}
333 \includegraphics[width=14cm]{fig/pdf/FDLindaDebug.pdf}
334 \caption{スケーラビリティを意識したデバッグインターフェース}
335 \label{FDLindaDebug}
336 \end{center}
337 \end{figure}
338
339 \section{通信状態デバッグインターフェースの実装}
340 ここまで、Federated Lindaを用いた分散環境環境における分散デバッグインターフェースの機能の検討
341 を行った。その結果、Federated Lindaで用いられるべき分散デバッグインターフェースはスナップショット
342 を用いて、デッドロック、ライブロック、スケーラビリティ、通信の集中、大量のパケットの送信、といった
343 要素のデバッグを行う事が必要との結論を得た。
344
345 しかし、検討したスナップショットでのデバッグインターフェースの実装の為には、現実装の
346 Federated Lindaで用いられるProtocol Engineには更なる改良が必要である。なぜならば、現在のProtocol
347 Engineはルーティングテーブルを内部データとして保持することから、Federated Lindaの大域的状態を
348 取得するにはProtocol Engineまでのスナップショットが必要となるからである。
349 これを解消する為にはProtocol Engineの内部状態をステートレスに実装し、その挙動はやり取りするXML
350 に全て埋め込むという実装が求められる。
351
352 本論文ではスナップショットではなく、前述した分散アルゴリズムにおいてデバッグすべき対象のうちから、
353 通信の集中を検知するデバッグインターフェースについて実装を行った。
354 このデバッグインターフェースを用いる事により、3章で提示したCompact Routingを用いるFederated Linda
355 において、meshトポロジで起こったデバッグ困難な通信の集中を伴う状態の検知を行う事を目標とする。
356 以下にその実装の詳細を示す。
357
358
296 359
297 \subsection{Java版Linda サーバーへの機能実装} 360 \subsection{Java版Linda サーバーへの機能実装}
298 \begin{center} 361 \begin{center}
299 \begin{itembox}[l]{ComDebug機能拡張部分} 362 \begin{itembox}[l]{ComDebug機能拡張部分}
300 {\footnotesize 363 {\footnotesize