Mercurial > hg > Papers > 2008 > fuchita-master
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 |