Mercurial > hg > Papers > 2015 > nozomi-sigos
comparison paper/sigos.tex @ 5:4a7fa91ef60a
not fix English Abstract
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 06 May 2015 05:23:37 +0900 |
parents | 683044bd29ed |
children | 1702e6278518 |
comparison
equal
deleted
inserted
replaced
4:683044bd29ed | 5:4a7fa91ef60a |
---|---|
63 email: kokubo@cr.ie.u-ryukyu.ac.jp} | 63 email: kokubo@cr.ie.u-ryukyu.ac.jp} |
64 | 64 |
65 % 和文概要 | 65 % 和文概要 |
66 \begin{abstract} | 66 \begin{abstract} |
67 当研究室ではデータをData Segment、タスクをCode Segmentという単位で分割して記述する手法を提唱しており、そのプロトタイプとして並列分散フレームワークAliceを開発している。 | 67 当研究室ではデータをData Segment、タスクをCode Segmentという単位で分割して記述する手法を提唱しており、そのプロトタイプとして並列分散フレームワークAliceを開発している。 |
68 本研究ではAliceに実用的なアプリケーションを作成するために必要な動的なトポロジーを管理する機能とAliceの制御を行えるメタ計算を追加した。また、通信時におけるData Segmentの多態性を実現するため、Data SegmentをObject型、MessagePackを使ったByteArray型、圧縮されたByteArray型の3つの形式で表現できるメタ計算の設計と実装、性能評価を行った。 | 68 Aliceが分散プログラムを記述する能力を有することは確認された。しかし、Aliceで実用的なアプリケーションを作成するには、通信時にData Segmentの形式を選択できる機能が必要である。本研究では、Data Segmentの多態性を実現するため、Data SegmentをObject型、MessagePackを使ったByteArray型、圧縮されたByteArray型の3つの形式で表現できるメタ計算の設計と実装を行った。 |
69 | 69 |
70 | 70 |
71 \end{abstract} | 71 \end{abstract} |
72 | 72 |
73 % 英文概要 仮 | 73 % 英文概要 仮 |
74 \begin{eabstract} | 74 \begin{eabstract} |
75 Alice is a prototype framework for distributed programming, which uses Data Segment and Code Segment as programming units. We checked Alice has an ability to write dis- tributed program using aquarium example, distributed database Jungle and share screen system AliceVNC . | 75 Alice is a prototype framework for distributed programming, which uses Data Segment and Code Segment as programming units. We checked Alice has an ability to write distributed program by previous research. |
76 In this paper, we add functions which control dynamic topology and Alice computation. And we show Alice has an ability to write useful application. | 76 In this paper, we add Alice computation of compress. HOGE |
77 Furthermore we improve Alice performance. So Alice works 12% faster and has same performance as Federated Linda. | 77 for DataSegment polymerism. |
78 \end{eabstract} | 78 \end{eabstract} |
79 | 79 |
80 % 表題などの出力 | 80 % 表題などの出力 |
81 \maketitle | 81 \maketitle |
82 | 82 |
83 % 本文はここから始まる | 83 % 本文はここから始まる |
84 | 84 |
85 \section{研究背景と目的} | 85 \section{研究背景と目的} |
86 当研究室ではデータをData Segment、タスクをCode Segmentという単位で分割して記述する並列分散フレームワークAliceの開発を行っている。Aliceでは分散環境の構築に必要な処理をMeta Computationとして提供することで、スケーラブルな分散プログラムを信頼性高く記述できる環境を実現している。 | 86 当研究室ではデータをData Segment、タスクをCodeSegmentという単位で分割して記述する並列分散フレームワークAliceの開発を行っている。 |
87 | 87 Aliceでは分散環境の構築に必要な処理をMeta Computationとして提供することで、スケーラブルな分散プログラムを信頼性高く記述できる環境を実現している。 |
88 Alice が分散プログラムを記述する能力を有することは確認された。だが、実用的な分散プログラムを作成するためには、ノードの切断・再接続時に対応した処理を行いたい場合や圧縮されたデータ形式で通信を行いたい場合がある。 | 88 |
89 | 89 先行研究にてAlice が分散プログラムを記述する能力を有することは確認された。 |
90 本研究では、 Alice の Computation の 制御を行う Meta Computation を実装した。プログラムに Alice の制御を行うメタプログラムを記述することにより切断や再接続の状況に応じた処理を元のコードを変更することなく指定することができる。また、圧縮機能を持ったDataSegmentManagerを追加することによりData Segmentの多態性を実現した。 | 90 だが、実用的な分散プログラムを作成するためには、受け取ったデータをそのまま転送したい場合や圧縮されたデータ形式で通信を行いたい場合がある。 |
91 そして、 TreeVNC と TreeVNC を Alice を用いて実装した AliceVNC の比較をコードの観点から評価を行った。 | 91 |
92 本研究では、 Aliceを用いて画面共有システムAliceVNCを実装するにあたり必要となった | |
93 flip機能と圧縮機能を Meta Computation として実装した。 | |
94 プログラムに Alice の制御を行うメタプログラムを記述することにより、 | |
95 扱うデータの形式を元のコードを大きく変更することなく指定することができる。 | |
96 そして、データの多態性を実現し、扱いたいデータの状態に合わせてDataSegmentManagerを切り替えることで、ノード間通信における自由度の向上を図った。 | |
92 | 97 |
93 | 98 |
94 \section{分散フレームワーク Alice の概要} | 99 \section{分散フレームワーク Alice の概要} |
95 \subsection{Data SegmentとCode Segment} | 100 \subsection{Data SegmentとCode Segment} |
96 AliceはデータをData Segment、(以下DS)タスクをとCode Segment(以下CS)という単位に分割してプログラミングを行う。 | 101 AliceはデータをData Segment、(以下DS)タスクをとCode Segment(以下CS)という単位に分割してプログラミングを行う。 |
103 複数のスレッドから1つのデータに変更を行うためには、データの不整合を防ぐためのlockが必要になる。複数の関係のない要素を1つのデータオブジェクトで表現した場合、全ての操作でlockが必要になる。このlockがスケラビリティーを低下させる。つまりデータのサイズも並列計算には重要である。 | 108 複数のスレッドから1つのデータに変更を行うためには、データの不整合を防ぐためのlockが必要になる。複数の関係のない要素を1つのデータオブジェクトで表現した場合、全ての操作でlockが必要になる。このlockがスケラビリティーを低下させる。つまりデータのサイズも並列計算には重要である。 |
104 | 109 |
105 Aliceはデータを細かく分割して記述する。その細かく分割されたデータをDSと呼ぶ。 | 110 Aliceはデータを細かく分割して記述する。その細かく分割されたデータをDSと呼ぶ。 |
106 実際には特定のオブジェクトにマッピングされ、マッピングされたクラスを通してアクセスされる。 | 111 実際には特定のオブジェクトにマッピングされ、マッピングされたクラスを通してアクセスされる。 |
107 | 112 |
113 | |
108 \subsection{Data Segment Manager} | 114 \subsection{Data Segment Manager} |
109 DSは実際にはqueueに保存される。queueには対になるkeyが存在し、keyの数だけqueueが存在する。 | 115 DSは実際にはqueueに保存される。queueには対になるkeyが存在し、keyの数だけqueueが存在する。 |
110 このkeyを指定してDSの保存、取得を行う。queueの集合体はデータベースとして捉えられる。このデータベースをAliceではDS Manager(以下DSM)と呼ぶ。DSMにはLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のデータベースである。Remote DSMは他のノードのLocal DSMのproxyであり、接続しているノードの数だけ存在する。(図\ref{fig:RemoteDSM})Remote DSMに対して書き込むと対応するノードのLocal DSMに書き込まれる。 | 116 このkeyを指定してDSの保存、取得を行う。queueの集合体はデータベースとして捉えられる。このデータベースをAliceではDS Manager(以下DSM)と呼ぶ。DSMにはLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のデータベースである。Remote DSMは他のノードのLocal DSMのproxyであり、接続しているノードの数だけ存在する。(図\ref{fig:RemoteDSM})Remote DSMに対して書き込むと対応するノードのLocal DSMに書き込まれる。 |
111 | 117 |
112 \begin{figure}[htbp] | 118 \begin{figure}[htbp] |
113 \begin{center} | 119 \begin{center} |
114 \includegraphics[width=80mm]{images/remote_datasegment.pdf} | 120 \includegraphics[width=70mm]{images/remote_datasegment.pdf} |
115 \end{center} | 121 \end{center} |
116 \caption{Remote DSMは他のノードのLocal DSMのproxy } | 122 \caption{Remote DSMは他のノードのLocal DSMのproxy } |
117 \label{fig:RemoteDSM} | 123 \label{fig:RemoteDSM} |
118 \end{figure} | 124 \end{figure} |
119 | 125 |
138 \begin{itemize} | 144 \begin{itemize} |
139 \item {\ttfamily void peek(String managerKey, String key)} | 145 \item {\ttfamily void peek(String managerKey, String key)} |
140 \end{itemize} | 146 \end{itemize} |
141 peekもDSを読み込むAPIである。takeとの違いは読み込まれたDSが削除されないことである。 | 147 peekもDSを読み込むAPIである。takeとの違いは読み込まれたDSが削除されないことである。 |
142 | 148 |
149 | |
150 DSの表現にはMessagePack for Javaを利用している。 | |
151 \begin{itemize} | |
152 \item {\ttfamily DSは一般的なJavaのクラスオブジェクト} | |
153 \item {\ttfamily MessagePackを用いて変換したbyte[]で表現されたバイナリオブジェクト} | |
154 \end{itemize} | |
155 の2種類があり、LocalDSMにputされた場合は一般的なJavaのクラスオブジェクトとしてenQueueされる。 | |
156 RemoteDSMにputされた場合は通信時にbyteArrayに変換されたバイナリオブジェクトがenQueueされる。 | |
143 | 157 |
144 \section{Code Segment} | 158 \section{Code Segment} |
145 Alice上で実行されるタスクの単位がCSである。ユーザーはCSを組み合わせることでプログラミングを行う。CSをユーザーが記述する際に、内部で使用するDSの作成を記述する。 | 159 Alice上で実行されるタスクの単位がCSである。ユーザーはCSを組み合わせることでプログラミングを行う。CSをユーザーが記述する際に、内部で使用するDSの作成を記述する。 |
146 | 160 |
147 Input DS と Output DSはCSに用意されているAPIを用いて作成する。 | 161 Input DS と Output DSはCSに用意されているAPIを用いて作成する。 |
227 | 241 |
228 | 242 |
229 | 243 |
230 | 244 |
231 \section{AliceVNC} | 245 \section{AliceVNC} |
232 AliceVNCは、当研究室で開発を行っているTreeVNCをAliceを用いて実装された、授業向け画面共有システムである。 | 246 当研究室では授業向け画面共有システムTreeVNCの開発を行っている。 |
233 Aliceが実用的なアプリケーションを記述する能力をもつことを確認するために作成した。 | 247 授業でVNCを使う場合、1つのコンピュータに多人数が同時につながるため、性能が大幅に落ちてしまう(図\ref{fig:vnc})。 |
234 | 248 この問題をノード同士を接続させ、木構造を構成することで負荷分散を行い解決したものがTreeVNCである(図\ref{fig:treestructure})。 |
235 授業でVNCを使う場合、1つのコンピュータに多人数が同時につながるため、性能が大幅に落ちてしまう(図\ref{fig:vnc})。この問題をノード同士を接続させ、木構造を構成することで負荷分散を行い解決したものがTreeVNCである(図\ref{fig:treestructure})。TreeVNCは、TightVNCのソースコードを利用して開発されている。 | 249 |
250 Aliceが実用的なアプリケーションを記述する能力をもつことを確認するために、TreeVNCをAliceを用いて実装したAliceVNCの作成を行った。 | |
236 | 251 |
237 \begin{figure}[htbp] | 252 \begin{figure}[htbp] |
238 \begin{center} | 253 \begin{center} |
239 \includegraphics[width=80mm]{images/vnc.pdf} | 254 \includegraphics[width=60mm]{images/vnc.pdf} |
240 \end{center} | 255 \end{center} |
241 \caption{VNCの構造 } | 256 \caption{VNCの構造 } |
242 \label{fig:vnc} | 257 \label{fig:vnc} |
243 \end{figure} | 258 \end{figure} |
244 | 259 |
245 \begin{figure}[htbp] | 260 \begin{figure}[htbp] |
246 \begin{center} | 261 \begin{center} |
247 \includegraphics[width=80mm]{images/treestructure.pdf} | 262 \includegraphics[height=50mm]{images/treestructure.pdf} |
248 \end{center} | 263 \end{center} |
249 \caption{TreeVNC, AliceVNCの構造 } | 264 \caption{TreeVNC, AliceVNCの構造 } |
250 \label{fig:treestructure} | 265 \label{fig:treestructure} |
251 \end{figure} | 266 \end{figure} |
252 | 267 |
253 | 268 |
254 | 269 |
255 % \input{chapter3} | 270 |
256 % \input{chapter5} | 271 \section{Aliceの新機能} |
257 % \input{conclusion} | 272 実用的なアプリケーションであるTreeVNCをAlice上で実装することで、Aliceに必要な機能を洗い出した。 |
273 \subsection{flip機能} | |
274 Data Segment APIのput、updateを呼ぶとOutput Data Segmentが毎回新しく作成される。そして出力するデータのコピーが行われる。 | |
275 しかし、AliceVNCのようにInput Data Segmentとして取得したデータをそのまま子ノードにOutput Data Segmentとして出力する場合、コピーを行なうのは無駄である。 | |
276 | |
277 そこで、このコピーを無くしData Segmentの更新におけるオーバーヘッドを減らす方法としてflip機能の実装を行った。 | |
278 ソースコード\ref{src:exampleFlip}のようにInput Data SegmentであるReceiverをflipメソッドに引数として渡すことで、無駄なコピーを減らす。 | |
279 \begin{table}[html] | |
280 \lstinputlisting[label=src:flipAlice, caption=Aliceにおけるflip]{source/flip.java} | |
281 \end{table} | |
282 | |
283 \begin{table}[html] | |
284 \lstinputlisting[label=src:exampleFlip,caption=flipの使用例]{source/Sort.java} | |
285 \end{table} | |
286 | |
287 \subsection{Data Segmentの表現の追加(圧縮機能)} | |
288 TreeVNCでは画面配信の際、データを圧縮してノード間通信を行っている。 | |
289 そのため、AliceVNCにも圧縮されたデータ形式を扱える機能が必要だと考えた。 | |
290 しかし、ただデータを圧縮する機構を追加すればいいわけではない。 | |
291 | |
292 AliceVNCでは、ノードは受け取った画面データを描画すると同時に、子ノードのRemote DS Managerに送信する。 | |
293 ノードはDSを受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。 | |
294 しかし、受け取ったデータを自分の子ノードに対して送信する際には、解凍する必要はない。 | |
295 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。 | |
296 | |
297 そこで、1つのData Segmentに対し複数の表現を持たせることで、必要に応じた形式でDSを扱うことを可能にした。 | |
298 DSを扱うReceiveData.classに、次の3種類の表現を同時に持つことができる。 | |
299 | |
300 \begin{enumerate} | |
301 \item 一般的なJavaのクラスオブジェクト | |
302 \item MessagePack for Javaでシリアライズ化されたバイナリオブジェクト | |
303 \item 2を圧縮したバイナリオブジェクト | |
304 \end{enumerate} | |
305 | |
306 ソースコード\ref {src:ReceiveData}はReceiveData.classが持つ表現であり、{\tt val}に1. 一般的なJavaのクラスオブジェクト の表現でデータ本体が保存される。{\tt messagePack}には2. シリアライズ化されたバイナリオブジェクトが保存され、通常のRemoteDSMへの通信にこの表現が扱われる。そして、{\tt zMessagePack}には3. 圧縮されたバイナリオブジェクトが保存される。 | |
307 \begin{table}[html] | |
308 \lstinputlisting[label=src:ReceiveData, caption=データを表現するクラス]{source/ReceiveData.java} | |
309 \end{table} | |
310 | |
311 また、圧縮状態を持つDSを扱うDSMとしてLocalとRemoteそれぞれにCompressed Data Segment Managerの追加した。 | |
312 put/updateでは、ソースコード\ref{src:zput}のように指定するDSM名の先頭に"compressed"をつけることでDSは自動で圧縮状態も持つようになる。さらに、take/peekもソースコード\ref{src:ztake}のようにsetKeyを実行する際にDSM名の先頭に"compressed"をつけることで圧縮形式でDSを受け取ることができる。 | |
313 \begin{table}[html] | |
314 \lstinputlisting[label=src:zput, caption=圧縮DSのput]{source/compress_put.java} | |
315 \end{table} | |
316 | |
317 \begin{table}[html] | |
318 \lstinputlisting[label=src:ztake,caption=圧縮DSのtake]{source/compress_take.java} | |
319 \end{table} | |
320 | |
321 これによりユーザは指定するDSMを変えるだけで、他の計算部分を変えずに圧縮表現を持つDSを扱うことができる。 | |
322 | |
323 ノードは圧縮されたDSを受け取った後、そのまま子ノードにflipすれば圧縮状態のまま送信されるので、送信の際の再圧縮がなくなる。 | |
324 また、画面表示の際は{\tt asClass()}(ソースコード\ref {src:asClass} )を使うことで適切な形式でデータを取得できる。 | |
325 {\tt asClass()}はDSを目的の型にcastするメソッドであり、圧縮されていれば解凍してcastを行っている。 | |
326 これにより必要なDSを必要な時にだけ解凍できる。 | |
327 | |
328 \begin{table}[html] | |
329 \lstinputlisting[label=src:asClass, caption=asClassの処理]{source/asClass.java} | |
330 \end{table} | |
331 | |
332 \subsection{パケットの再設計} | |
333 2.4で述べたように、Remoteからputされたデータは必ずシリアライズ化されておりbyteArrayで表現される。 | |
334 しかし、putされたbyteArrayが全てシリアライズ化された状態であるとはいえない。Localからも一般的なJavaのクラスオブジェクトとしてbyteArrayが使用されている場合が存在する。例えば、AliceVNCで使われる画像データはbyteArrayで表現されているが、これはLocalからputされている。 | |
335 また、データの表現に圧縮形式を追加したことで、RemoteからでもputされたbyteArrayが圧縮されているのかそうでないのかが判断できなくなった。 | |
336 | |
337 ここからわかることは、データを表現するにはデータ単体をやりとりするだけでは不十分ということである。 | |
338 そこで、データとデータの状態を表すヘッダをまとめて1つのオブジェクトとして扱うように変更した。 | |
339 Aliceの通信におけるヘッダにあたるCommandMessage.class(ソースコード\ref {src:CommandMessage}にシリアライズ状態表すフラグと、圧縮状態を表すフラグを追加した。 | |
340 これによってputされたDSMはフラグに応じた適切な形式でReceiveData.class内にDSを格納できる。 | |
341 また、CommandMessage.classに圧縮前のデータサイズも追加したことで、適切な解凍が可能になった。 | |
342 | |
343 \begin{table}[html] | |
344 \lstinputlisting[label=src:CommandMessage, caption=変更後のCommandMessage]{source/CommandMessage.java} | |
345 \end{table} | |
346 | |
347 \begin{table}[htbp] | |
348 \caption{CommandMessageの変数名の説明} | |
349 \label{tb:variable} | |
350 \begin{center} | |
351 \begin{tabular} {|l|l|} | |
352 \hline | |
353 変数名&説明\\ | |
354 \hline | |
355 type&CommandType {\tt PEEK, PUT}などを表す\\ | |
356 \hline | |
357 seq&\shortstack{Data Segmentの待ち合わせを行っている\\Code Segmentを表すunique number }\\ | |
358 \hline | |
359 key&どのKeyに対して操作を行うか指定する\\ | |
360 \hline | |
361 | |
362 quickFlag&SEDAを挟まずCommandを処理を行うかを示す\\ | |
363 \hline | |
364 serialized&データ本体のシリアライズ状態を示す\\ | |
365 \hline | |
366 | |
367 compressed&データ本体のシリアライズ状態を示す\\ | |
368 \hline | |
369 | |
370 dataSize&圧縮前のデータサイズを表す\\ | |
371 \hline | |
372 | |
373 \end{tabular} | |
374 \end{center} | |
375 \end{table} | |
376 | |
377 | |
378 \section{まとめ} | |
379 本研究では、まずはじめに並列分散フレームワークAliceの計算モデルと実装について説明を行い、Aliceにおけるプログラミング手法を述べた。 | |
380 | |
381 次に、Aliceが実用的なアプリケーションを記述するために必要なMeta Computationとして、データの多態性を実現し、指定するDSMの切り替えで扱うデータ表現を変えるようにした。 | |
382 これにより、必要に応じた形式を扱うことができ、ユーザが記述するComputation部分を大きく変えずに自由度の高い通信を行うことが可能になった。 | |
383 同様の手法を用いれば、圧縮形式以外にも暗号形式・JSON形式などの複数のデータ表現をユーザに扱いやすい形で拡張することができる。 | |
384 | |
385 今後の課題としては、より実用的なアプリケーションを記述するために、データの永続性の確保等が挙げられる。 | |
386 現在のAliceはOn memoryであるためプロセスの終了とともにDS全て失われてしまう。この問題を解決するには、DSを他のKey Value Store等のシステムに保存し、永続性を確保する必要がある。 | |
258 | 387 |
259 \nocite{*} | 388 \nocite{*} |
260 %\nocite{opencl} | 389 %\nocite{opencl} |
261 %\nocite{opencl:ref} | 390 %\nocite{opencl:ref} |
262 %\nocite{opencl:applied} | 391 %\nocite{opencl:applied} |