# HG changeset patch # User suruga # Date 1518877994 -32400 # Node ID d32ba99c8ed540d5e4d67e584da43c7ca5b1c392 # Parent e15e674f4f6d371cce963dce638895e923b19205 fix diff -r e15e674f4f6d -r d32ba99c8ed5 paper/.DS_Store Binary file paper/.DS_Store has changed diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/chapter2.tex --- a/paper/final_main/chapter2.tex Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/chapter2.tex Sat Feb 17 23:33:14 2018 +0900 @@ -14,9 +14,26 @@ Jungleはデータの変更を非破壊で行なっており、編集ごとのデータをバージョンとしてTreeOperationLogに残している。Jungleの分散ノード間の通信は木の変更のTreeOperationLogを交換することによって、分散データベースを構成するよう設計されている。 \section{分散機構} -Jungleの分散機構は、木構造、すなわちツリー型を想定したネットワークトポロジーを形成し、サーバー同士を接続することで通信を行なっている。 +Jungleの分散機構は、木構造、すなわちツリー型を想定したネットワークトポロジーを形成し、サーバー同士を接続することで通信を行なっている。ツリー型であれば、データの整合性をとる場合、一度トップまでデータを伝搬させることで行える。トップまたはトップまでの間にあるサーバーノードでデータを運搬中に衝突が発生したらMergeを行い、その結果を改めて伝搬すればよいからである(図\ref{fig:tree})。 + +\begin{figure}[htbp] + \centering + \includegraphics[width=100mm]{pic/tree.pdf} + \caption{ツリー型のトポロジー} + \label{fig:tree} +\end{figure} + +(図\ref{fig:tree})の矢印の流れを以下に示す。 +\begin{enumerate} + \item servernode 1, servernode 2からきたデータがservernode 0 で衝突。 + \item 衝突したデータのMergeが行われる。 + \item Mergeされたデータがservernode 1,servernode 2へ伝搬 + \item servernode1からMergeされたデータがservernode 3、servernode 4へ伝搬。全体でデータの整合性が取れる。 +\end{enumerate} + + リング型(図\ref{fig:ring} )やメッシュ型(図\ref{fig:mesh} )のトポロジーでは、データの編集結果を他のサーバーノードに流す際に、流したデータが自分自身に返ってくることでループが発生してしまう可能性がある。 -ツリー型であれば、閉路がない状態でサーバーノード同士を繋げることができる為、編集履歴の結果を他のサーバーノードに流すだけですみ、結果ループを防ぐことができる(図\ref{fig:tree})。 +ツリー型であれば、閉路がない状態でサーバーノード同士を繋げることができる為、編集履歴の結果を他のサーバーノードに流すだけですみ、結果ループを防ぐことができる。 \begin{figure}[htbp] \centering @@ -32,13 +49,6 @@ \label{fig:mesh} \end{figure} -\begin{figure}[htbp] - \centering - \includegraphics[width=100mm]{pic/tree.pdf} - \caption{ツリー型のトポロジー} - \label{fig:tree} -\end{figure} - ネットワークトポロジーは、当研究室で開発している並列分散フレームワークであるAliceが提供する、TopologyManagerという機能を用いて構成されている。 また、データ分散の為には、どのデータをネットワークに流すのか決めなければならない。そこで、TreeOperationLogを使用する。前セクションでも述べたが、TreeOperationLogには、どのNodeにどのような操作をしたのかという、データ編集の履歴情報が入っている。 diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/chapter3.tex --- a/paper/final_main/chapter3.tex Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/chapter3.tex Sat Feb 17 23:33:14 2018 +0900 @@ -37,7 +37,7 @@ そこで、本研究ではJava版のJungleにおいて、Webサーバーを取り除いた、純粋なJungleの性能を測定するプログラムを実装した。 \section{測定環境} - +本実験では、 \section{TORQUE Resource Manager} 分散環境上でのJungleの性能を測定するにあたり、VM32台にJungle,AliceのTopologyManagerを起動させた後、Jungleを立ち上げたVMでデータを書き込むプログラムを動作させる。プログラムを起動する順番やタイミングは、TORQUE Resource Managerというジョブスケジューラーによって管理する。 @@ -56,7 +56,48 @@ 今回、ジョブには、使用するVMの数や、実行させたいテストプログラムの参照先等を記述している。 \newpage -\section{Jungleの分散性能測定用テストプログラム} +\section{分散フレームワーク Alice による分散環境の構築} +本研究では、分散環境上でのJungleの性能を確認する為、VM32台分のサーバーノードを用意し、それぞれでJungleを起動することで、Jungle間で通信をする環境をつくる。 +Jungleを起動したサーバーノード間の通信部分を、当研究室で開発している並列分散フレームワークAlice[1]にて再現する。 + +Aliceには、ネットワークのトポロジーを構成するTopologyManager[2]という機能が備わっている。サーバーノードはTopologyManagerに、誰に接続を行えばよいかを尋ねる。TopologyManagerは尋ねてきたサーバーノードに順番に、接続先のサーバーノードのIPアドレス、ポート番号、接続名を送り、受け取ったサーバーノードはそれらに従って接続する。 +この時、TopologyManager自身はVM0を用いて立ち上げる。 +よって、TopologyManagerはJungleをのせたVM1からVM32、計VM31台分のサーバーノードを、木構造を形成するように采配する(図\ref{fig:topologymanager} )。 + +\begin{figure}[H] + \centering + \includegraphics[width=100mm]{pic/topologymanager3.pdf} + \caption{AliceによるJungleの木構造トポロジーの形成} + \label{fig:topologymanager} +\end{figure} + +%DataSegment CodeSegment +Aliceはタスクを行うCodeSegmentと、CodeSegmentで使用するデータを扱うDataSegmentによってプログラムを行うスタイルを取る。 +CodeSegmentはDataSegmentが必要なデータを受け取り次第、タスクを行う。DataSegmentがデータを受け取る為には、そのDataSegmentを示すキーが必要である。 + +TopologyManagerによって構成されたトポロジーのサーバーノードには、それぞれ自分自身を示す文字列であるキーが存在する。 +このキーは自身のサーバーノードのDataSegmentがデータを受け取る際に指定する必要がある。 + +たとえば、servernode0,servernode1,servernode2により、(図\ref{fig:LogupdateTree})のように木構造が構成されたとする。 +\begin{figure}[H] + \centering + \includegraphics[width=100mm]{pic/LogupdateTree.pdf} + \caption{トポロジーの形成} + \label{fig:LogupdateTree} +\end{figure} + +この時、servernode0はservernode1、servernode2に対して親にあたる。逆に、servernode1,servernode2はservernode0に対して子にあたる。よって、(図\ref{fig:LogupdateTree})に矢印の隣にかかれている文字列"parent","child 1","child 2"のようにキーを指定している。 +servernode0からservernode1へデータを送りたい場合、”child 1”というキーを追加すればいい。 +このように、データアクセスしたいサーバーノードのキーを追加することで、そのサーバノードのDataSegmentへデータアクセスすることができる。 +他のサーバーノードのDataSegmentへデータアクセスする際には、アクセス先のサーバーノードのキーを追加すればいい。 + +%TreeOperationLog +トポロジー構成後、Jungle間の通信でのデータ形式にはTreeOperationLogを利用する。TreeOperationLogは、Jungleによるノードの編集の履歴などの情報が入っている。TreeOperationLogは、AliceのDataSegmentでも扱えるようシリアライズ化されたデータである。よって、Aliceによって構成されたネットワークトポロジーのサーバノード間でのデータのアクセスが可能になっている。 +TreeOperationLogをAliceによって他のJungleへ送る。送信先のJungleでは、送られてきたTreeOperationLogを参照して送信元のJungleと同じノード編集を行う。こうして、Jungle間でのデータの同期を可能にしている。 +\newpage + +\section{Jungleの分散性能測定用テストプログラムの実装} +本実験において、Jungleの性能を測定する為にテストプログラムを作成した。 テストプログラムは、木構造における子ノードに、データを複数書き込む機能を提供する。 末端の複数の子ノードにデータをそれぞれ書き込み、最終的にrootノードへデータをmergeしていく(図\ref{fig:logupdatetest} )。データを複数書き込む機能は、Jungleを立ち上げる際に-writeオプションと-countオプションをつけることで搭載される。 @@ -103,43 +144,3 @@ % ssh $nodes[$i] \"cd $logFile;java -jar ../../build/libs/logupdateTest-1.1.jar -host $nodes[0] -p 10003 -port 10000 --noKeepAlive \end{lstlisting} -\section{分散フレームワーク Alice による分散環境の構築} -本研究では、分散環境上でのJungleの性能を確認する為、VM32台分のサーバーノードを用意し、それぞれでJungleを起動することで、Jungle間で通信をする環境をつくる。 -Jungleを起動したサーバーノード間の通信部分を、当研究室で開発している並列分散フレームワークAlice[1]にて再現する。 - -Aliceには、ネットワークのトポロジーを構成するTopologyManager[2]という機能が備わっている。TopologyManagerに参加表明をしたサーバーノードに順番に、接続先のサーバーノードのIPアドレス、ポート番号、接続名を送り、受け取ったサーバーノードはそれらに従って接続する。 -この時、TopologyManager自身はVM0を用いて立ち上げる。 -よって、TopologyManagerはJungleをのせたVM1からVM32、計VM31台分のサーバーノードを、木構造を形成するように采配する(図\ref{fig:topologymanager} )。 - -\begin{figure}[H] - \centering - \includegraphics[width=100mm]{pic/topologymanager_2.pdf} - \caption{AliceによるJungleの木構造トポロジーの形成} - \label{fig:topologymanager} -\end{figure} - -%DataSegment CodeSegment -Aliceはタスクを行うCodeSegmentと、CodeSegmentで使用するデータを扱うDataSegmentによってプログラムを行うスタイルを取る。 -CodeSegmentはDataSegmentが必要なデータを受け取り次第、タスクを行う。DataSegmentがデータを受け取る為には、そのDataSegmentを示すキーが必要である。 - -TopologyManagerによって構成されたトポロジーのサーバーノードには、それぞれ自分自身を示す文字列であるキーが存在する。 -このキーは自身のサーバーノードのDataSegmentがデータを受け取る際に指定する必要がある。 - -たとえば、servernode0,servernode1,servernode2により、(図\ref{fig:LogupdateTree})のように木構造が構成されたとする。 -\begin{figure}[H] - \centering - \includegraphics[width=100mm]{pic/LogupdateTree.pdf} - \caption{トポロジーの形成} - \label{fig:LogupdateTree} -\end{figure} - -この時、servernode0はservernode1、servernode2に対して親にあたる。逆に、servernode1,servernode2はservernode0に対して子にあたる。よって、(図\ref{fig:LogupdateTree})に矢印の隣にかかれている文字列"parent","child 1","child 2"のようにキーを指定している。 -servernode0からservernode1へデータを送りたい場合、”child 1”というキーを追加すればいい。 -このように、データアクセスしたいサーバーノードのキーを追加することで、そのサーバノードのDataSegmentへデータアクセスすることができる。 -他のサーバーノードのDataSegmentへデータアクセスする際には、アクセス先のサーバーノードのキーを追加すればいい。 - -%TreeOperationLog -トポロジー構成後、Jungle間の通信でのデータ形式にはTreeOperationLogを利用する。TreeOperationLogは、Jungleによるノードの編集の履歴などの情報が入っている。TreeOperationLogは、AliceのDataSegmentでも扱えるようシリアライズ化されたデータである。よって、Aliceによって構成されたネットワークトポロジーのサーバノード間でのデータのアクセスが可能になっている。 -TreeOperationLogをAliceによって他のJungleへ送る。送信先のJungleでは、送られてきたTreeOperationLogを参照して送信元のJungleと同じノード編集を行う。こうして、Jungle間でのデータの同期を可能にしている。 -\newpage - diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.aux --- a/paper/final_main/main.aux Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/main.aux Sat Feb 17 23:33:14 2018 +0900 @@ -10,12 +10,12 @@ \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {2.1}Jungleデータベースの構造}{3}} \@writefile{toc}{\contentsline {section}{\numberline {2.2}分散機構}{3}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces ring型のトポロジー}}{4}} -\newlabel{fig:ring}{{2.1}{4}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces メッシュ型のトポロジー}}{4}} -\newlabel{fig:mesh}{{2.2}{4}} -\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces ツリー型のトポロジー}}{5}} -\newlabel{fig:tree}{{2.3}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.1}{\ignorespaces ツリー型のトポロジー}}{4}} +\newlabel{fig:tree}{{2.1}{4}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces ring型のトポロジー}}{5}} +\newlabel{fig:ring}{{2.2}{5}} +\@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces メッシュ型のトポロジー}}{5}} +\newlabel{fig:mesh}{{2.3}{5}} \@writefile{toc}{\contentsline {chapter}{\numberline {第3章}評価実験}{6}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} @@ -26,20 +26,20 @@ \@writefile{toc}{\contentsline {section}{\numberline {3.3}TORQUE Resource Manager}{7}} \@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces TORQUEの構成}}{7}} \newlabel{fig:torque}{{3.1}{7}} -\@writefile{toc}{\contentsline {section}{\numberline {3.4}Jungleの分散性能測定用テストプログラム}{8}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces TestプログラムによるJungleの性能測定}}{8}} -\newlabel{fig:logupdatetest}{{3.2}{8}} -\newlabel{src:Logupdate.pl}{{3.1}{8}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}Alice によるネットワークトポロジーマネージャーの起動}{8}} -\newlabel{src:WriteCount}{{3.2}{9}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.2}writeモードでのJungleの起動}{9}} -\newlabel{src:jungle}{{3.3}{9}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.3}Jungleの起動}{9}} -\@writefile{toc}{\contentsline {section}{\numberline {3.5}分散フレームワーク Alice による分散環境の構築}{9}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces AliceによるJungleの木構造トポロジーの形成}}{10}} -\newlabel{fig:topologymanager}{{3.3}{10}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces トポロジーの形成}}{11}} -\newlabel{fig:LogupdateTree}{{3.4}{11}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}分散フレームワーク Alice による分散環境の構築}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.2}{\ignorespaces AliceによるJungleの木構造トポロジーの形成}}{8}} +\newlabel{fig:topologymanager}{{3.2}{8}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.3}{\ignorespaces トポロジーの形成}}{9}} +\newlabel{fig:LogupdateTree}{{3.3}{9}} +\@writefile{toc}{\contentsline {section}{\numberline {3.5}Jungleの分散性能測定用テストプログラムの実装}{10}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.4}{\ignorespaces TestプログラムによるJungleの性能測定}}{10}} +\newlabel{fig:logupdatetest}{{3.4}{10}} +\newlabel{src:Logupdate.pl}{{3.1}{10}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}Alice によるネットワークトポロジーマネージャーの起動}{10}} +\newlabel{src:WriteCount}{{3.2}{11}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.2}writeモードでのJungleの起動}{11}} +\newlabel{src:jungle}{{3.3}{11}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.3}Jungleの起動}{11}} \@writefile{toc}{\contentsline {chapter}{\numberline {第4章}性能評価}{12}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.dvi Binary file paper/final_main/main.dvi has changed diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.lof --- a/paper/final_main/main.lof Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/main.lof Sat Feb 17 23:33:14 2018 +0900 @@ -1,12 +1,12 @@ \addvspace {10\p@ } \addvspace {10\p@ } -\contentsline {figure}{\numberline {2.1}{\ignorespaces ring型のトポロジー}}{4} -\contentsline {figure}{\numberline {2.2}{\ignorespaces メッシュ型のトポロジー}}{4} -\contentsline {figure}{\numberline {2.3}{\ignorespaces ツリー型のトポロジー}}{5} +\contentsline {figure}{\numberline {2.1}{\ignorespaces ツリー型のトポロジー}}{4} +\contentsline {figure}{\numberline {2.2}{\ignorespaces ring型のトポロジー}}{5} +\contentsline {figure}{\numberline {2.3}{\ignorespaces メッシュ型のトポロジー}}{5} \addvspace {10\p@ } \contentsline {figure}{\numberline {3.1}{\ignorespaces TORQUEの構成}}{7} -\contentsline {figure}{\numberline {3.2}{\ignorespaces TestプログラムによるJungleの性能測定}}{8} -\contentsline {figure}{\numberline {3.3}{\ignorespaces AliceによるJungleの木構造トポロジーの形成}}{10} -\contentsline {figure}{\numberline {3.4}{\ignorespaces トポロジーの形成}}{11} +\contentsline {figure}{\numberline {3.2}{\ignorespaces AliceによるJungleの木構造トポロジーの形成}}{8} +\contentsline {figure}{\numberline {3.3}{\ignorespaces トポロジーの形成}}{9} +\contentsline {figure}{\numberline {3.4}{\ignorespaces TestプログラムによるJungleの性能測定}}{10} \addvspace {10\p@ } \addvspace {10\p@ } diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.log --- a/paper/final_main/main.log Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/main.log Sat Feb 17 23:33:14 2018 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.7.1-161114-2.6 (utf8.euc) (TeX Live 2017) (preloaded format=platex 2017.10.20) 17 FEB 2018 21:59 +This is e-pTeX, Version 3.14159265-p3.7.1-161114-2.6 (utf8.euc) (TeX Live 2017) (preloaded format=platex 2017.10.20) 17 FEB 2018 23:31 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -605,28 +605,28 @@ ]) (./chapter2.tex [2] 第 2 章 +File: pic/tree.pdf Graphic file (type pdf) + [3 + +] File: pic/ring.pdf Graphic file (type pdf) - + File: pic/mesh.pdf Graphic file (type pdf) - -File: pic/tree.pdf Graphic file (type pdf) - [3 - -] [4]) (./chapter3.tex [5] + ) (./chapter3.tex [4] [5] 第 3 章 [6 ] File: ./pic/torque.pdf Graphic file (type pdf) <./pic/torque.pdf> [7] -File: pic/logupdatetest2.pdf Graphic file (type pdf) - [8] -File: pic/topologymanager_2.pdf Graphic file (type pdf) +File: pic/topologymanager3.pdf Graphic file (type pdf) + [8] +File: pic/LogupdateTree.pdf Graphic file (type pdf) - [9] -File: pic/LogupdateTree.pdf Graphic file (type pdf) - [10] [11]) -(./chapter4.tex + [9] +File: pic/logupdatetest2.pdf Graphic file (type pdf) + [10]) (./chapter4.tex +[11] 第 4 章 [12 @@ -645,11 +645,11 @@ ) Here is how much of TeX's memory you used: 4030 strings out of 493653 - 49024 string characters out of 6148873 - 146919 words of memory out of 5000000 + 49021 string characters out of 6148873 + 163921 words of memory out of 5000000 7534 multiletter control sequences out of 15000+600000 16433 words of font info for 66 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 27i,7n,32p,520b,1156s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on main.dvi (19 pages, 44252 bytes). +Output written on main.dvi (19 pages, 45712 bytes). diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.lol --- a/paper/final_main/main.lol Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/main.lol Sat Feb 17 23:33:14 2018 +0900 @@ -1,3 +1,3 @@ -\contentsline {lstlisting}{\numberline {3.1}Alice によるネットワークトポロジーマネージャーの起動}{8} -\contentsline {lstlisting}{\numberline {3.2}writeモードでのJungleの起動}{9} -\contentsline {lstlisting}{\numberline {3.3}Jungleの起動}{9} +\contentsline {lstlisting}{\numberline {3.1}Alice によるネットワークトポロジーマネージャーの起動}{10} +\contentsline {lstlisting}{\numberline {3.2}writeモードでのJungleの起動}{11} +\contentsline {lstlisting}{\numberline {3.3}Jungleの起動}{11} diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.pdf Binary file paper/final_main/main.pdf has changed diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/main.toc --- a/paper/final_main/main.toc Sat Feb 17 22:06:31 2018 +0900 +++ b/paper/final_main/main.toc Sat Feb 17 23:33:14 2018 +0900 @@ -8,8 +8,8 @@ \contentsline {section}{\numberline {3.1}実験目的}{6} \contentsline {section}{\numberline {3.2}測定環境}{7} \contentsline {section}{\numberline {3.3}TORQUE Resource Manager}{7} -\contentsline {section}{\numberline {3.4}Jungleの分散性能測定用テストプログラム}{8} -\contentsline {section}{\numberline {3.5}分散フレームワーク Alice による分散環境の構築}{9} +\contentsline {section}{\numberline {3.4}分散フレームワーク Alice による分散環境の構築}{8} +\contentsline {section}{\numberline {3.5}Jungleの分散性能測定用テストプログラムの実装}{10} \contentsline {chapter}{\numberline {第4章}性能評価}{12} \contentsline {section}{\numberline {4.1}java版jungleとhuskell版jungleの比較}{12} \contentsline {section}{\numberline {4.2}java版jungleの分散性能の評価}{12} diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/pic/.DS_Store Binary file paper/final_main/pic/.DS_Store has changed diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/pic/tree.graffle Binary file paper/final_main/pic/tree.graffle has changed diff -r e15e674f4f6d -r d32ba99c8ed5 paper/final_main/pic/tree.pdf Binary file paper/final_main/pic/tree.pdf has changed