view yokou.tex @ 4:6190f58cb33e

(no commit message)
author axmo
date Wed, 25 Feb 2009 19:54:53 +0900
parents 89b324bfe227
children d383beb40a99
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}

\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,clip,keepaspectratio]{pic/emblem-bitmap.eps}}琉球大学主催 工学部情報工学科 卒業研究発表会}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{分散プログラムにおけるデバッグツールの設計と実装}
\author{035713J 小野雅俊 {}{} 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy}

\section{はじめに}
分散プログラミングが多数開発されている近年、プログラム作成時にクラスタ上のノードやネットワークの動的な変化、故障、性能の多様性を考慮する必要があり、またそれを踏まえた上でのスケーラビリティを確保することが必要とされてきている。\\
スケーラビリティとはリソースを増やしてサービス能力を(理想では)直線的に拡張出来る能力であり、負荷の増加に関してはリソースの追加のみで、アプリケーション自体を変更する必要性がない事を示す。
本稿は分散プログラムに河野先生が提案、作成したFederated Lindaを用い、スケーラビリティなデバッグを行う為に通常のタプル通信の他にメタな通信を行うプロトコルエンジンの設計と実装について検討する。

\section{分散プログラムの問題点}
デバッグを行う際に通常の通信を用いて行うのでは、本来の通信に影響を及ぼす恐れがある。よって、デバックプロトコル自身がスケーラビリティでなければいけない。つまり、サーバーの台数が変動した時に、デバッグプロトコルを別途用意する事なく同じ様に変動しなければならない。\\
本稿ではsnapshotをRingを使って取る為、Ringの性能テストを評価する。

\section{Federated Linda}
Federated Lindaとは、複数のタプル空間を相互に接続する事によって分散プログラムを実現するモデルである。Lindaとは同じ構造ではあるが、Lindaが一つのタプル空間を共有するのに対し、Federated Lindaはタプル空間通しでin/outを行う。\\
クライアントのアクセス数が増えたとしても、タプルスペース等の数を増やし処理を分散させる事により、スケーラビリティを保つ。\\

本稿では、Linda ServerとProtocol Engineが一体化したtype3で実装を検討する。(図\ref{snap9})

\begin{figure}[htbp]
\begin{center}
\includegraphics[scale=0.3]{img/type3.eps}
\caption{type3}
\label{snap9}
\end{center}
\end{figure}

\subsection{Federated Linda Protocol}
Federated Lindaは以下の様にして通信を行う。

\begin{itemize}
\item open(host,port)\\
Linda Serverに対し、接続を行う。引数はホスト名とポート番号をとる。返り値はタプルスペースの番号となる。

\item in(id)\\
タプルスペース番号より引数で指定したidのタプルの受け取りを要求する。返り値はPSXReplyで用いるユニークな番号となる。

\item out(id,data)\\
引数で指定したidでデータを送信する。dataはBytebufferでなければならない。

\item sync()\\
接続しているLinda Serverとタプルの送受信を行う。

\end{itemize}


\section{Protocol Engine}
type2で実装されているProtocol Engineとはタプルスペースを介してデータをやり取りするEngineである。\\
二つのサーバー間でやり取りを行う場合、以下のようなプログラムとなる。\\
\\
例)ポートを変えた、二つのLocal Linda Server間のデータをやり取りする場合

\begin{verbatim}
FederatedLinda fdl;
PSXLinda getpsx;
PSXLinda sendpsx;
PSXReply in;
ByteBuffer data = ByteBuffer.allocate(10);

//通信を初期化する
fdl = FederatedLinda.init();
//データを取ってくるホストと受け渡すホストとの接続開始
getpsx = fdl.open(localhost,10000);
sendpsx = fdl.open(localhost,10001);
//取ってくるホストからinを指定してデータを取得
in = getpsx.in(10)
data = in.getData();
//受け渡すホストに対しデータとidを指定して同期
sendpsx.out(10,data);
fdl.sync();

\end{verbatim}

\section{Meta Protocol Engine}
type3ではスケーラビリティを実現する為にLinda Serverに直接Protocol Engineを実装する。このEngineをMemta Protocol Engineと呼ぶ。\\
通常のFederatedLindaと同様in/out出来るプロトコルを持ち、Protocol Engineと違う所はサーバー自身に直接アクセスして、データを取得する事が出来る事である。
Linda Serverのメインループにメソッドを追加する事により、Serverが立ち上がると同時にMeta Protocol Engineを起動する事が出来る。\\

\section{測定}
Meta Protocol Engineでの通信テスト、3~100までの台数でデータが1周(図\ref{metaring})および1000周(図\ref{metaring1000})した時に掛かった時間を測定する。\\
測定環境はクラスタ(cls001.cs.ie.u-ryukyu.ac.jp~cls180.cs.ie.u-ryukyu.ac.jp)でTorqueを用いる。\\
出来得るならば、180台までの測定を行いたかったが、使えないクラスタの台数が不安定に変動するので、安定して測定出来る100台までを測定する事とした。

\begin{figure}[htbp]
\begin{center}
\includegraphics[scale=0.3]{img/metaring1.eps}
\caption{一周したTime}
\label{metaring}
\end{center}
\end{figure}

\begin{figure}[htbp]
\begin{center}
\includegraphics[scale=0.3]{img/metaring1.eps}
\caption{1000周したTime}
\label{metaring1000}
\end{center}
\end{figure}


両図から見てわかる通り、データの量にはあまり依存する事はなくほぼ同じラインを形作っている。\\
データを1周のみした場合は1サイクルあたり約14000ms、一台あたり約140ms掛かっている計算になり、
それに対し1000周した際に掛かった時間は、1サイクルおよそ60ms、一台につき約0.6msとなっている。\\
これは、1周のみだと通信の際のopen/closeの時間が大きく影響するためだと思われる。

\section{終わりに}
本稿ではデバッグを行う為に通常通信とは他に、Metaで通信するMeta Protocol Engineを提案した。\\
その結果、別途デバッグ用Protocol Engineを用意する事なくLinda間で通信が出来るため、よりスケーラブルなデバッグ環境が実現出来る事が分かった。
今後の問題としては、同クラスタ上で別のRing通信や他のMetaLinda通信等があった場合に、デバッグプログラムと干渉する事はないか、
本Meta Protocol Engineで実際にデバッグタプルを通信した場合に通常の通信との干渉するかどうかなどが、挙げられる。


\thispagestyle{fancy}
\begin{thebibliography}{9}
\bibitem {}上里献一, 河野真治 SuciライブラリのスナップショットAPIを利用した並列デバッグツールの設計
\bibitem {}渕田 良彦, 河野 真治 分散プログラミングモデルFederated Lindaと分散デバッグ
\end{thebibliography}
\end{document}