# HG changeset patch # User kazz # Date 1313073369 -32400 # Node ID 807429fb3398a964a3fd5325cadcbfa0d0d8b924 # Parent 56417fb1bb7e895cdefe7ab90e361cb3c0f9ebf8 add conclusion diff -r 56417fb1bb7e -r 807429fb3398 paper/kazz-jssst.tex --- a/paper/kazz-jssst.tex Thu Aug 11 22:06:34 2011 +0900 +++ b/paper/kazz-jssst.tex Thu Aug 11 23:36:09 2011 +0900 @@ -147,7 +147,7 @@ \label{"datasegment"} FederatedLinda の経験を踏まえて、新しい分散フレームワークの設計を行う。主なターゲットとしては、ネットワークゲームを考えている。 -ネットワークゲームで通信されるデータは色々な型を持っている。今までの FederatedLinda ではその型をうまく定義することができなかった。ここでは、 MessagePack \cite{MessagePack} を型付けに利用する。通信されるデータをここでは DataSegment と呼ぶ。 +ネットワークゲームで通信されるデータは色々な型を持っている。今までの FederatedLinda ではその型をうまく定義することができなかった。ここでは、 MessagePack \cite{msgpack} を型付けに利用する。通信されるデータをここでは DataSegment と呼ぶ。 DataSegment はネットワーク上でやり取りされるので、その場所を表す ID を持っている。 FederatedLinda にはなかった Persistency を導入するために Persistent Storage Class を導入する。 DataSegment の ID に Persistent Storage Class を指定することにより、 Cassandra などのような分散データベースのレコードを直接指し示す。自サーバー上にある DataSegment は Local Storage Class を指定する。他のサーバー上にある DataSegment は Remote Storage Class を指定する。 @@ -230,57 +230,68 @@ SQL などの複雑な操作は、複数の CodeSegment にコンパイルすることで実現する。 通常の DataSegment には Persistency はない。 CodeSegment の処理が終了すると自動的に消滅する。 + \subsection{CodeSegment の使い方} \label{"usecodesegment"} -\subsubsection{InputDataSegment を指定} +\subsubsection{InputDataSegment と OutputSegment を指定} \label{"inputdatasegment"} -\subsubsection{OutputDataSegment を指定} +まず、 CodeSegment を生成したら、その処理の中で必要なデータを InputDataSegment として指定する。 +また、返り値として出力するデータを OutputDataSegment として指定する。 + +OutputDataSegment の ID を指定したときに、その ID が存在しない場合は create し、存在する場合は、 update 処理を行う。 +また、OutputDataSegment が Remote に存在する場合、一旦 Local のバッファに書き出し、転送する CodeSegment を呼び出すことで表現できる。 +Remote の格納先に DataSegment が存在しない場合は自動的に create し、存在する場合は、 update 処理を行う。 \begin{figure}[htbp] \begin{center} \scalebox{0.50}{\includegraphics{./fig/remoteds.pdf}} \end{center} -\caption{Remote DS への転送も CodeSegment で実現できる。} +\caption{Remote DS への転送も CodeSegment で表現できる。} \label{fig:remoteds} \end{figure} -Remote は自動的に allocate - \subsubsection{InputDataSegment が揃ったら実行開始} -\subsubsection{実行中の CodeSegment 内で次の CodeSegment を生成する} +InputDataSegment に指定されたデータがすべて揃ったら、 CodeSegment が実行される。 + +その CodeSegment 内で、次の CodeSegment を生成する。 + +このようにして分散アプリケーションを記述することができる。 \subsection{競合的な DataSegment の書き出し} -MetaCodeSegment が取り扱う -OverWrite +DataSegment の update 方法にはいくつか種類がある。例えば次の様なものが挙げられる。 -Queue +\begin{enumerate} +\item {\bf FIFO} 単純に早いもの順で update する。 +\item {\bf Priority} 優先順位の高いものが update する。 +\item {\bf Queueing} 上書きせずに書き込みを Queue に格納して順番に取り出す。 +\end{enumerate} -Priority +このような差異を吸収して記述できるようにするために、 MetaCodeSegment をつくって、 CodeSegment とは分離して記述できるようにする。 \subsection{TaskManager} \label{"TaskManager"} -CodeSegment List を持っている - -実行可能な CodeSegment を各プロセッサーに割り当て +TaskManager は CodeSegment の管理を司る。 +TaskManager は、生成されたすべての CodeSegment のリストを持っており、 DataSegment の生成や更新を監視している。イベントの発生した DataSegment に依存する CodeSegment をチェックし、すべての InputDataSegment が揃った CodeSegment 、すなわち実行可能な CodeSegment があれば Executor に投げる。 \section{まとめと今後の課題} -Java(Scala) +本論文では、 FederatedLinda の開発を通して得られた教訓を生かし、 DataSegment と CodeSegment を用いた分散フレームワークを設計した。 -CbC +今後の課題として、新設計したシステムの実装が挙げられるが、それ行うにあたる前に、実装に用いる言語ごとの使い勝手をまとめる。 -C++ +Java や Scala には、 java.util.concurrent などの並列処理用のライブラリが充実しているため、 CodeSegment の並列処理まで比較的容易に実装することができる。 +特に Scala には、アクターを使ったメッセージ交換があるため、言語レベルで並列処理を記述することができる。 -{\bf 謝辞}\ +本研究室では、 CbC という、引数付き goto による継続ベースのC言語を開発している。それを用いることで、 CodeSegment とDataSegment の繋がりを表現することができる。 CodeSegment 単位で細かく処理を分けて記述することができるのだが、並列処理をまだサポートをしていないので、 TaskManager などの実行カーネルを作成する必要がある。 % \begin{adjustvboxheight} % needed only when Appendix follows \begin{thebibliography}{99} -\bibitem{test} test +\bibitem{msgpack} MessagePack \end{thebibliography} \end{adjustvboxheight} % needed only when Appendix follows