comparison paper/final_main/chapter3.tex @ 27:cc8b4c863428

fix
author suruga
date Mon, 19 Feb 2018 17:31:00 +0900
parents f6a62539e722
children b02a8d6a4e9c
comparison
equal deleted inserted replaced
26:f6a62539e722 27:cc8b4c863428
207 \centering 207 \centering
208 \includegraphics[width=90mm]{pic/topologymanager5.pdf} 208 \includegraphics[width=90mm]{pic/topologymanager5.pdf}
209 \caption{AliceによるJungleの木構造トポロジーの形成} 209 \caption{AliceによるJungleの木構造トポロジーの形成}
210 \label{fig:topologymanager} 210 \label{fig:topologymanager}
211 \end{figure} 211 \end{figure}
212 (図\ref{fig:topologymanager})の矢印の流れを以下に示す。 212 図\ref{fig:topologymanager}の矢印の流れを以下に示す。
213 \begin{enumerate} 213 \begin{enumerate}
214 \item TopologyManagerがトポロジーファイルを読み込む。 214 \item TopologyManagerがトポロジーファイルを読み込む。
215 \item TopologyNodeがTopologyManagerに接続先を尋ねる。 215 \item TopologyNodeがTopologyManagerに接続先を尋ねる。
216 \item 接続先のTopologyNodeのIPアドレス、ポート番号、接続名を送り返す。 216 \item 接続先のTopologyNodeのIPアドレス、ポート番号、接続名を送り返す。
217 \item 受け取った接続先の情報を元に、トポロジーを形成する。 217 \item 受け取った接続先の情報を元に、トポロジーを形成する。
218 \end{enumerate} 218 \end{enumerate}
219 %TopologyManagerによって構成されたトポロジーのサーバーノードには、それぞれ自分自身を示す文字列であるキーが存在する。 219 %TopologyManagerによって構成されたトポロジーのサーバーノードには、それぞれ自分自身を示す文字列であるキーが存在する。
220 各ノードは自身を示すnodeName[3]を持ち、このnodeNameを指定することで他ノードとの通信を行う。 220 各ノードは自身を示すnodeName[3]を持ち、このnodeNameを指定することで他ノードとの通信を行う。
221 nodeNameは自身のサーバーノードがデータを受け取る際に指定する必要がある。 221 nodeNameは自身のサーバーノードがデータを受け取る際に指定する必要がある。
222 222
223 たとえば、servernode0,servernode1,servernode2により、(図\ref{fig:LogupdateTree})のように木構造が構成されたとする。 223 たとえば、servernode0,servernode1,servernode2により、図\ref{fig:LogupdateTree}のように木構造が構成されたとする。
224 \begin{figure}[H] 224 \begin{figure}[H]
225 \centering 225 \centering
226 \includegraphics[width=100mm]{pic/LogupdateTree.pdf} 226 \includegraphics[width=100mm]{pic/LogupdateTree.pdf}
227 \caption{トポロジーの形成} 227 \caption{トポロジーの形成}
228 \label{fig:LogupdateTree} 228 \label{fig:LogupdateTree}
229 \end{figure} 229 \end{figure}
230 この時、servernode0はservernode1、servernode2に対して親にあたる。逆に、servernode1,servernode2はservernode0に対して子にあたる。よって、(図\ref{fig:LogupdateTree})に矢印の隣にかかれている文字列"parent","child 1","child 2"のようにキーを指定している。 230 この時、servernode0はservernode1、servernode2に対して親にあたる。逆に、servernode1,servernode2はservernode0に対して子にあたる。よって、図\ref{fig:LogupdateTree}に矢印の隣にかかれている文字列"parent","child 1","child 2"のようにキーを指定している。
231 servernode0からservernode1へデータを送りたい場合、”child 1”というnodeNameを追加すればいい。 231 servernode0からservernode1へデータを送りたい場合、”child 1”というnodeNameを追加すればいい。
232 このように、データアクセスしたいサーバーノードのnodeNameを追加することで、そのサーバノードのDataSegmentへデータアクセスすることができる。 232 このように、データアクセスしたいサーバーノードのnodeNameを追加することで、そのサーバノードのDataSegmentへデータアクセスすることができる。
233 他のサーバーノードのDataSegmentへデータアクセスする際には、アクセス先のサーバーノードのnodeNameを追加すればいい。 233 他のサーバーノードのDataSegmentへデータアクセスする際には、アクセス先のサーバーノードのnodeNameを追加すればいい。
234 234
235 %TreeOperationLog 235 %TreeOperationLog
241 Aliceのトポロジー形成と他のサーバのデータへアクセスする機構を用いるためには、Aliceが提供するプログラミングスタイルに沿わなければならない。それはDataSegmentとCodeSegmentである。よって、Jungleのログの実態であるTreeOperationLogは、DataSegmentで扱えるようシリアライズされている。 241 Aliceのトポロジー形成と他のサーバのデータへアクセスする機構を用いるためには、Aliceが提供するプログラミングスタイルに沿わなければならない。それはDataSegmentとCodeSegmentである。よって、Jungleのログの実態であるTreeOperationLogは、DataSegmentで扱えるようシリアライズされている。
242 Aliceはタスクを行うCodeSegmentと、CodeSegmentで使用するデータを扱うDataSegmentによってプログラムを行うスタイルを取る。 242 Aliceはタスクを行うCodeSegmentと、CodeSegmentで使用するデータを扱うDataSegmentによってプログラムを行うスタイルを取る。
243 CodeSegmentはDataSegmentが必要なデータを受け取り次第、タスクを行う。DataSegmentがデータを受け取る為には、そのDataSegmentを示すキーが必要である。 243 CodeSegmentはDataSegmentが必要なデータを受け取り次第、タスクを行う。DataSegmentがデータを受け取る為には、そのDataSegmentを示すキーが必要である。
244 \newpage 244 \newpage
245 245
246 \section{測定用プログラムの実装} 246 \section{データ書き込みプログラムの実装}
247 これまで、本実験の概要、測定環境について説明し、次にTORQUEによるJungleへのプログラム投下方法と、Aliceによる分散通信部分の構築方法について説明した。次説では、本実験の手順と合わせて、今回実装した部分である、Jungleにデータを書き込むための機能と時間計測部分について解説する。 247 これまで、本実験の概要、測定環境について説明し、次にTORQUEによるJungleへのプログラム投下方法と、Aliceによる分散通信部分の構築方法について説明した。ここでは、本実験の手順と合わせて、今回実装した部分である、Jungleにデータを書き込むための機能について解説する。
248 本実験において、木構造を形成した32台のうち、16台のJungleへデータを100回書き込むプログラムを作成した。また、複数の子ノードにデータをそれぞれ書き込み、最終的にrootノードへデータを書き込んでいく時間を計測する為の機能を、新たにAliceに実装した。 248 本実験において、木構造を形成した32台のうち、16台のJungleへデータを100回書き込むプログラムを作成した。
249 以下のソースコード \ref{Logupdate}は、実装したテストプログラムの起動部分である。 249 以下のソースコード \ref{Logupdate}は、実装したテストプログラムの起動部分である。
250 250
251 \lstinputlisting[frame=lrbt, label=Logupdate, caption=測定用プログラムの起動部分,numbers=left]{./plsource.txt} 251 \lstinputlisting[frame=lrbt, label=Logupdate, caption=測定用プログラムの起動部分,numbers=left]{./plsource.txt}
252 252
253 1行目で本実験のネットワークトポロジーを形成するためtopokogymanagerの起動を行なっている。\$nodesはVM0~VM31台の、合計32台の仮想マシンを表し、TopologyManagerはVM0に起動する。 253 1行目で本実験のネットワークトポロジーを形成するためtopokogymanagerの起動を行なっている。\$nodesはVM0~VM31台の、合計32台の仮想マシンを表し、TopologyManagerはVM0に起動する。
254
254 -p オプションはTopologyManagerが開くポートの番号、-confオプションには dot ファイルのパスを渡している。ポート番号はAliceのより記述された並列分散プログラムの起動時に渡す必要がある。 255 -p オプションはTopologyManagerが開くポートの番号、-confオプションには dot ファイルのパスを渡している。ポート番号はAliceのより記述された並列分散プログラムの起動時に渡す必要がある。
256
255 dot ファイルには、トポロジーをどのように構成するかが書かれている。dotファイルを読み込んだAliceのTopologyManagerに対して、サーバーノードは誰に接続を行えばよいかを尋ねる。TopologyManagerは尋ねてきたサーバーノードに対してノード番号を割り振り、dotファイルに記述している通りにサーバーノードが接続を行うように指示をだす。 257 dot ファイルには、トポロジーをどのように構成するかが書かれている。dotファイルを読み込んだAliceのTopologyManagerに対して、サーバーノードは誰に接続を行えばよいかを尋ねる。TopologyManagerは尋ねてきたサーバーノードに対してノード番号を割り振り、dotファイルに記述している通りにサーバーノードが接続を行うように指示をだす。
258
256 -showTime オプションは、今回Aliceに実装した機能である。--showTime オプションをつけることで、出力される結果に、子ノードのJungleからの書き込みがrootノードのJungleへ到達し、書き込みが終了したときの時間が表示されるようになる。 259 -showTime オプションは、今回Aliceに実装した機能である。--showTime オプションをつけることで、出力される結果に、子ノードのJungleからの書き込みがrootノードのJungleへ到達し、書き込みが終了したときの時間が表示されるようになる。
260
257 4行目では、Jungleを起動している。このとき、-host でTopologyManagerのIPアドレスを渡し、-portでTopologyManagerのポート番号をしている。TopologyManagerのIPアドレスとポート番号を渡すことで、TopologyManagerへ参加表明をしている。 261 4行目では、Jungleを起動している。このとき、-host でTopologyManagerのIPアドレスを渡し、-portでTopologyManagerのポート番号をしている。TopologyManagerのIPアドレスとポート番号を渡すことで、TopologyManagerへ参加表明をしている。
262
258 10行目では、4行目と同様Jungleを起動しているが、今回実装した-writeオプションと-countオプションをつけている。 263 10行目では、4行目と同様Jungleを起動しているが、今回実装した-writeオプションと-countオプションをつけている。
264
259 -writeオプションは、Jungleにデータを書き込む機能をつけることができる。 265 -writeオプションは、Jungleにデータを書き込む機能をつけることができる。
266
260 -countオプションは、何回データを書き込むかを指定することができる。隣に引数をつけることで、回数を設定できる。本実験では、16台のJungleで、100回データを書き込むよう設定する。 267 -countオプションは、何回データを書き込むかを指定することができる。隣に引数をつけることで、回数を設定できる。本実験では、16台のJungleで、100回データを書き込むよう設定する。
261 すなわち、TopologyManagerに1台、writeモードで立ち上げるJungleに16台使た後、残りの15台はそのままJungleを起動させている。 268 すなわち、TopologyManagerに1台、writeモードで立ち上げるJungleに16台使た後、残りの15台はそのままJungleを起動させている。
269
262 このスクリプトは、TORQUEによって各サーバーノードへ投入され、実行される。 270 このスクリプトは、TORQUEによって各サーバーノードへ投入され、実行される。
263 %データを複数書き込む機能は、Jungleを立ち上げる際に-writeオプションと-countオプションをつけることで搭載される。 271 %データを複数書き込む機能は、Jungleを立ち上げる際に-writeオプションと-countオプションをつけることで搭載される。
264 %Aliceのコードを参照する限り、TopologyManagerが起動した時から、終了するまでの間で時間を取得している。 272 %Aliceのコードを参照する限り、TopologyManagerが起動した時から、終了するまでの間で時間を取得している。
265 %この図だと末端の子ノードからのみ書き込まれているように見える。実際は1~16の様々な場所にあるノードから書き込む。 273 %この図だと末端の子ノードからのみ書き込まれているように見える。実際は1~16の様々な場所にあるノードから書き込む。
274 \section{時間計測プログラムの実装}
275 前節ではツリートポロジーを形成した子ノードのJungleへデータを書き込む部分、及び実験手順について解説した。複数の子ノードにデータをそれぞれ書き込み、最終的にrootノードへデータを書き込んでいく時間を計測する為の機能を、新たにAliceに実装した。
276 ここではAliceに実装した時間計測プログラムについて解説する。
277
278 以下のソースコード \ref{src:alipro}は、実装したテストプログラムの起動部分である。
279 \begin{lstlisting}[frame=lrbt,label=src:alipro,caption=Aliceに実装した時間計測プログラムの一部,numbers=left]
280
281 \end{lstlisting}