0
|
1 \chapter{分散デバッグ機能と評価}
|
|
2 \section{分散デバッグ開発}
|
|
3 本章ではFederated Lindaを用いた分散開発環境でのデバッグについて述べる。
|
|
4 本論文で提案する分散デバッグのアプローチは、3章で問題点を挙げた通信状態のデバッグ
|
|
5 をタプルサーバーへの拡張を行う事で実現するものである。
|
|
6 以下にその詳細と、その他の実現すべき分散デバッグ環境についてを示す。
|
|
7
|
|
8 \subsection{Java版タプルサーバーへの機能拡張}
|
|
9 分散プログラムでは複数のノードが独立で実行され、互いに
|
|
10 通信しあうという実行環境の為に、逐次プログラムよりもデバッグを行う事は難しい。
|
|
11 現在主に用いられている単体の逐次デバッガは分散環境用に作られていないことから、
|
|
12 分散環境でのデバッグの場合、1プロセスに対してデバッガを動かすか、
|
|
13 複数プロセスに対してそれぞれデバッガを動かしてデバッグを行うかの
|
|
14 どちらかのスタイルがとられる。これではデバッグすべきプロセスが増えるとその手間はかなりの物になり、
|
|
15 現実的なデバッグ手法とは言えない。
|
|
16
|
|
17 また、上記の手法を用いたとしても分散プログラム環境下ではプログラム状態の非決定性が存在するため
|
|
18 問題がある。通信の到着順序によっても分岐が変化してしまうことから、デバッグ対象のエラーに
|
|
19 対して再現性を確保するのは難しい。通常、分散環境下でのデバッグではこれらの点をふまえて、
|
|
20
|
|
21 \begin{itemize}
|
|
22 \item {通信におけるプログラムの状態が決定的になるようテストする}
|
|
23 \item {非決定性をシミュレートする}
|
|
24 \item {バリア同期で通信を止めてメモリ等の状態を調べる}
|
|
25 \item {各ノードでのスナップショットをとってログを解析する}
|
|
26 \end{itemize}
|
|
27
|
|
28 といった方法がとられる。
|
|
29 今回は、Fedarated Lindaを用いた分散プログラム開発としてCompact Routingを用いるFederated Lindaの
|
|
30 分散アルゴリズムの開発を行った経験にて、必要であると考えられた、サーバーやクライアント間での通信を止めずに、動いているFederated Lindaの通信量をデバッグする(すなわち、通信量のスケーラビリティを見る)インターフェースを開発した。
|
|
31
|
|
32 \subsection{Java版タプルサーバーへの通信量デバッグ機能の実装}
|
|
33 \begin{center}
|
|
34 \begin{itembox}[l]{ComDebug機能拡張部分}
|
|
35 {\footnotesize
|
|
36 \begin{verbatim}
|
|
37 if (debug) {
|
|
38 System.out.println("data from : "+key.channel());
|
|
39 }
|
|
40 if((mode == '!') || (len == 0)) {
|
|
41 Connection_Close(key);
|
|
42 com_debug.reportCh_remove(key, reportCh_list);
|
|
43 }
|
|
44 else if(mode == PSX_CHECK) {
|
|
45 Check(key, command);
|
|
46 }
|
|
47 else if(mode == PSX_IN || mode == PSX_RD){
|
|
48 In_Rd(key, command, mode);
|
|
49 }
|
|
50 else if (mode == PSX_WAIT_RD) {
|
|
51 Wait_Rd(key, command, mode);
|
|
52 } else if(mode == PSX_OUT) {
|
|
53 Out(command, data);
|
|
54 } else {
|
|
55 System.out.println("Uncorrect buffer");
|
|
56 System.exit(1);
|
|
57 }
|
|
58
|
|
59 //COM_DEBUG
|
|
60 if(id > PRIVILEGED_ID_START && id < PRIVILEGED_ID_END){
|
|
61 ComDebug.addChannel(key, reportCh_list);
|
|
62 }
|
|
63 //DEBUG用カウンタ
|
|
64 ComDebug.Com_inc(key, com_Loggingtable, mode);
|
|
65 //DEBUG用レポート
|
|
66 ComDebug.Report(reportCh_list, command, com_Loggingtable.toString());
|
|
67
|
|
68 \end{verbatim}
|
|
69 }
|
|
70 \end{itembox}
|
|
71 \end{center}
|
|
72
|
|
73 \newpage
|
|
74 \subsection{通信ログ情報のグラフィカルな表示ツール}
|
|
75
|
|
76 \begin{figure}[htbp]
|
|
77 \begin{center}
|
2
|
78 \includegraphics[width=10cm]{fig/pdf/visual01.pdf}
|
0
|
79 \caption{通信量のグラフィカルな表示ツール}
|
|
80 \label{visual01}
|
|
81 \end{center}
|
|
82 \end{figure}
|
|
83
|
|
84
|
|
85 \subsection{Federated Lindaにおける分散デバッグ}
|
|
86 分散環境におけるデバッグとは、単純に全ノードに対してデバッガを走らせれば完全にデバッグできるという
|
|
87 訳ではない。事実、システム資源の異なるノードに対してネットワークを介したリモートデバッグの手法は
|
|
88 数多く開発されていても、それが大規模システムを想定した分散プログラムに対してスケーラビリティを
|
|
89 保ったままデバッグ可能という解を得てはいない。
|
|
90
|
|
91 Federated Lindaはタプルのリレーという、より分散プログラムを意識したモデルであることから、デバッグ
|
|
92 インターフェースの大域的状態の取得にもスケーラビリティを持った実装を目指す。
|
|
93 その基本的なアイデアは、デバッグ情報を取得するインターフェースに対してもLindaプロトコルによるタプ
|
|
94 ルの伝搬を利用して実装するというものである。
|
|
95
|
|
96 下図\ref{FDLindaDebug}に示すように、Federated Lindaを用いたデバッグインターフェースは、デバッガ
|
|
97 プロセスからあるノードに対してデバッグ情報の取得を指示するオペレーションを発行し、デバッグ情報の
|
|
98 取得を行うデバッグプロトコルとしてタプル間を伝搬させる。
|
|
99 デバッガが受け取る結果はFederared Linda内のスナップショットとしての大域的状態であり、それを元に
|
|
100 デバッグを行う。このような仕組みをとる事で、大規模な分散プログラム環境であってもスケーラビリティ
|
|
101 を保ったままデバッグを行う事が可能となる。
|
|
102
|
|
103 \begin{figure}[htbp]
|
|
104 \begin{center}
|
|
105 \includegraphics[width=14cm]{fig/pdf/FDLindaDebug.pdf}
|
|
106 \caption{スケーラビリティを意識したデバッグインターフェース}
|
|
107 \label{FDLindaDebug}
|
|
108 \end{center}
|
|
109 \end{figure}
|
|
110
|
|
111
|
|
112
|
|
113 \subsection{分散デバッグの実現}
|
|
114 Federated Lindaにおける分散デバッグ環境の開発の為に、リングトポロジにおける分散スナップショ
|
|
115 ットを用いたログデバッギングを考える。以下にその詳細を示す。
|
|
116
|
|
117 \subsubsection{リングトポロジにおける分散スナップショット}
|
|
118
|
|
119 \begin{figure}[htbp]
|
|
120 \begin{center}
|
|
121 \includegraphics[width=6cm]{fig/pdf/Ring.pdf}
|
|
122 \caption{リングトポロジでの分散スナップショット}
|
|
123 \label{Ring}
|
|
124 \end{center}
|
|
125 \end{figure}
|
|
126
|
|
127 \begin{figure}[htbp]
|
|
128 \begin{center}
|
|
129 \includegraphics[width=6cm]{fig/pdf/RingInRing.pdf}
|
|
130 \caption{リンググループを内包したリングトポロジ}
|
|
131 \label{RingInRing}
|
|
132 \end{center}
|
|
133 \end{figure}
|
|
134
|
|
135
|
|
136 \begin{verbatim}
|
|
137
|
|
138 \end{verbatim} |