Mercurial > hg > Papers > 2018 > suruga-thesis
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} |