comparison presen/sample.html @ 10:90aaf305aed6 default tip

add presen
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 09:06:13 +0900
parents edc72425caab
children
comparison
equal deleted inserted replaced
9:b2869724949d 10:90aaf305aed6
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8"> 4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <title>分散フレームワークAliceのPC画面配信システムへの応用</title> 5 <title>分散フレームワークAliceのMeta Data Segment</title>
6 6
7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]"> 7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]">
8 <meta name="author" content="照屋のぞみ 河野真治" > 8 <meta name="author" content="照屋のぞみ" >
9 9
10 <!-- style sheet links --> 10 <!-- style sheet links -->
11 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> 11 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection">
12 <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> 12 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
13 <link rel="stylesheet" href="s6/themes/print.css" media="print"> 13 <link rel="stylesheet" href="s6/themes/print.css" media="print">
65 <div class='slide cover'> 65 <div class='slide cover'>
66 <table width="90%" height="90%" border="0" align="center"> 66 <table width="90%" height="90%" border="0" align="center">
67 <tr> 67 <tr>
68 <td> 68 <td>
69 <div align="center"> 69 <div align="center">
70 <h1><font color="#808db5">分散フレームワークAliceのPC画面配信システムへの応用</font></h1> 70 <h1><font color="#808db5">分散フレームワークAliceのMeta Data Segment</font></h1>
71 </div> 71 </div>
72 </td> 72 </td>
73 </tr> 73 </tr>
74 <tr> 74 <tr>
75 <td> 75 <td>
76 <div align="left"> 76 <div align="left">
77 照屋のぞみ 河野真治 77 照屋のぞみ
78 琉球大学 工学部 情報工学科 78 琉球大学 工学部 情報工学科 河野研
79 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> 79 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
80 </div> 80 </div>
81 </td> 81 </td>
82 </tr> 82 </tr>
83 </table> 83 </table>
85 85
86 <div class='slide '> 86 <div class='slide '>
87 <!-- === begin markdown block === 87 <!-- === begin markdown block ===
88 88
89 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] 89 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
90 on 2016-01-09 09:23:18 +0900 with Markdown engine kramdown (1.5.0) 90 on 2016-02-18 09:05:23 +0900 with Markdown engine kramdown (1.5.0)
91 using options {} 91 using options {}
92 --> 92 -->
93 93
94 <!-- _S9SLIDE_ --> 94 <!-- _S9SLIDE_ -->
95 <h1 id="section">研究目的(1/3)</h1> 95 <h1 id="section">研究目的(1/3)</h1>
96 <ul> 96 <ul>
97 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> 97 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する</li>
98 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。  </li> 98 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す</li>
99 <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li> 99 <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している</li>
100 </ul> 100 </ul>
101 101
102 102
103 </div> 103 </div>
104 <div class='slide '> 104 <div class='slide '>
105 <!-- _S9SLIDE_ --> 105 <!-- _S9SLIDE_ -->
106 <h1 id="section-1">研究目的(2/3)</h1> 106 <h1 id="section-1">研究目的(2/3)</h1>
107 <ul> 107 <ul>
108 <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li> 108 <li>Aliceでは、ComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li>
109 <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li> 109 <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li>
110 <li>仕様を大きく変更することなくプログラムの挙動が変えられる</li> 110 <li>コードの変更を抑え、変更前の信頼性を保ったまま拡張可能にする</li>
111 <li>変更前の信頼性を保ったまま拡張可能にする</li>
112 </ul> 111 </ul>
113 112
114 113
115 </div> 114 </div>
116 <div class='slide '> 115 <div class='slide '>
117 <!-- _S9SLIDE_ --> 116 <!-- _S9SLIDE_ -->
118 <h1 id="section-2">研究目的(3/3)</h1> 117 <h1 id="section-2">研究目的(3/3)</h1>
119 <ul> 118 <ul>
120 <li>本研究では、 Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する。</li> 119 <li>本研究では、Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する</li>
121 <li>構築するにあたり必要となった機能を洗い出しAliceのMeta Computationとして実装した。</li> 120 <li>構築するにあたり必要となった圧縮機能をAliceのMeta Computationとして実装した</li>
122 <li>もとのTreeVNCとの比較を行うことでMetaComputationの役割と有効性を示す。</li> 121 <li>もとのTreeVNCとの比較を行うことでMeta Computationの役割と有効性を示す</li>
123 </ul> 122 </ul>
124 123
125 124
126 </div> 125 </div>
127 <div class='slide '> 126 <div class='slide '>
128 <!-- _S9SLIDE_ --> 127 <!-- _S9SLIDE_ -->
129 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1> 128 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1>
130 <ul> 129 <ul>
131 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li> 130 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li>
132 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li> 131 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li>
133 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 132 <li>CSはkeyで指定されたDSが全て揃うと実行されるという性質を持つ。
134 <img src="./images/dsandcs.svg" alt="opt" width="60%" /></li> 133 <img src="./images/dsandcs.svg" alt="opt" width="50%" /></li>
135 </ul> 134 </ul>
136 135
137 136
138 </div> 137 </div>
139 <div class='slide '> 138 <div class='slide '>
148 147
149 148
150 </div> 149 </div>
151 <div class='slide '> 150 <div class='slide '>
152 <!-- _S9SLIDE_ --> 151 <!-- _S9SLIDE_ -->
153 <h1 id="data-segment--codesegment">Data Segment と CodeSegment</h1>
154 <ul>
155 <li>AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する</li>
156 <li>ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。</li>
157 <li>DSはAliceが内部にもつデータベース(DS Manager)により管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li>
158 </ul>
159
160
161 </div>
162 <div class='slide '>
163 <!-- _S9SLIDE_ -->
164 <h1 id="data-segment-manager">Data Segment Manager</h1> 152 <h1 id="data-segment-manager">Data Segment Manager</h1>
165 <ul> 153 <ul>
166 <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。 </li> 154 <li>DS の集合体であるデータベースを <strong>DS Manager(DSM)</strong> と呼ぶ。<br />
167 <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li>
168 <li>keyに対して複数のDSを保存する際はFIFO的に処理される<br />
169 <img src="./images/KeyDS.svg" alt="opt" width="50%" /></li>
170 </ul>
171
172
173 </div>
174 <div class='slide '>
175 <!-- _S9SLIDE_ -->
176 <h1 id="data-segment-manager-1">Data Segment Manager</h1>
177 <ul>
178 <li>Local DSM … 各ノード固有のデータベース。</li>
179 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br />
180 <img src="./images/remote_datasegment.svg" alt="opt" width="50%" /></li>
181 </ul>
182
183
184 </div>
185 <div class='slide '>
186 <!-- _S9SLIDE_ -->
187 <h1 id="data-segment-api">Data Segment API</h1>
188 <ul>
189 <li>DS の追加<br />
190 <ul> 155 <ul>
191 <li>put(String managerKey, String key, Object val) </li> 156 <li>Local DSM … 各ノード固有のデータベース。</li>
192 <li>update(String managerKey, String key, Object val) ※先頭DSを削除してからput</li> 157 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。 </li>
193 </ul> 158 </ul>
194 </li> 159 </li>
195 <li>DS の取得<br /> 160 <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。
196 <ul> 161 <img src="./images/remote_datasegment.svg" alt="opt" width="50%" /></li>
197 <li>take(String managerKey, String key) </li>
198 <li>peek(String managerKey, String key) ※DSMから削除されない</li>
199 </ul>
200 </li>
201 <li>take/peekは実際にはcreate()とsetKey()によって行われる</li>
202 <li>create()でDSの受け皿を作っておき、setKey()にkeyをセットすることで Input DS を指定する</li>
203 </ul> 162 </ul>
204 163
205 164
206 </div> 165 </div>
207 <div class='slide '> 166 <div class='slide '>
208 <!-- _S9SLIDE_ --> 167 <!-- _S9SLIDE_ -->
209 <h1 id="computation--meta-computation">Computation と Meta Computation</h1> 168 <h1 id="computation--meta-computation">Computation と Meta Computation</h1>
210 <ul> 169 <ul>
211 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li> 170 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li>
212 <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li> 171 <li>分散トポロジーの構成、通信の切断・再接続時の処理などはMeta ComputationとしてAliceが提供</li>
213 <li>分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。</li> 172 <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定することでシンプルな記述を実現</li>
214 </ul> 173 </ul>
215 174
216 175
217 </div> 176 </div>
218 <div class='slide '> 177 <div class='slide '>
227 186
228 187
229 </div> 188 </div>
230 <div class='slide '> 189 <div class='slide '>
231 <!-- _S9SLIDE_ --> 190 <!-- _S9SLIDE_ -->
232 <h1 id="computation--meta-computation-2">Computation と Meta Computation</h1> 191 <h1 id="treevnc">TreeVNCへの応用</h1>
233 <ul> 192 <ul>
234 <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li> 193 <li>AliceのMeta Computationの有効性を示すため実用的な例題であるTreeVNCを実装する</li>
235 <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li> 194 <li>TightVNCをもとにした木構造画面配信システム</li>
236 </ul> 195 <li>画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能</li>
237
238
239 </div>
240 <div class='slide '>
241 <!-- _S9SLIDE_ -->
242 <h1 id="treevnc">TreeVNC</h1>
243 <ul>
244 <li>Aliceを用いて実装する実用的な分散プログラムの例題</li>
245 <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム </li>
246 <li>TightVNCがもとになっている<br />
247 <img src="./images/treeVNC.svg" alt="opt" width="40%" /></li>
248 </ul>
249
250
251 </div>
252 <div class='slide '>
253 <!-- _S9SLIDE_ -->
254 <h1 id="alicevnc">AliceVNC</h1>
255 <ul>
256 <li>画面処理や分散処理が混在する複雑なTreeVNCも、Aliceを用いればTightVNCからの変更が少ない見通しの良い記述で構成可能
257 <img src="./images/AliceVNC.svg" alt="opt" width="50%" /></li>
258 </ul> 196 </ul>
259 197
260 198
261 </div> 199 </div>
262 <div class='slide '> 200 <div class='slide '>
266 204
267 <ul> 205 <ul>
268 <li>TreeTopologyの構成・管理(Topology Manager)</li> 206 <li>TreeTopologyの構成・管理(Topology Manager)</li>
269 <li>ノード間通信の切断時・再接続時の処理(ClosedEventManager)</li> 207 <li>ノード間通信の切断時・再接続時の処理(ClosedEventManager)</li>
270 <li>ノードの接続状態確認(KeepAlive)</li> 208 <li>ノードの接続状態確認(KeepAlive)</li>
271 <li>子ノードへのデータの転送</li> 209 <li>子ノードへのデータの転送(flip)</li>
272 <li>データの圧縮</li> 210 <li>データの圧縮</li>
273 </ul>
274
275
276 </div>
277 <div class='slide '>
278 <!-- _S9SLIDE_ -->
279 <h1 id="dynamic-topology-manager">Dynamic Topology Manager</h1>
280 <ul>
281 <li>Topology Managerを立ちあげ、各ノードはTopology Managerに参加表明をし接続すべきノードの情報を要求する<br />
282 <img src="./pictures/tree1.svg" alt="opt" width="60%" /></li>
283 </ul>
284
285
286 </div>
287 <div class='slide '>
288 <!-- _S9SLIDE_ -->
289 <h1 id="dynamic-topology-manager-1">Dynamic Topology Manager</h1>
290 <ul>
291 <li>Topology Managerは参加表明を受け取った順にTree構造になるよう接続情報を送る<br />
292 <img src="./pictures/tree2.svg" alt="opt" width="60%" /></li>
293 </ul>
294
295
296 </div>
297 <div class='slide '>
298 <!-- _S9SLIDE_ -->
299 <h1 id="dynamic-topology-manager-2">Dynamic Topology Manager</h1>
300 <ul>
301 <li>各ノードが受け取った情報をもとにRemote DSMを立ちあげ接続し合うことでTree構造が作られる<br />
302 <img src="./pictures/tree3.svg" alt="opt" width="60%" /></li>
303 </ul> 211 </ul>
304 212
305 213
306 </div> 214 </div>
307 <div class='slide '> 215 <div class='slide '>
308 <!-- _S9SLIDE_ --> 216 <!-- _S9SLIDE_ -->
309 <h1 id="meta-computation">Meta Computationの追加</h1> 217 <h1 id="meta-computation">Meta Computationの追加</h1>
310 <ul> 218 <ul>
311 <li>TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している</li> 219 <li>TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している</li>
312 <li>画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送</li> 220 <li>画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送</li>
313 <li>再圧縮オーバーヘッドなしにゼロコピー転送する機能が必要</li> 221 <li>圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮 するオーバーヘッドを無くすことができる</li>
314 <li>圧縮のMeta Computationと転送のMeta Computationを追加した</li> 222 <li>圧縮のMeta Computationと転送のMeta Computationを追加した</li>
315 </ul> 223 </ul>
316 224
317 225
318 </div> 226 </div>
319 <div class='slide '> 227 <div class='slide '>
320 <!-- _S9SLIDE_ --> 228 <!-- _S9SLIDE_ -->
321 <h1 id="section-3">転送機能の追加</h1>
322 <ul>
323 <li>AliceではInputDSをReceiverに受け取ったあと、Receiverから任意の型で取り出し、操作してOutputDSとして出力する(コピーする)</li>
324 <li>TreeVNCのように受け取ったデータをそのまま転送したいときには無駄</li>
325 <li>Input DSをそのままOutput DSとしてコピーせず転送できる <strong>flipメソッド</strong> を追加。put/updateと同じように扱える。<br />
326 flip(String managerKey, String key, Receiver receiver)</li>
327 </ul>
328
329
330 </div>
331 <div class='slide '>
332 <!-- _S9SLIDE_ -->
333 <h1 id="meta-ds">圧縮表現(Meta DS)の追加</h1> 229 <h1 id="meta-ds">圧縮表現(Meta DS)の追加</h1>
334 <ul> 230 <ul>
335 <li>DSを複数作るのではなく、1つのDSに対しMeta DSとして以下の表現を同時に持たせる</li> 231 <li>DSを複数作るのではなく、1つのDSに対しMeta DSとして以下の表現を同時に持たせる</li>
336 </ul> 232 </ul>
337 233
338 <table style="border:none;"> 234 <table style="border:none;">
339 <tr><td> 235 <tr><td width="550px">
340 1. 一般的なJavaのオブジェクト<br /> 236 1. 一般的なJavaのオブジェクト<br />
341     LocalDSMにputしたときの形式 <br /> 237  LocalDSMにputしたときの形式 <br />
342 2. MessagePackでシリアライズ化されたバイナリオブジェクト <br /> 238 <br />
343     RemoteDSMにputしたときの形式 <br /> 239 2. シリアライズ化されたバイナリオブジェクト <br />
344 3. 2をさらに圧縮したバイナリオブジェクト <br /> 240  RemoteDSMにputしたときの形式 <br />
345     今回追加した形式 <br /> 241 <br />
242 3. 2を圧縮したバイナリオブジェクト <br />
243  今回追加した形式 <br />
346 </td> 244 </td>
347 <td> 245 <td width="500px">
348 <img src="./pictures/compressDS.svg" width="90%" /> 246 <img src="./pictures/compressDS.svg" width="100%" />
349 </td> 247 </td>
350 </tr> 248 </tr>
351 </table> 249 </table>
352
353
354 </div>
355 <div class='slide '>
356 <!-- _S9SLIDE_ -->
357 <h1 id="messagepack">MessagePackとは</h1>
358 <ul>
359 <li>Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。</li>
360 <li>シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。</li>
361 <li>JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。</li>
362 <li>AliceではJavaオブジェクトへの対応のためにJavassistも用いている。</li>
363 </ul>
364 250
365 251
366 </div> 252 </div>
367 <div class='slide '> 253 <div class='slide '>
368 <!-- _S9SLIDE_ --> 254 <!-- _S9SLIDE_ -->
378 264
379 265
380 </div> 266 </div>
381 <div class='slide '> 267 <div class='slide '>
382 <!-- _S9SLIDE_ --> 268 <!-- _S9SLIDE_ -->
383 <h1 id="section-4">圧縮表現がオンデマンドに作られる</h1> 269 <h1 id="section-3">圧縮表現がオンデマンドに作られる</h1>
384 <ul>
385 <li>NodeAでNodeBのcompressed RemoteDSM に対してDSをput<br />
386 <img src="./pictures/flow1.svg" alt="opt" width="80%" /> </li>
387 </ul>
388
389
390 </div>
391 <div class='slide '>
392 <!-- _S9SLIDE_ -->
393 <h1 id="section-5">圧縮表現がオンデマンドに作られる</h1>
394 <ul>
395 <li>DS が圧縮表現を持っていなければCompressed DSM内部で圧縮表現を生成してput
396 <img src="./pictures/flow2.svg" alt="opt" width="80%" /> </li>
397 </ul>
398
399
400 </div>
401 <div class='slide '>
402 <!-- _S9SLIDE_ -->
403 <h1 id="section-6">圧縮表現がオンデマンドに作られる</h1>
404 <ul>
405 <li>RemoteDSMがAliceの送信パケットをNodeBのLocalDSMに送る<br />
406 <img src="./pictures/flow3.svg" alt="opt" width="80%" /> </li>
407 </ul>
408
409
410 </div>
411 <div class='slide '>
412 <!-- _S9SLIDE_ -->
413 <h1 id="section-7">圧縮表現がオンデマンドに作られる</h1>
414 <ul>
415 <li>NodeBのLocalDSMでは圧縮表現のみのDSとして保存する<br />
416 <img src="./pictures/flow4.svg" alt="opt" width="80%" /></li>
417 </ul>
418
419
420 </div>
421 <div class='slide '>
422 <!-- _S9SLIDE_ -->
423 <h1 id="section-8">圧縮表現がオンデマンドに作られる</h1>
424 <ul>
425 <li>setKey()でtake/peekで呼ばれたらReceiverにDSが渡される<br />
426 <img src="./pictures/flow5.svg" alt="opt" width="80%" /></li>
427 </ul>
428
429
430 </div>
431 <div class='slide '>
432 <!-- _S9SLIDE_ -->
433 <h1 id="section-9">圧縮表現がオンデマンドに作られる</h1>
434 <ul>
435 <li>castメソッドである <strong>asClass()</strong> が解凍・デシリアライズされた表現を作って渡す<br />
436 <img src="./pictures/flow6.svg" alt="opt" width="80%" /></li>
437 </ul>
438
439
440 </div>
441 <div class='slide '>
442 <!-- _S9SLIDE_ -->
443 <h1 id="section-10">圧縮表現がオンデマンドに作られる</h1>
444 <ul> 270 <ul>
445 <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のためにコピーや再圧縮をすることはない。</li> 271 <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のためにコピーや再圧縮をすることはない。</li>
446 <li>複数表現は必要最低限にしか作られない。</li> 272 <li>複数表現は必要最低限にしか作られない。</li>
447 <li>一つのKeyに対し様々な表現のDSが対応するが、asClass()によってユーザーは送られてくるDSの表現を気にせず扱える。 </li> 273 <li>一つのKeyに対し様々な表現のDSが対応するが、キャストメソッドであるasClass()によってユーザーは送られてくるDSの表現を気にせず任意の型で取り出せる。 </li>
448 </ul> 274 </ul>
449 275
450 276
451 </div> 277 </div>
452 <div class='slide '> 278 <div class='slide '>
465 291
466 292
467 </div> 293 </div>
468 <div class='slide '> 294 <div class='slide '>
469 <!-- _S9SLIDE_ --> 295 <!-- _S9SLIDE_ -->
470 <h1 id="section-11">性能比較 - 実験内容</h1> 296 <h1 id="section-4">性能比較 - 実験結果</h1>
471 <ul>
472 <li>木の段数ごとにメッセージの到達にどれぐらい時間がかかっているかを計測</li>
473 <li>講義内で学生に協力してもらい、最大 17 名の接続があった<br />
474 <img src="./pictures/delay.svg" alt="" width="50%" /><img src="./pictures/delay2.svg" alt="" width="50%" /></li>
475 </ul>
476
477
478 </div>
479 <div class='slide '>
480 <!-- _S9SLIDE_ -->
481 <h1 id="section-12">性能比較 - 実験結果</h1>
482 <ul> 297 <ul>
483 <li>3段目の計測結果</li> 298 <li>3段目の計測結果</li>
484 <li>同じ傾向から同等の処理性能があることがわかった </li> 299 <li>同じ傾向から同等の処理性能があることがわかった </li>
485 </ul> 300 </ul>
486 301
497 312
498 313
499 </div> 314 </div>
500 <div class='slide '> 315 <div class='slide '>
501 <!-- _S9SLIDE_ --> 316 <!-- _S9SLIDE_ -->
502 <h1 id="section-13">コード量比較</h1> 317 <h1 id="section-5">コード量比較</h1>
503 <ul> 318 <ul>
504 <li>TightVNCを含む全体の行数・単語数はAliceVNCのほうが少ない</li> 319 <li>TightVNCを含む全体の行数・単語数はAliceVNCのほうが少ない</li>
505 <li>コードの増加量ではTreeVNCに比べ75%仕様の変更が抑えられている </li> 320 <li>コードの増加量ではTreeVNCに比べ75%仕様の変更が抑えられている </li>
506 </ul> 321 </ul>
507 322
532 347
533 348
534 </div> 349 </div>
535 <div class='slide '> 350 <div class='slide '>
536 <!-- _S9SLIDE_ --> 351 <!-- _S9SLIDE_ -->
537 <h1 id="section-14">コード複雑度比較</h1> 352 <h1 id="section-6">コード複雑度比較</h1>
538 <ul> 353 <ul>
539 <li>循環的複雑度を用いる<br /> 354 <li>循環的複雑度を用いる<br />
540 コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。</li> 355 コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。</li>
541 <li>計測にはIntelliJのプラグイン「MetricsReloaded」を使用</li>
542 </ul> 356 </ul>
543 357
544 <table style="border-collapse: collapse;border:1px solid #000000;"> 358 <table style="border-collapse: collapse;border:1px solid #000000;">
545 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th> 359 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
546 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 平均値 </th> 360 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 平均値 </th>
570 384
571 385
572 </div> 386 </div>
573 <div class='slide '> 387 <div class='slide '>
574 <!-- _S9SLIDE_ --> 388 <!-- _S9SLIDE_ -->
575 <h1 id="meta-computation-2">Meta Computationの評価結果</h1> 389 <h1 id="section-7">まとめ</h1>
576 <ul> 390 <ul>
577 <li>AliceVNCはコードの修正量・複雑度共に低く抑えながらTreeVNC と同等の性能を持つ分散アプリケーションを記述する能力があった</li> 391 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、Meta Data Segmentに複数の表現のデータを同時に持たせることで圧縮機能を実装した。同様の手法を用いれば暗号表現などへの対応もでき自由度の高い通信を行うことが可能になる。</li>
578 </ul> 392 <li>TreeVNCをAlice上で実装し比較を行った結果、変更量の少ないシンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した。</li>
579 393 <li>AliceのMeta Computationが拡張性・信頼性の高い実用的な分散アプリケーションの構築に有用であることが確認された。</li>
580 394 </ul>
581 </div> 395
582 <div class='slide '> 396
583 <!-- _S9SLIDE_ --> 397 </div>
584 <h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1> 398 <div class='slide '>
585 <ul> 399 <!-- _S9SLIDE_ -->
586 <li>共通点 400 <h1 id="section-8">今後の課題</h1>
587 <ul> 401 <ul>
588 <li>タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割</li> 402 <li>TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる<br />
589 <li>共有メモリにアクセスするためのメモリロックの仕組みを必要としない</li> 403 <img src="./pictures/overNAT.svg" alt="opt" width="60%" /> </li>
590 </ul> 404 </ul>
591 </li> 405
592 <li>相違点 406
593 <ul> 407 </div>
594 <li>複数のデータの待ち合わせ処理はユーザーが書く</li> 408 <div class='slide '>
595 <li>Topologyの構成等はユーザーが書く</li> 409 <!-- _S9SLIDE_ -->
596 </ul> 410 <h1 id="section-9">今後の課題</h1>
597 </li>
598 </ul>
599
600
601 </div>
602 <div class='slide '>
603 <!-- _S9SLIDE_ -->
604 <h1 id="alice2---akka">Aliceと他言語等との比較(2) - Akka</h1>
605 <ul>
606 <li>共通点
607 <ul>
608 <li>tell/ask が Alice の put/take に対応</li>
609 <li>通信部分等を子アクターで分離し階層化</li>
610 </ul>
611 </li>
612 <li>相違点
613 <ul>
614 <li>データに名前がついていないので何が来るかわかりづらい</li>
615 <li>Actorごとに受け取ったデータの判別処理をユーザーが書く</li>
616 <li>Topologyの構成はユーザーが書かないといけない</li>
617 <li>転送などのオーバーヘッドを考慮したメタプロトコル(Meta DS)が存在しない</li>
618 </ul>
619 </li>
620 </ul>
621
622
623 </div>
624 <div class='slide '>
625 <!-- _S9SLIDE_ -->
626 <h1 id="section-15">まとめ</h1>
627 <ul>
628 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせる圧縮機能やゼロコピー転送の機能を実装した。</li>
629 <li>TreeVNCをAlice上で実装し比較を行った結果、シンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した</li>
630 <li>AliceのMeta Computationが信頼性の高い実 用的な分散アプリケーションの構築に有用であることが確認された</li>
631 </ul>
632
633
634 </div>
635 <div class='slide '>
636 <!-- _S9SLIDE_ -->
637 <h1 id="section-16">今後の課題</h1>
638 <ul> 411 <ul>
639 <li>APIの再設計 412 <li>APIの再設計
640 <ul> 413 <ul>
641 <li>put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい</li> 414 <li>put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい</li>
642 </ul> 415 </ul>
651 <li>圧縮と同様の手法で暗号形式のデータ表現を扱えるように拡張可能</li> 424 <li>圧縮と同様の手法で暗号形式のデータ表現を扱えるように拡張可能</li>
652 </ul> 425 </ul>
653 </li> 426 </li>
654 </ul> 427 </ul>
655 428
656
657 </div>
658 <div class='slide '>
659 <!-- _S9SLIDE_ -->
660 <h1 id="section-17">今後の課題</h1>
661 <ul>
662 <li>TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる<br />
663 <img src="./pictures/overNAT.svg" alt="opt" width="60%" /> </li>
664 </ul>
665
666
667 </div>
668 <div class='slide '>
669 <!-- _S9SLIDE_ -->
670 <h1 id="dynamic-topology-manager-3">Dynamic Topology Manager</h1>
671 <p><img src="./pictures/tree1.svg" alt="" width="33%" /><img src="./pictures/tree2.svg" alt="" width="33%" /><img src="./pictures/tree3.svg" alt="" width="33%" /></p>
672
673
674 </div>
675 <div class='slide '>
676 <!-- _S9SLIDE_ -->
677 <h1 id="codesegment--">CodeSegment の 例</h1>
678 <ul>
679 <li>RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す  
680 <img src="./pictures/remoteTest.svg" alt="opt" width="70%" /></li>
681 </ul>
682
683
684 </div>
685 <div class='slide '>
686 <!-- _S9SLIDE_ -->
687 <h1 id="codesegment---1">CodeSegment の 例</h1>
688 <ul>
689 <li>RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す </li>
690 <li>CSはInputDSを持たないStartCSからはじまる<br />
691 <img src="./pictures/remoteTest2.svg" alt="opt" width="70%" /></li>
692 </ul>
693
694
695 </div>
696 <div class='slide '>
697 <!-- _S9SLIDE_ -->
698 <h1 lang="java" id="startcodesegment">StartCodeSegmentの例</h1>
699 <pre><code>public class RemoteStartCodeSegment extends CodeSegment {
700
701 @Override
702 public void run() {
703 RemoteIncrement cs = new RemoteIncrement();//CSを生成
704 ods.put("local", "num", 0);
705 }
706
707 }
708 </code></pre>
709
710
711 </div>
712 <div class='slide '>
713 <!-- _S9SLIDE_ -->
714 <h1 lang="java" id="startcodesegment-1">StartCodeSegmentの例</h1>
715 <pre><code>public class RemoteStartCodeSegment extends CodeSegment {
716
717 @Override
718 public void run() {
719 RemoteIncrement cs = new RemoteIncrement();
720 ods.put("local", "num", 0);//DSをLocalDSMにput
721 }
722
723 }
724 </code></pre>
725
726
727 </div>
728 <div class='slide '>
729 <!-- _S9SLIDE_ -->
730 <h1 lang="java" id="codesegment---2">CodeSegment の 例</h1>
731 <pre><code>public class RemoteIncrement extends CodeSegment {
732
733 public Receiver num = ids.create(CommandType.TAKE);//DSの受け皿を作る
734
735 public RemoteIncrement(){
736 num.setKey("remote", "num");
737 }
738
739 @Override
740 public void run() {
741 int n = num.asClass(Integer.class);
742 if (n == 10) System.exit(0);
743 RemoteIncrement cs = new RemoteIncrement();
744 ods.put("local", "num", ++n);
745 }
746
747 }
748 </code></pre>
749
750
751 </div>
752 <div class='slide '>
753 <!-- _S9SLIDE_ -->
754 <h1 lang="java" id="codesegment---3">CodeSegment の 例</h1>
755 <pre><code>public class RemoteIncrement extends CodeSegment {
756
757 public Receiver num = ids.create(CommandType.TAKE);
758
759 public RemoteIncrement(){
760 num.setKey("remote", "num");//CSにInputDSをセット。待ち合わせが発生。
761 }
762
763 @Override
764 public void run() {
765 int n = num.asClass(Integer.class);
766 if (n == 10) System.exit(0);
767 RemoteIncrement cs = new RemoteIncrement();
768 ods.put("local", "num", ++n);
769 }
770
771 }
772 </code></pre>
773
774
775 </div>
776 <div class='slide '>
777 <!-- _S9SLIDE_ -->
778 <h1 lang="java" id="codesegment---4">CodeSegment の 例</h1>
779 <pre><code>public class RemoteIncrement extends CodeSegment {
780
781 public Receiver num = ids.create(CommandType.TAKE);
782
783 public RemoteIncrement(){
784 num.setKey("remote", "num");
785 }
786
787 @Override
788 public void run() {
789 int n = num.asClass(Integer.class);//InputDSをキャストして取得
790 if (n == 10) System.exit(0);
791 RemoteIncrement cs = new RemoteIncrement();
792 ods.put("local", "num", ++n);
793 }
794
795 }
796 </code></pre>
797
798
799 </div>
800 <div class='slide '>
801 <!-- _S9SLIDE_ -->
802 <h1 lang="java" id="codesegment---5">CodeSegment の 例</h1>
803 <pre><code>public class RemoteIncrement extends CodeSegment {
804
805 public Receiver num = ids.create(CommandType.TAKE);
806
807 public RemoteIncrement(){
808 num.setKey("remote", "num");
809 }
810
811 @Override
812 public void run() {
813 int n = num.asClass(Integer.class);
814 if (n == 10) System.exit(0);//num=10なら終了
815 RemoteIncrement cs = new RemoteIncrement();
816 ods.put("local", "num", ++n);
817 }
818
819 }
820
821 </code></pre>
822
823
824 </div>
825 <div class='slide '>
826 <!-- _S9SLIDE_ -->
827 <h1 lang="java" id="codesegment---6">CodeSegment の 例</h1>
828 <pre><code>public class RemoteIncrement extends CodeSegment {
829
830 public Receiver num = ids.create(CommandType.TAKE);
831
832 public RemoteIncrement(){
833 num.setKey("remote", "num");
834 }
835
836 @Override
837 public void run() {
838 int n = num.asClass(Integer.class);
839 if (n == 10) System.exit(0);
840 RemoteIncrement cs = new RemoteIncrement();//次のCSを生成
841 ods.put("local", "num", ++n);
842 }
843
844 }
845 </code></pre>
846
847
848 </div>
849 <div class='slide '>
850 <!-- _S9SLIDE_ -->
851 <h1 lang="java" id="codesegment---7">CodeSegment の 例</h1>
852 <pre><code>public class RemoteIncrement extends CodeSegment {
853
854 public Receiver num = ids.create(CommandType.TAKE);
855
856 public RemoteIncrement(){
857 num.setKey("remote", "num");
858 }
859
860 @Override
861 public void run() {
862 int n = num.asClass(Integer.class);
863 if (n == 10) System.exit(0);
864 RemoteIncrement cs = new RemoteIncrement();
865 ods.put("local", "num", ++n);//インクリメントしたDSをput
866 }
867
868 }
869 </code></pre>
870
871 <style type="text/css"> 429 <style type="text/css">
872 <!-- 430 <!--
873 *{ 431 *{
874 font:nomal 100% 'PT Sans'; 432 font:nomal 100% 'PT Sans';
875 } 433 }