comparison presen/sample.html @ 6:edc72425caab

add abstract
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2016 11:25:52 +0900
parents
children 90aaf305aed6
comparison
equal deleted inserted replaced
5:1f36a64a3868 6:edc72425caab
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
5 <title>分散フレームワークAliceのPC画面配信システムへの応用</title>
6
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="照屋のぞみ 河野真治" >
9
10 <!-- style sheet links -->
11 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection">
12 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
13 <link rel="stylesheet" href="s6/themes/print.css" media="print">
14 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
15
16 <!-- JS -->
17 <script src="s6/js/jquery-1.11.3.min.js"></script>
18 <script src="s6/js/jquery.slideshow.js"></script>
19 <script src="s6/js/jquery.slideshow.counter.js"></script>
20 <script src="s6/js/jquery.slideshow.controls.js"></script>
21 <script src="s6/js/jquery.slideshow.footer.js"></script>
22 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
23
24 <!-- prettify -->
25 <link rel="stylesheet" href="scripts/prettify.css">
26 <script src="scripts/prettify.js"></script>
27
28 <script>
29 $(document).ready( function() {
30 Slideshow.init();
31
32 $('code').each(function(_, el) {
33 if (!el.classList.contains('noprettyprint')) {
34 el.classList.add('prettyprint');
35 el.style.display = 'block';
36 }
37 });
38 prettyPrint();
39 } );
40
41
42 </script>
43
44 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
45 <!--[if IE]>
46 <script src="s6/js/jquery.microsoft.js"></script>
47 <![endif]-->
48
49
50
51 </head>
52 <body>
53
54 <div class="layout">
55 <div id="header"></div>
56 <div id="footer">
57 <div align="right">
58 <img src="s6/images/logo.svg" width="200px">
59 </div>
60 </div>
61 </div>
62
63 <div class="presentation">
64
65 <div class='slide cover'>
66 <table width="90%" height="90%" border="0" align="center">
67 <tr>
68 <td>
69 <div align="center">
70 <h1><font color="#808db5">分散フレームワークAliceのPC画面配信システムへの応用</font></h1>
71 </div>
72 </td>
73 </tr>
74 <tr>
75 <td>
76 <div align="left">
77 照屋のぞみ 河野真治
78 琉球大学 工学部 情報工学科
79 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
80 </div>
81 </td>
82 </tr>
83 </table>
84 </div>
85
86 <div class='slide '>
87 <!-- === begin markdown block ===
88
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)
91 using options {}
92 -->
93
94 <!-- _S9SLIDE_ -->
95 <h1 id="section">研究目的(1/3)</h1>
96 <ul>
97 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li>
98 <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。  </li>
99 <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li>
100 </ul>
101
102
103 </div>
104 <div class='slide '>
105 <!-- _S9SLIDE_ -->
106 <h1 id="section-1">研究目的(2/3)</h1>
107 <ul>
108 <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li>
109 <li>分散環境構築などの複雑な処理はAliceがMeta Computationとして提供する</li>
110 <li>仕様を大きく変更することなくプログラムの挙動が変えられる</li>
111 <li>変更前の信頼性を保ったまま拡張可能にする</li>
112 </ul>
113
114
115 </div>
116 <div class='slide '>
117 <!-- _S9SLIDE_ -->
118 <h1 id="section-2">研究目的(3/3)</h1>
119 <ul>
120 <li>本研究では、 Alice上に実用的な分散アプリケーションが制作できることを示すために画面配信システムTreeVNCを構築する。</li>
121 <li>構築するにあたり必要となった機能を洗い出しAliceのMeta Computationとして実装した。</li>
122 <li>もとのTreeVNCとの比較を行うことでMetaComputationの役割と有効性を示す。</li>
123 </ul>
124
125
126 </div>
127 <div class='slide '>
128 <!-- _S9SLIDE_ -->
129 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1>
130 <ul>
131 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li>
132 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li>
133 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。
134 <img src="./images/dsandcs.svg" alt="opt" width="60%" /></li>
135 </ul>
136
137
138 </div>
139 <div class='slide '>
140 <!-- _S9SLIDE_ -->
141 <h1 id="codesegment">CodeSegmentの依存関係</h1>
142 <ul>
143 <li>データの依存関係にないCSは並列実行される</li>
144 <li>データの依存関係がある場合は Input DS が揃うと順に実行される</li>
145 <li>DSはCSに専有されるためロックの記述を必要としない
146 <img src="./images/dsandcs2.svg" alt="opt" width="60%" /></li>
147 </ul>
148
149
150 </div>
151 <div class='slide '>
152 <!-- _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>
165 <ul>
166 <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。 </li>
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>
191 <li>put(String managerKey, String key, Object val) </li>
192 <li>update(String managerKey, String key, Object val) ※先頭DSを削除してからput</li>
193 </ul>
194 </li>
195 <li>DS の取得<br />
196 <ul>
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>
204
205
206 </div>
207 <div class='slide '>
208 <!-- _S9SLIDE_ -->
209 <h1 id="computation--meta-computation">Computation と Meta Computation</h1>
210 <ul>
211 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li>
212 <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li>
213 <li>分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。</li>
214 </ul>
215
216
217 </div>
218 <div class='slide '>
219 <!-- _S9SLIDE_ -->
220 <h1 id="computation--meta-computation-1">Computation と Meta Computation</h1>
221 <ul>
222 <li>DS/CSの接続の間にMeta Computationが実行されている</li>
223 <li>AliceのMeta ComputationもCS/DSにより実現される</li>
224 <li>Meta ComputationはCS の処理を支えるMeta CSとMeta CSに管理されるMeta DSに分けられる
225 <img src="./pictures/MetaCSDS.svg" alt="opt" width="70%" /></li>
226 </ul>
227
228
229 </div>
230 <div class='slide '>
231 <!-- _S9SLIDE_ -->
232 <h1 id="computation--meta-computation-2">Computation と Meta Computation</h1>
233 <ul>
234 <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li>
235 <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li>
236 </ul>
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>
259
260
261 </div>
262 <div class='slide '>
263 <!-- _S9SLIDE_ -->
264 <h1 id="treevnc-1">TreeVNCで必要な機能</h1>
265 <p>TreeVNCのComputation(VNCサーバからデータを受け取り表示)を支える機能をMeta Computationとして実装する </p>
266
267 <ul>
268 <li>TreeTopologyの構成・管理(Topology Manager)</li>
269 <li>ノード間通信の切断時・再接続時の処理(ClosedEventManager)</li>
270 <li>ノードの接続状態確認(KeepAlive)</li>
271 <li>子ノードへのデータの転送</li>
272 <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>
304
305
306 </div>
307 <div class='slide '>
308 <!-- _S9SLIDE_ -->
309 <h1 id="meta-computation">Meta Computationの追加</h1>
310 <ul>
311 <li>TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している</li>
312 <li>画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送</li>
313 <li>再圧縮オーバーヘッドなしにゼロコピー転送する機能が必要</li>
314 <li>圧縮のMeta Computationと転送のMeta Computationを追加した</li>
315 </ul>
316
317
318 </div>
319 <div class='slide '>
320 <!-- _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>
334 <ul>
335 <li>DSを複数作るのではなく、1つのDSに対しMeta DSとして以下の表現を同時に持たせる</li>
336 </ul>
337
338 <table style="border:none;">
339 <tr><td>
340 1. 一般的なJavaのオブジェクト<br />
341     LocalDSMにputしたときの形式 <br />
342 2. MessagePackでシリアライズ化されたバイナリオブジェクト <br />
343     RemoteDSMにputしたときの形式 <br />
344 3. 2をさらに圧縮したバイナリオブジェクト <br />
345     今回追加した形式 <br />
346 </td>
347 <td>
348 <img src="./pictures/compressDS.svg" width="90%" />
349 </td>
350 </tr>
351 </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
365
366 </div>
367 <div class='slide '>
368 <!-- _S9SLIDE_ -->
369 <h1 id="dsmapi">圧縮表現を扱うDSMとAPIの追加</h1>
370 <ul lang="java">
371 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加</li>
372 <li>DSを圧縮したい場合は指定する DSM を Compressed DSM に変える</li>
373 <li>圧縮するコードとしないコードで変更が少ない </li>
374 </ul>
375 <pre><code> put("Remote", "Key", val);
376 put("compressedRemote", "Key", val);  
377 </code></pre>
378
379
380 </div>
381 <div class='slide '>
382 <!-- _S9SLIDE_ -->
383 <h1 id="section-4">圧縮表現がオンデマンドに作られる</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>
445 <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のためにコピーや再圧縮をすることはない。</li>
446 <li>複数表現は必要最低限にしか作られない。</li>
447 <li>一つのKeyに対し様々な表現のDSが対応するが、asClass()によってユーザーは送られてくるDSの表現を気にせず扱える。 </li>
448 </ul>
449
450
451 </div>
452 <div class='slide '>
453 <!-- _S9SLIDE_ -->
454 <h1 id="meta-computation-1">Meta Computationの評価</h1>
455 <p>TreeVNCとAliceVNCを比較した </p>
456
457 <ul>
458 <li>性能比較<br />
459 各ノードへのメッセージの伝達速度を比較<br />
460 同等の性能が実現できたか </li>
461 <li>コード比較<br />
462 コード量・コード複雑度を比較<br />
463 シンプルな記述で仕様の変更が抑えられているか </li>
464 </ul>
465
466
467 </div>
468 <div class='slide '>
469 <!-- _S9SLIDE_ -->
470 <h1 id="section-11">性能比較 - 実験内容</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>
483 <li>3段目の計測結果</li>
484 <li>同じ傾向から同等の処理性能があることがわかった </li>
485 </ul>
486
487 <table style="border:none;">
488 <tr>
489 <td><img src="./pictures/TreeVNC_depth3.svg" width="80%" /></td>
490 <td><img src="./pictures/AliceVNC_compress_depth3.svg" width="80%" /></td>
491 </tr>
492 <tr>
493 <td align="center">TreeVNC</td>
494 <td align="center">AliceVNC</td>
495 </tr>
496 </table>
497
498
499 </div>
500 <div class='slide '>
501 <!-- _S9SLIDE_ -->
502 <h1 id="section-13">コード量比較</h1>
503 <ul>
504 <li>TightVNCを含む全体の行数・単語数はAliceVNCのほうが少ない</li>
505 <li>コードの増加量ではTreeVNCに比べ75%仕様の変更が抑えられている </li>
506 </ul>
507
508 <table style="border-collapse: collapse;border:1px solid #000000;">
509 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
510 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th>
511 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th>
512 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">TightVNCからの変更行数</th>
513 <tr>
514 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
515 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">19502</td>
516 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">73646</td>
517 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">7351</td>
518 </tr>
519 <tr>
520 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC </td>
521 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14647</td>
522 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">59217</td>
523 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">1129</td>
524 </tr>
525 <tr>
526 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 減少率 (%)</td>
527 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">25</td>
528 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">20</td>
529 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">75</td>
530 </tr>
531 </table>
532
533
534 </div>
535 <div class='slide '>
536 <!-- _S9SLIDE_ -->
537 <h1 id="section-14">コード複雑度比較</h1>
538 <ul>
539 <li>循環的複雑度を用いる<br />
540 コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。</li>
541 <li>計測にはIntelliJのプラグイン「MetricsReloaded」を使用</li>
542 </ul>
543
544 <table style="border-collapse: collapse;border:1px solid #000000;">
545 <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>
547 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">最高値</th>
548 <tr>
549 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TightVNC </td>
550 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">13.63</td>
551 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">97</td>
552 </tr>
553 <tr>
554 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
555 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">15.33</td>
556 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">141</td>
557 </tr>
558 <tr>
559 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC</td>
560 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">10.95</td>
561 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">99</td>
562 </tr>
563 </table>
564
565 <ul>
566 <li>AliceVNCのほうがTreeVNCに比べ複雑度が低い</li>
567 <li>TreeVNC で最も複雑度が高いTreeRFBProto.classはデータの待ち合わせ処理や通信処理が入り組んだ複雑なコード</li>
568 <li>AliceVNCで最も複雑度が高いSwingViewerWindow.classは、TightVNCから変更がほとんどないため、AliceVNCの持っている複雑度はTightVNCが元来持っていた複雑度</li>
569 </ul>
570
571
572 </div>
573 <div class='slide '>
574 <!-- _S9SLIDE_ -->
575 <h1 id="meta-computation-2">Meta Computationの評価結果</h1>
576 <ul>
577 <li>AliceVNCはコードの修正量・複雑度共に低く抑えながらTreeVNC と同等の性能を持つ分散アプリケーションを記述する能力があった</li>
578 </ul>
579
580
581 </div>
582 <div class='slide '>
583 <!-- _S9SLIDE_ -->
584 <h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1>
585 <ul>
586 <li>共通点
587 <ul>
588 <li>タスクをプロセスと呼ばれるメモリを共有しないスレッドに分割</li>
589 <li>共有メモリにアクセスするためのメモリロックの仕組みを必要としない</li>
590 </ul>
591 </li>
592 <li>相違点
593 <ul>
594 <li>複数のデータの待ち合わせ処理はユーザーが書く</li>
595 <li>Topologyの構成等はユーザーが書く</li>
596 </ul>
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>
639 <li>APIの再設計
640 <ul>
641 <li>put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい</li>
642 </ul>
643 </li>
644 <li>DSの型情報のマネジメント
645 <ul>
646 <li>型情報がないのでpeek/takeする際にわかりにくい</li>
647 </ul>
648 </li>
649 <li>セキュリティをサポートしていない
650 <ul>
651 <li>圧縮と同様の手法で暗号形式のデータ表現を扱えるように拡張可能</li>
652 </ul>
653 </li>
654 </ul>
655
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">
872 <!--
873 *{
874 font:nomal 100% 'PT Sans';
875 }
876
877 ul > li{
878 list-style-type:disc;
879 }
880
881 .slide h1{
882 text-align:left;
883 color:#777777;
884 font:bold 40px/1.13 'PT Sans', sans-serif;
885 margin-bottom: 50px;
886 }
887
888 div#slide1 h1{
889 text-align:left;
890 color:#777777;
891 font:bold 60px 'PT Sans', sans-serif;
892 margin-bottom: 50px;
893 }
894
895 pre > code{
896 font-family:'Droid Sans Mono', 'Courier New', monospace;
897 }
898
899 img[alt="opt"]{
900 display: block;
901 margin-left: auto;
902 margin-right: auto;
903 }
904
905 img[alt="right"]{
906 margin-right: 0;
907 }
908
909 table {
910 margin-left: auto;
911 margin-right: auto;
912 }
913
914 th {
915 font-size: 120%;
916 }
917 -->
918 </style>
919
920 <!-- === end markdown block === -->
921 </div>
922
923
924 </div><!-- presentation -->
925 </body>
926 </html>