Mercurial > hg > Papers > 2015 > nozomi-sigos
comparison presen/sigOS/sample.html @ 18:20c9082b212d
change2
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2015 18:03:58 +0900 |
parents | 1ac38e2b7572 |
children | a348947a5c61 |
comparison
equal
deleted
inserted
replaced
17:a26eacfb4922 | 18:20c9082b212d |
---|---|
28 <!-- todo: create slide id from header? like a slug in blogs? --> | 28 <!-- todo: create slide id from header? like a slug in blogs? --> |
29 | 29 |
30 <div class="slide" id="2"><div> | 30 <div class="slide" id="2"><div> |
31 <section> | 31 <section> |
32 <header> | 32 <header> |
33 <h1 id="section">研究背景(1/2)</h1> | 33 <h1 id="section">研究目的</h1> |
34 </header> | 34 </header> |
35 <!-- === begin markdown block === | 35 <!-- === begin markdown block === |
36 | 36 |
37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] | 37 generated by markdown/1.2.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0] |
38 on 2015-05-25 00:09:22 +0900 with Markdown engine kramdown (1.5.0) | 38 on 2015-05-25 18:01:27 +0900 with Markdown engine kramdown (1.5.0) |
39 using options {} | 39 using options {} |
40 --> | 40 --> |
41 | 41 |
42 <!-- _S9SLIDE_ --> | 42 <!-- _S9SLIDE_ --> |
43 | 43 |
44 <ul> | 44 <ul> |
45 <li>信頼性とスケーラビリティに優れた分散プログラムをプログラマが一から記述することは容易ではない。</li> | 45 <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li> |
46 <li>本研究室ではデータを <em>Data Segment</em> 、タスクを <em>Code Segment</em> という単位で分割して記述する<strong>並列分散フレームワークAlice</strong>の開発を行っている。</li> | 46 <li>Aliceのメタ計算として、通信が切断した際の処理やデータを圧縮する処理等を提供することで、プログラマがコードを大きく変更することなくプログラムの振る舞いを変えることを可能にする。</li> |
47 <li>Aliceは分散環境の構築のためのAPIが提供されており、スケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。 </li> | |
48 </ul> | 47 </ul> |
49 | 48 |
50 | 49 |
51 | 50 |
52 </section> | 51 </section> |
53 </div></div> | 52 </div></div> |
54 | 53 |
55 <div class="slide" id="3"><div> | 54 <div class="slide" id="3"><div> |
56 <section> | 55 <section> |
57 <header> | 56 <header> |
58 <h1 id="section-1">研究背景(1/2)</h1> | 57 <h1 id="data-segment--code-segment">Data Segment と Code Segment</h1> |
59 </header> | 58 </header> |
60 <!-- _S9SLIDE_ --> | 59 <!-- _S9SLIDE_ --> |
61 | 60 |
62 <ul> | 61 <ul> |
63 <li>水族館の例題等において、Aliceが分散プログラムを記述する能力を有することは確認された。</li> | 62 <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割してプログラミングを行う。</li> |
64 <li>実用的な分散プログラムを作成するためには、圧縮形式のデータで通信する機能等が必要だとわかった。</li> | 63 <li>AliceはJavaで実装されており、CS をユーザーが記述する際には CodeSegment.class を継承することで CS で使用する API を利用する事ができる。</li> |
64 <li>DSはAliceが内部にもつデータベースにより管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li> | |
65 </ul> | 65 </ul> |
66 | 66 |
67 | 67 |
68 | 68 |
69 </section> | 69 </section> |
70 </div></div> | 70 </div></div> |
71 | 71 |
72 <div class="slide" id="4"><div> | 72 <div class="slide" id="4"><div> |
73 <section> | 73 <section> |
74 <header> | 74 <header> |
75 <h1 id="section-2">研究目的</h1> | 75 <h1 id="data-segment--code-segment-1">Data Segment と Code Segment</h1> |
76 </header> | 76 </header> |
77 <!-- _S9SLIDE_ --> | 77 <!-- _S9SLIDE_ --> |
78 | 78 |
79 <ul> | 79 <ul> |
80 <li>Aliceに圧縮機能等を追加することにより、Data Segmentの多態性を実現しノード間通信における自由度の向上を図る。 </li> | 80 <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li> |
81 <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 | |
82 <img src="./images/dsandcs.svg" alt="opt" /></li> | |
81 </ul> | 83 </ul> |
82 | 84 |
83 | 85 |
84 | 86 |
85 </section> | 87 </section> |
86 </div></div> | 88 </div></div> |
87 | 89 |
88 <div class="slide" id="5"><div> | 90 <div class="slide" id="5"><div> |
89 <section> | 91 <section> |
90 <header> | 92 <header> |
91 <h1 id="alice1---data-segment">Aliceの概要(1) - Data Segment</h1> | 93 <h1 id="codesegment">CodeSegmentの依存関係</h1> |
92 </header> | 94 </header> |
93 <!-- _S9SLIDE_ --> | 95 <!-- _S9SLIDE_ --> |
94 | 96 |
95 <ul> | 97 <ul> |
96 <li>複数の関係のない要素を1つのデータオブジェクトで表現した場合、全ての操作でlockが必要になり、スケラビリティーを低下させる。</li> | 98 <li>データの依存関係にないCSは並列実行される</li> |
97 <li>Alice はデータを細かく分割して記述する。その分割されたデータを <strong>Data Segment(DS)</strong> と呼ぶ。</li> | 99 <li>データの依存関係がある場合は Input DS が揃うと順に実行される |
100 <img src="./images/dsandcs2.svg" alt="opt" /></li> | |
98 </ul> | 101 </ul> |
99 | 102 |
100 | 103 |
101 | 104 |
102 </section> | 105 </section> |
103 </div></div> | 106 </div></div> |
104 | 107 |
105 <div class="slide" id="6"><div> | 108 <div class="slide" id="6"><div> |
106 <section> | 109 <section> |
107 <header> | 110 <header> |
108 <h1 id="alice2---data-segment-manager">Aliceの概要(2) - Data Segment Manager</h1> | 111 <h1 id="data-segment">Data Segment</h1> |
109 </header> | 112 </header> |
110 <!-- _S9SLIDE_ --> | 113 <!-- _S9SLIDE_ --> |
111 | 114 |
112 <ul> | 115 <ul> |
113 <li>DS は queue に保存される。queue には対 になる key し、 key を指定して DS の保存、取得を行う。</li> | 116 <li>整数や文字列などの基本的なデータの集まり</li> |
114 <li>queue の集合体であるデータベースデータベースを Alice では DS Manager(DSM) と呼ぶ。<br /> | 117 <li>Aliceの場合はJavaオブジェクトに対応</li> |
115 <img src="./pictures/dsm.svg" alt="opt" /></li> | |
116 </ul> | 118 </ul> |
117 | 119 |
118 | 120 |
119 | 121 |
120 </section> | 122 </section> |
121 </div></div> | 123 </div></div> |
122 | 124 |
123 <div class="slide" id="7"><div> | 125 <div class="slide" id="7"><div> |
124 <section> | 126 <section> |
125 <header> | 127 <header> |
126 <h1 id="alice2---data-segment-manager-1">Aliceの概要(2) - Data Segment Manager</h1> | 128 <h1 id="data-segment-manager">Data Segment Manager</h1> |
127 </header> | 129 </header> |
128 <!-- _S9SLIDE_ --> | 130 <!-- _S9SLIDE_ --> |
129 | 131 |
132 <ul> | |
133 <li>DS の集合体であるデータベースを Alice では DS Manager(DSM) と呼ぶ。 </li> | |
134 <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li> | |
135 <li>DS の追加<br /> | |
136 put(String managerKey, String key, Object val) </li> | |
137 <li>DS の取得<br /> | |
138 take(String managerKey, String key) </li> | |
139 </ul> | |
140 | |
141 <!--![opt](./images/dsm.svg)--> | |
142 | |
143 | |
144 | |
145 </section> | |
146 </div></div> | |
147 | |
148 <div class="slide" id="8"><div> | |
149 <section> | |
150 <header> | |
151 <h1 id="data-segment-manager-1">Data Segment Manager</h1> | |
152 </header> | |
153 <!-- _S9SLIDE_ --> | |
154 | |
155 <img src="./images/remote_datasegment.svg" alt="opt" width="450px" rightmargin="0"/></li> | |
130 <ul> | 156 <ul> |
131 <li>Local DSM … 各ノード固有のデータベース。</li> | 157 <li>Local DSM … 各ノード固有のデータベース。</li> |
132 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在。<br /> | 158 <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br /> |
133 <img src="./images/remote_datasegment.svg" alt="opt" width="450px" /></li> | 159 </ul> |
134 </ul> | 160 |
135 | 161 |
136 | 162 |
137 | 163 </section> |
138 </section> | 164 </div></div> |
139 </div></div> | 165 |
140 | 166 <div class="slide" id="9"><div> |
141 <div class="slide" id="8"><div> | 167 <section> |
142 <section> | 168 <header> |
143 <header> | 169 <h1 id="data-segment-">Data Segment の表現</h1> |
144 <h1 id="alice3---data-segment-api">Aliceの概要(3) - Data Segment API</h1> | 170 </header> |
145 </header> | 171 <!-- _S9SLIDE_ --> |
146 <!-- _S9SLIDE_ --> | 172 |
147 | 173 <ul> |
148 <p>DSMに対して以下のコマンドを送り操作できる </p> | 174 <li>DSは複数の表現を同時に持っており、現在は3種類の表現がある。 |
175 <ol> | |
176 <li>一般的な Java のクラスオブジェクト</li> | |
177 <li>MessagePack for Java でシリアライズ化されたバイナリオブジェクト。Remoteとの通信の際に用いる。</li> | |
178 <li>2 を圧縮したバイナリオブジェクト。圧縮機能の一部として今回追加。 </li> | |
179 </ol> | |
180 </li> | |
181 </ul> | |
182 | |
183 | |
184 | |
185 </section> | |
186 </div></div> | |
187 | |
188 <div class="slide" id="10"><div> | |
189 <section> | |
190 <header> | |
191 <h1 id="messagepack">MessagePackとは</h1> | |
192 </header> | |
193 <!-- _S9SLIDE_ --> | |
194 | |
195 <ul> | |
196 <li>Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。</li> | |
197 <li>シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。</li> | |
198 <li>JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。</li> | |
199 </ul> | |
200 | |
201 | |
202 | |
203 </section> | |
204 </div></div> | |
205 | |
206 <div class="slide" id="11"><div> | |
207 <section> | |
208 <header> | |
209 <h1 id="cs--input-ds-">CS と Input DS の対応付け</h1> | |
210 </header> | |
211 <!-- _S9SLIDE_ --> | |
212 | |
213 <ul> | |
214 <li>setKey()にtakeコマンドをセットすることで Input DS を指定する</li> | |
215 <li>実際にtakeしたデータを参照するときには、asClass()を用いて任意のJavaのオブジェクトとして扱えるようにする </li> | |
216 </ul> | |
217 | |
218 | |
219 | |
220 </section> | |
221 </div></div> | |
222 | |
223 <div class="slide" id="12"><div> | |
224 <section> | |
225 <header> | |
226 <h1 id="cs--">CS の 例</h1> | |
227 </header> | |
228 <!-- _S9SLIDE_ --> | |
229 | |
230 <p lang="java">RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す</p> | |
231 <pre><code>public class RemoteIncrement extends CodeSegment { | |
232 | |
233 public Receiver num = ids.create(CommandType.TAKE); | |
234 | |
235 @Override | |
236 public void run() { | |
237 int num = this.num.asClass(Integer.class); | |
238 if (num == 10) System.exit(0); | |
239 | |
240 RemoteIncrement cs = new RemoteIncrement(); | |
241 cs.num.setKey("remote", "num"); | |
242 | |
243 ods.put("local", "num", num); | |
244 } | |
245 | |
246 } | |
247 </code></pre> | |
248 | |
249 | |
250 | |
251 </section> | |
252 </div></div> | |
253 | |
254 <div class="slide" id="13"><div> | |
255 <section> | |
256 <header> | |
257 <h1 id="treevnc">TreeVNC</h1> | |
258 </header> | |
259 <!-- _S9SLIDE_ --> | |
260 | |
261 <ul> | |
262 <li>Aliceを用いて実装する実用的な分散プログラムの例題</li> | |
263 <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム</li> | |
264 <li>TightVNCがもとになっている<br /> | |
265 <img src="./images/treeVNC.svg" alt="opt" /></li> | |
266 </ul> | |
267 | |
268 | |
269 | |
270 </section> | |
271 </div></div> | |
272 | |
273 <div class="slide" id="14"><div> | |
274 <section> | |
275 <header> | |
276 <h1 id="computation">Computation</h1> | |
277 </header> | |
278 <!-- _S9SLIDE_ --> | |
279 | |
280 <ul> | |
281 <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li> | |
282 <li>Alice の Computationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li> | |
283 <li>TreeVNC の Computationは、VNCサーバからデータを受け取って表示する処理。</li> | |
284 </ul> | |
285 | |
286 | |
287 | |
288 </section> | |
289 </div></div> | |
290 | |
291 <div class="slide" id="15"><div> | |
292 <section> | |
293 <header> | |
294 <h1 id="meta-computation">Meta Computation</h1> | |
295 </header> | |
296 <!-- _S9SLIDE_ --> | |
297 | |
298 <ul> | |
299 <li>通信の切断・再接続時の処理や分散トポロジーの構成、データの表現形式の選択など、Computationを支えている処理。</li> | |
300 <li>TreeVNCの場合、VNCサーバのデータを各VNCノードにコピーする処理。</li> | |
301 <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li> | |
302 </ul> | |
303 | |
304 | |
305 | |
306 </section> | |
307 </div></div> | |
308 | |
309 <div class="slide" id="16"><div> | |
310 <section> | |
311 <header> | |
312 <h1 id="treevncalicemeta-computation">TreeVNCで用いるAliceのMeta Computation</h1> | |
313 </header> | |
314 <!-- _S9SLIDE_ --> | |
315 | |
316 <ul> | |
317 <li>TreeTopologyの構成</li> | |
318 <li>ノード間通信の切断時・再接続時の処理</li> | |
319 <li>データの圧縮</li> | |
320 <li>子ノードへのデータの複製</li> | |
321 </ul> | |
322 | |
323 | |
324 | |
325 </section> | |
326 </div></div> | |
327 | |
328 <div class="slide" id="17"><div> | |
329 <section> | |
330 <header> | |
331 <h1 id="dsmapi">データの転送 - DSMとAPIの追加</h1> | |
332 </header> | |
333 <!-- _S9SLIDE_ --> | |
334 | |
335 <ul> | |
336 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加。</li> | |
337 <li>指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる<br /> | |
338 put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br /> | |
339 take(String <strong>“compressed”</strong> + managerKey, String key) </li> | |
340 </ul> | |
341 | |
342 | |
343 | |
344 </section> | |
345 </div></div> | |
346 | |
347 <div class="slide" id="18"><div> | |
348 <section> | |
349 <header> | |
350 <h1 id="section-1">データの転送 - データ表現の自動生成</h1> | |
351 </header> | |
352 <!-- _S9SLIDE_ --> | |
353 | |
354 <ul> | |
355 <li>DS が圧縮表現を持っていれはそれをそのまま子ノードにputする</li> | |
356 <li>持っていなければその時点でCompressed DSM内部で圧縮表現を生成してputする</li> | |
357 <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを伸長をした後、転送のために再圧縮することはない。</li> | |
358 </ul> | |
359 | |
360 | |
361 | |
362 </section> | |
363 </div></div> | |
364 | |
365 <div class="slide" id="19"><div> | |
366 <section> | |
367 <header> | |
368 <h1 id="section-2">データの受け取り - 任意の形式での取得</h1> | |
369 </header> | |
370 <!-- _S9SLIDE_ --> | |
371 | |
372 <ul> | |
373 <li>圧縮表現で画面データ受け取り、Compressed DSM 内に格納。</li> | |
374 <li>TightVNCが画面表示のためにデータを必要としたときに、 asClass() を用いて任意の形式でデータを取り出す。</li> | |
375 <li>asClass() は DS のcastメソッドであり、内部で伸長と MessagePack での変換を行う。</li> | |
376 </ul> | |
377 | |
378 | |
379 | |
380 </section> | |
381 </div></div> | |
382 | |
383 <div class="slide" id="20"><div> | |
384 <section> | |
385 <header> | |
386 <h1 id="alice">データの受け取り - Aliceの通信パケット変更</h1> | |
387 </header> | |
388 <!-- _S9SLIDE_ --> | |
389 | |
390 <ul> | |
391 <li>通信ヘッダにデータの状態を表すフラグを追加したことで、受け取ったデータを適切な形式でDSM内に格納できる。</li> | |
392 <li>圧縮前と圧縮後のデータサイズを入れたことにより、受け取ったデータの適切な伸長が可能。</li> | |
393 </ul> | |
149 | 394 |
150 <table style="border-collapse: collapse;border:1px solid #000000;"> | 395 <table style="border-collapse: collapse;border:1px solid #000000;"> |
151 <tr> | |
152 <td style="border:1px solid #000000;"> put</td> | |
153 <td style="border:1px solid #000000;">データを追加する</td> | |
154 </tr> | |
155 <tr> | |
156 <td style="border:1px solid #000000;"> update </td> | |
157 <td style="border:1px solid #000000;">データを更新する</td> | |
158 </tr> | |
159 <tr> | |
160 <td style="border:1px solid #000000;"> peek</td> | |
161 <td style="border:1px solid #000000;">データを取得する</td> | |
162 </tr> | |
163 <tr> | |
164 <td style="border:1px solid #000000;"> take</td> | |
165 <td style="border:1px solid #000000;">データを取得する。取得したデータはDSMから削除される。</td> | |
166 </tr> | |
167 </table> | |
168 | |
169 | |
170 | |
171 </section> | |
172 </div></div> | |
173 | |
174 <div class="slide" id="9"><div> | |
175 <section> | |
176 <header> | |
177 <h1 id="alice4---data-segment-">Aliceの概要(4) - Data Segment の表現</h1> | |
178 </header> | |
179 <!-- _S9SLIDE_ --> | |
180 | |
181 <ul> | |
182 <li>一般的な Java のクラスオブジェクト | |
183 <ul> | |
184 <li>LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。</li> | |
185 </ul> | |
186 </li> | |
187 <li>MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト | |
188 <ul> | |
189 <li>RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。</li> | |
190 </ul> | |
191 </li> | |
192 </ul> | |
193 | |
194 | |
195 | |
196 </section> | |
197 </div></div> | |
198 | |
199 <div class="slide" id="10"><div> | |
200 <section> | |
201 <header> | |
202 <h1 id="alice5---code-segment">Aliceの概要(5) - Code Segment</h1> | |
203 </header> | |
204 <!-- _S9SLIDE_ --> | |
205 | |
206 <ul> | |
207 <li>Alice上で実行されるタスクの単位を <strong>Code Segment(CS)</strong> と呼ぶ。</li> | |
208 <li>複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。</li> | |
209 <li>CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。</li> | |
210 </ul> | |
211 | |
212 | |
213 | |
214 </section> | |
215 </div></div> | |
216 | |
217 <div class="slide" id="11"><div> | |
218 <section> | |
219 <header> | |
220 <h1 id="alice5---code-segment-1">Aliceの概要(5) - Code Segment</h1> | |
221 </header> | |
222 <!-- _S9SLIDE_ --> | |
223 | |
224 <ul> | |
225 <li>入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。</li> | |
226 <li>keyで指定されたDSが揃うと実行されるという性質を持つ。 | |
227 <img src="./images/dsandcs.svg" alt="opt" /></li> | |
228 </ul> | |
229 | |
230 | |
231 | |
232 </section> | |
233 </div></div> | |
234 | |
235 <div class="slide" id="12"><div> | |
236 <section> | |
237 <header> | |
238 <h1 id="alice6---codesegment">Aliceの概要(6) - CodeSegmentの依存関係</h1> | |
239 </header> | |
240 <!-- _S9SLIDE_ --> | |
241 | |
242 <ul> | |
243 <li>データの依存関係にないCSは並列実行される</li> | |
244 <li>データの依存関係がある場合は依存を解決した順に実行される</li> | |
245 <li>並列度あげるために、処理を細かく記述し、依存するDSを少なくする | |
246 <img src="./images/dsandcs2.svg" alt="opt" /></li> | |
247 </ul> | |
248 | |
249 | |
250 | |
251 </section> | |
252 </div></div> | |
253 | |
254 <div class="slide" id="13"><div> | |
255 <section> | |
256 <header> | |
257 <h1 id="alicemeta-computation12">AliceのMeta Computation(1/2)</h1> | |
258 </header> | |
259 <!-- _S9SLIDE_ --> | |
260 | |
261 <ul> | |
262 <li>並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。</li> | |
263 <li>Aliceではプログラマが記述する部分を <em>Computation</em>、Aliceが提供するComputationを支える部分を <em>Meta Computation</em> として分けて捉えている。</li> | |
264 <li>分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。</li> | |
265 </ul> | |
266 | |
267 | |
268 | |
269 </section> | |
270 </div></div> | |
271 | |
272 <div class="slide" id="14"><div> | |
273 <section> | |
274 <header> | |
275 <h1 id="alicemeta-computation22">AliceのMeta Computation(2/2)</h1> | |
276 </header> | |
277 <!-- _S9SLIDE_ --> | |
278 | |
279 <ul> | |
280 <li>AliceのComputation | |
281 <ul> | |
282 <li>keyによりData Segmentを待ち合わせてCode Segmentを実行する</li> | |
283 </ul> | |
284 </li> | |
285 <li>AliceのMeta Computation | |
286 <ul> | |
287 <li>Javaで記述したAliceの実装システム</li> | |
288 </ul> | |
289 </li> | |
290 <li>Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる</li> | |
291 <li>Meta Computation も CS と DS により表現される。</li> | |
292 </ul> | |
293 | |
294 | |
295 | |
296 </section> | |
297 </div></div> | |
298 | |
299 <div class="slide" id="15"><div> | |
300 <section> | |
301 <header> | |
302 <h1 id="alicevnc">AliceVNC</h1> | |
303 </header> | |
304 <!-- _S9SLIDE_ --> | |
305 | |
306 <ul> | |
307 <li>研究室では授業向け画面共有システムTreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う | |
308 <img src="./images/treeVNC.svg" alt="opt" /></li> | |
309 </ul> | |
310 | |
311 | |
312 | |
313 </section> | |
314 </div></div> | |
315 | |
316 <div class="slide" id="16"><div> | |
317 <section> | |
318 <header> | |
319 <h1 id="alice-">Alice の新機能</h1> | |
320 </header> | |
321 <!-- _S9SLIDE_ --> | |
322 | |
323 <ul> | |
324 <li>Alice が実用的なアプリケーションを記述する能力をもつことを確認するため、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。</li> | |
325 <li>AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。<br /> | |
326 <ul> | |
327 <li>転送機能 … Input DS を Output DS として転送する</li> | |
328 <li>圧縮機能 … DS Manager の指定によってDSの表現を切り替える</li> | |
329 </ul> | |
330 </li> | |
331 </ul> | |
332 | |
333 | |
334 | |
335 </section> | |
336 </div></div> | |
337 | |
338 <div class="slide" id="17"><div> | |
339 <section> | |
340 <header> | |
341 <h1 id="section-3">転送機能</h1> | |
342 </header> | |
343 <!-- _S9SLIDE_ --> | |
344 | |
345 <ul> | |
346 <li>通常、Input DSに変更を加えOutput DSとして出力する場合DSのコピーが行われる。</li> | |
347 <li>AliceVNCのようにInput DS をそのまま子ノードに Output DS として出力する場合、コピーを行なうのは無駄。</li> | |
348 <li>Input DSをコピーせずそのままOutput DSに渡すMeta Computationとして転送機能を実装した。</li> | |
349 </ul> | |
350 | |
351 | |
352 | |
353 </section> | |
354 </div></div> | |
355 | |
356 <div class="slide" id="18"><div> | |
357 <section> | |
358 <header> | |
359 <h1 lang="java" id="section-4">転送機能</h1> | |
360 </header> | |
361 <!-- _S9SLIDE_ --> | |
362 | |
363 <pre><code> public void flip(Receiver receiver) { | |
364 DataSegment.getLocal().put(receiver.key, receiver.getReceiveData(), null); | |
365 } | |
366 </code></pre> | |
367 | |
368 | |
369 | |
370 </section> | |
371 </div></div> | |
372 | |
373 <div class="slide" id="19"><div> | |
374 <section> | |
375 <header> | |
376 <h1 id="section-5">圧縮機能</h1> | |
377 </header> | |
378 <!-- _S9SLIDE_ --> | |
379 | |
380 <ul> | |
381 <li>AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。</li> | |
382 <li>ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。</li> | |
383 <li>圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。</li> | |
384 </ul> | |
385 | |
386 | |
387 | |
388 </section> | |
389 </div></div> | |
390 | |
391 <div class="slide" id="20"><div> | |
392 <section> | |
393 <header> | |
394 <h1 id="data-segment">圧縮機能 - Data Segmentの表現の変更</h1> | |
395 </header> | |
396 <!-- _S9SLIDE_ --> | |
397 | |
398 <p>1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。 | |
399 1. 一般的な Java のクラスオブジェクト | |
400 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト | |
401 3. 2 を圧縮したバイナリオブジェクト</p> | |
402 | |
403 | |
404 | |
405 </section> | |
406 </div></div> | |
407 | |
408 <div class="slide" id="21"><div> | |
409 <section> | |
410 <header> | |
411 <h1 lang="java" id="data-segment-1">圧縮機能 - Data Segmentの表現の変更</h1> | |
412 </header> | |
413 <!-- _S9SLIDE_ --> | |
414 | |
415 <pre><code> public class ReceiveData { | |
416 private Object val = null; | |
417 private byte[] messagePack = null; | |
418 private byte[] zMessagePack = null; | |
419 } | |
420 </code></pre> | |
421 | |
422 | |
423 | |
424 </section> | |
425 </div></div> | |
426 | |
427 <div class="slide" id="22"><div> | |
428 <section> | |
429 <header> | |
430 <h1 id="dsm">圧縮機能 - DSMの追加</h1> | |
431 </header> | |
432 <!-- _S9SLIDE_ --> | |
433 | |
434 <ul> | |
435 <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。</li> | |
436 <li>Compressed DSM にputする場合 | |
437 <ul> | |
438 <li>DS が圧縮表現を持っていればそれをputする</li> | |
439 <li>持っていなければその時点で圧縮表現を作ってputする</li> | |
440 </ul> | |
441 </li> | |
442 </ul> | |
443 | |
444 | |
445 | |
446 </section> | |
447 </div></div> | |
448 | |
449 <div class="slide" id="23"><div> | |
450 <section> | |
451 <header> | |
452 <h1 id="ds">圧縮機能 - 任意の表現でDSを取得</h1> | |
453 </header> | |
454 <!-- _S9SLIDE_ --> | |
455 | |
456 <ul lang="java"> | |
457 <li>ReceiveData内にあるDSのcastメソッドであるasClass()を用いる</li> | |
458 </ul> | |
459 <pre><code> public <T> T asClass(Class<T> clazz) { | |
460 if (val != null) { return (T) val; } | |
461 | |
462 if (zMessagePack != null && messagePack == null) { | |
463 messagePack = unzip(zMessagePack, dataSize); | |
464 } | |
465 | |
466 return packer.read(messagePack, clazz); | |
467 } | |
468 </code></pre> | |
469 | |
470 | |
471 | |
472 </section> | |
473 </div></div> | |
474 | |
475 <div class="slide" id="24"><div> | |
476 <section> | |
477 <header> | |
478 <h1 id="api">圧縮機能 - API設計</h1> | |
479 </header> | |
480 <!-- _S9SLIDE_ --> | |
481 | |
482 <p>通常のデータを扱う場合<br /> | |
483 * put(String managerKey, String key, Object val)<br /> | |
484 * take(String managerKey, String key)</p> | |
485 | |
486 <p>圧縮表現のデータを扱う場合<br /> | |
487 * put(String <strong>“compressed”</strong> + managerKey, String key, Object val)<br /> | |
488 * take(String <strong>“compressed”</strong> + managerKey, String key)</p> | |
489 | |
490 | |
491 | |
492 </section> | |
493 </div></div> | |
494 | |
495 <div class="slide" id="25"><div> | |
496 <section> | |
497 <header> | |
498 <h1 id="section-6">圧縮機能 - 通信プロトコルの変更</h1> | |
499 </header> | |
500 <!-- _S9SLIDE_ --> | |
501 | |
502 <ul> | |
503 <li>Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。</li> | |
504 <li>圧縮した byteArray の追加により、Remote から put された byteArray が圧縮されているのか判断する必要がある。</li> | |
505 </ul> | |
506 | |
507 | |
508 | |
509 </section> | |
510 </div></div> | |
511 | |
512 <div class="slide" id="26"><div> | |
513 <section> | |
514 <header> | |
515 <h1 id="section-7">圧縮機能 - 通信プロトコルの変更</h1> | |
516 </header> | |
517 <!-- _S9SLIDE_ --> | |
518 | |
519 <ul> | |
520 <li>Alice の通信におけるヘッダにあたる CommandMessage.classに <strong>シリアライズ状態表すフラグ</strong>と、<strong>圧縮状態を表すフラク</strong> を追加</li> | |
521 <li>これにより put された DSM はフラグに応じた適切な形式で格納できる。</li> | |
522 </ul> | |
523 | |
524 | |
525 | |
526 </section> | |
527 </div></div> | |
528 | |
529 <div class="slide" id="27"><div> | |
530 <section> | |
531 <header> | |
532 <h1 id="section-8">圧縮機能 - 通信プロトコルの変更</h1> | |
533 </header> | |
534 <!-- _S9SLIDE_ --> | |
535 | |
536 | |
537 <pre lang="java"><code> public class CommandMessage { | |
538 public int type; | |
539 public int seq; | |
540 public String key; | |
541 public boolean quickFlag = false; | |
542 public boolean serialized = false; | |
543 public boolean compressed = false; | |
544 public int dataSize = 0; | |
545 } | |
546 </code></pre> | |
547 <p></p> | |
548 | |
549 | |
550 | |
551 </section> | |
552 </div></div> | |
553 | |
554 <div class="slide" id="28"><div> | |
555 <section> | |
556 <header> | |
557 <h1 id="section-9">圧縮機能 - 通信プロトコルの変更</h1> | |
558 </header> | |
559 <!-- _S9SLIDE_ --> | |
560 | |
561 <table style="border-collapse: collapse;border:1px solid #000000;"> | |
562 <tr> | |
563 <td style="border:1px solid #000000;"> type</td> | |
564 <td style="border:1px solid #000000;">CommandType PEEK, PUT などを表す</td> | |
565 </tr> | |
566 <tr> | |
567 <td style="border:1px solid #000000;"> seq </td> | |
568 <td style="border:1px solid #000000;">DS の待ち合わせを行っている CS を表す unique number</td> | |
569 </tr> | |
570 <tr> | |
571 <td style="border:1px solid #000000;"> key </td> | |
572 <td style="border:1px solid #000000;">どの Key に対して操作を行うか指定する</td> | |
573 </tr> | |
574 <tr> | |
575 <td style="border:1px solid #000000;"> quickFlag </td> | |
576 <td style="border:1px solid #000000;">SEDA を挟まず Command を処理を行うかを示す</td> | |
577 </tr> | |
578 <tr> | |
579 <td style="border:1px solid #000000;"> serialized </td> | 396 <td style="border:1px solid #000000;"> serialized </td> |
580 <td style="border:1px solid #000000;">データ本体のシリアライズ状態を示す</td> | 397 <td style="border:1px solid #000000;">データ本体のシリアライズ状態を示す</td> |
581 </tr> | 398 |
582 <tr> | 399 <tr> |
583 <td style="border:1px solid #000000;"> compressed </td> | 400 <td style="border:1px solid #000000;"> compressed </td> |
584 <td style="border:1px solid #000000;">データ本体の圧縮状態を示す</td> | 401 <td style="border:1px solid #000000;">データ本体の圧縮状態を示す</td> |
585 </tr> | 402 </tr> |
586 <tr> | 403 <tr> |
404 <td style="border:1px solid #000000;"> objectDataSize </td> | |
405 <td style="border:1px solid #000000;">圧縮前のオブジェクトのデータサイズを表す</td> | |
406 </tr> | |
407 <tr> | |
587 <td style="border:1px solid #000000;"> dataSize </td> | 408 <td style="border:1px solid #000000;"> dataSize </td> |
588 <td style="border:1px solid #000000;">圧縮前のデータサイズを表す</td> | 409 <td style="border:1px solid #000000;">送信するDSのデータサイズを表す</td> |
589 </tr> | 410 </tr> |
590 </table> | 411 </table> |
591 | 412 |
592 | 413 |
593 | 414 |
594 </section> | 415 </section> |
595 </div></div> | 416 </div></div> |
596 | 417 |
597 <div class="slide" id="29"><div> | 418 <div class="slide" id="21"><div> |
598 <section> | 419 <section> |
599 <header> | 420 <header> |
600 <h1 id="section-10">圧縮機能の評価</h1> | 421 <h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1> |
601 </header> | 422 </header> |
602 <!-- _S9SLIDE_ --> | 423 <!-- _S9SLIDE_ --> |
603 | 424 |
604 <p>RingRelayTest<br /> | 425 <ul> |
605 <img src="./images/topologyring.svg" alt="opt" /></p> | 426 <li> |
606 | 427 <p>ネットワークに依存しない通信が可能</p> |
607 | 428 </li> |
608 | 429 <li> |
609 </section> | 430 <p>Topologyは自分で管理</p> |
610 </div></div> | 431 </li> |
611 | 432 </ul> |
612 <div class="slide" id="30"><div> | 433 |
613 <section> | 434 |
614 <header> | 435 |
615 <h1 id="section-11">まとめ</h1> | 436 </section> |
616 </header> | 437 </div></div> |
617 <!-- _S9SLIDE_ --> | 438 |
618 | 439 <div class="slide" id="22"><div> |
619 <ul> | 440 <section> |
620 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。</li> | 441 <header> |
442 <h1 id="alice1---linda">Aliceと他言語等との比較(1) - Linda</h1> | |
443 </header> | |
444 <!-- _S9SLIDE_ --> | |
445 | |
446 <ul> | |
447 <li>keyでタプルというデータの集合を管理している</li> | |
448 <li> | |
449 <p>in/outでAliceのput/takeに対応する操作を行う</p> | |
450 </li> | |
451 <li>タスクはinで単一のタプルを待つ</li> | |
452 <li>MetaComputationがない</li> | |
453 </ul> | |
454 | |
455 | |
456 | |
457 </section> | |
458 </div></div> | |
459 | |
460 <div class="slide" id="23"><div> | |
461 <section> | |
462 <header> | |
463 <h1 id="alice1---corba">Aliceと他言語等との比較(1) - Corba</h1> | |
464 </header> | |
465 <!-- _S9SLIDE_ --> | |
466 | |
467 <ul> | |
468 <li> | |
469 <p>オブジェクト間のRPC</p> | |
470 </li> | |
471 <li>DSがない。keyという概念がない。</li> | |
472 <li>データの待ち合わせがない</li> | |
473 </ul> | |
474 | |
475 | |
476 | |
477 </section> | |
478 </div></div> | |
479 | |
480 <div class="slide" id="24"><div> | |
481 <section> | |
482 <header> | |
483 <h1 id="alice1---http">Aliceと他言語等との比較(1) - HTTP</h1> | |
484 </header> | |
485 <!-- _S9SLIDE_ --> | |
486 | |
487 <ul> | |
488 <li>get/putで通信を行う</li> | |
489 <li> | |
490 <p>URLがデータベースのkeyとなる</p> | |
491 </li> | |
492 <li>MIME形式で送信。複数の表現を持つMeta Computationがない。 </li> | |
493 <li>セッション管理はクライアント自身がやる </li> | |
494 <li>並列処理できない </li> | |
495 <li>get/putをRPC的に扱わない</li> | |
496 </ul> | |
497 | |
498 | |
499 | |
500 </section> | |
501 </div></div> | |
502 | |
503 <div class="slide" id="25"><div> | |
504 <section> | |
505 <header> | |
506 <h1 id="treevncalicetreevnc">TreeVNCとAliceを用いたTreeVNCの比較</h1> | |
507 </header> | |
508 <!-- _S9SLIDE_ --> | |
509 | |
510 <ul> | |
511 <li> | |
512 <p>TreeVNC<br /> | |
513 通信プロトコルを定義や圧縮を自前で行う<br /> | |
514 通信スレッドを複数作成<br /> | |
515 様々な部分で通信APIを呼び出す </p> | |
516 </li> | |
517 <li> | |
518 <p>Aliceを用いたTreeVNC<br /> | |
519 Aliceと接続する最小限の変更<br /> | |
520 木の構成部分や圧縮形式での通信はMeta Computation </p> | |
521 </li> | |
522 </ul> | |
523 | |
524 | |
525 | |
526 </section> | |
527 </div></div> | |
528 | |
529 <div class="slide" id="26"><div> | |
530 <section> | |
531 <header> | |
532 <h1 id="treevncalicetreevnc-1">TreeVNCとAliceを用いたTreeVNCの比較</h1> | |
533 </header> | |
534 <!-- _S9SLIDE_ --> | |
535 | |
536 <ul> | |
537 <li>TightVNCからのコードの増加量</li> | |
538 <li>Aliceを用いれば通常の TreeVNC の 20% の行数で記述できる。</li> | |
539 </ul> | |
540 | |
541 <table style="border-collapse: collapse;border:1px solid #000000;"> | |
542 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th> | |
543 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th> | |
544 <th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th> | |
545 <tr> | |
546 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td> | |
547 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">5049</td> | |
548 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14191</td> | |
549 </tr> | |
550 <tr> | |
551 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> Aliceを用いたTreeVNC </td> | |
552 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">989</td> | |
553 <td style="border:1px solid #000000;padding:5px 15px 5px 15px;">2355</td> | |
554 </tr> | |
555 </table> | |
556 | |
557 | |
558 | |
559 </section> | |
560 </div></div> | |
561 | |
562 <div class="slide" id="27"><div> | |
563 <section> | |
564 <header> | |
565 <h1 id="section-3">まとめ</h1> | |
566 </header> | |
567 <!-- _S9SLIDE_ --> | |
568 | |
569 <ul> | |
570 <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表現を変える機能を実装した。</li> | |
621 <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li> | 571 <li>これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。</li> |
622 <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li> | 572 <li>同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。</li> |
623 <li>今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。</li> | 573 <li>今後の課題としては、圧縮機能を TreeVNC で用 いることで有効性を測る必要がある。</li> |
624 </ul> | 574 </ul> |
625 <!-- === end markdown block === --> | 575 <!-- === end markdown block === --> |
626 | 576 |
627 </section> | 577 </section> |
628 </div></div> | 578 </div></div> |