comparison presen/sigOS/sample.markdown @ 14:99e5104997b7

add compress part
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Sun, 24 May 2015 17:56:24 +0900
parents c0fe42a8808d
children 696a908208c8
comparison
equal deleted inserted replaced
13:c0fe42a8808d 14:99e5104997b7
48 <td style="border:1px solid #000000;"> take</td> 48 <td style="border:1px solid #000000;"> take</td>
49 <td style="border:1px solid #000000;">データを取得する。取得したデータはDSMから削除される。</td> 49 <td style="border:1px solid #000000;">データを取得する。取得したデータはDSMから削除される。</td>
50 </tr> 50 </tr>
51 </table> 51 </table>
52 52
53 # Aliceの概要(4) - Data Segment の表現
54 * 一般的な Java のクラスオブジェクト
55 * LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。
56 * MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト
57 * RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。
53 58
54 # Aliceの概要(4) - Code Segment 59 # Aliceの概要(5) - Code Segment
55 * Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。 60 * Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。
56 * 複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。 61 * 複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。
62 * CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。
63
64 # Aliceの概要(5) - Code Segment
57 * 入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。 65 * 入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。
58 * keyで指定されたDSが揃うと実行されるという性質を持つ。 66 * keyで指定されたDSが揃うと実行されるという性質を持つ。
59 ![opt](./images/dsandcs.svg) 67 ![opt](./images/dsandcs.svg)
60 68
61 # Aliceの概要(5) - CodeSegmentの依存関係 69 # Aliceの概要(6) - CodeSegmentの依存関係
62 * データの依存関係にないCSは並列実行される 70 * データの依存関係にないCSは並列実行される
63 * データの依存関係がある場合は依存を解決した順に実行される 71 * データの依存関係がある場合は依存を解決した順に実行される
64 * 並列度あげるために、処理を細かく記述し、依存するDSを少なくする 72 * 並列度あげるために、処理を細かく記述し、依存するDSを少なくする
65 ![opt](./images/dsandcs2.svg) 73 ![opt](./images/dsandcs2.svg)
66 74
67 # AliceのMeta Computation 75 # AliceのMeta Computation(1/2)
68 * 並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。 76 * 並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。
69 * Aliceではプログラマが記述する部分を *Computation*、Aliceが提供するComputationを支える部分を *Meta Computation* として分けて捉えている。 77 * Aliceではプログラマが記述する部分を *Computation*、Aliceが提供するComputationを支える部分を *Meta Computation* として分けて捉えている。
78 * 分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。
70 79
71 # AliceのMeta Computation 80 # AliceのMeta Computation(2/2)
72 * AliceのComputation 81 * AliceのComputation
73 * keyによりData Segmentを待ち合わせてCode Segmentを実行する 82 * keyによりData Segmentを待ち合わせてCode Segmentを実行する
74 83
75 * AliceのMeta Computation 84 * AliceのMeta Computation
76 * Javaで記述したAliceの実装システム 85 * Javaで記述したAliceの実装システム
77 86
78 * Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる 87 * Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる
79 * Meta ComputationもCSとDSにより表現されており、それぞれMeta CSとMeta DSと呼ぶ。 88 * Meta Computation も CS と DS により表現されており、それぞれMeta CSとMeta DSと呼ぶ。
89
90 # AliceVNC
91 * 研究室では授業向け画面共有システム TreeVNC の開発を行っている。
92 * 授業で VNC を使う場合、1つ のコンピュータに多人数が同時につながるため、性能が大幅に落ちる
93 * TreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う
94 ![opt](./images/treeVNC.svg)
80 95
81 # Alice の新機能 96 # Alice の新機能
82 実用的なアプリケーションであるTreeVNCの実装で必要となった以下の機能をMeta Computation として実装した。 97 * Alice が実用的なアプリケーションを記述する能力をもつことを確認するために、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。
83 * flip機能 … Input DS を Output DSとして転送する 98 * AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。
84 * 圧縮機能 … DS Managerの指定によってDSの表現を切り替える 99 * flip機能 … Input DS を Output DS として転送する
100 * 圧縮機能 … DS Manager の指定によってDSの表現を切り替える
85 101
86 # flip機能 102 # flip機能
87 103
88 # 圧縮機能 104 # 圧縮機能
105 * AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。
106 * ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。
107 * 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。
89 108
90 # API設計 109 # 圧縮機能 - Data Segmentの表現の変更
91 * put(String "compressed" + managerKey, String key, Object val) 110 1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。
92 * take(String "compressed" + managerKey, String key) 111 1. 一般的な Java のクラスオブジェクト
112 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト
113 3. 2 を圧縮したバイナリオブジェクト
114
115 # 圧縮機能 - Data Segmentの表現の変更
116 ```java
117 public class ReceiveData {
118 private Object val = null;
119 private byte[] messagePack = null;
120 private byte[] zMessagePack = null;
121 }
122 ```
123
124 # 圧縮機能 - DSMの追加
125 * Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。
126 * Compressed DSM にputする場合
127 * DS が圧縮表現を持っていればそれをputする
128 * 持っていなければその時点で圧縮表現を作ってputする
129
130 # 圧縮機能 - 任意の表現でDSを取得
131 * ReceiveData内にあるDSのcastメソッドであるasClass()を用いる
132 ```java
133 public <T> T asClass(Class<T> clazz) {
134 if (val != null) { return (T) val; }
135
136 if (zMessagePack != null && messagePack == null) {
137 messagePack = unzip(zMessagePack, dataSize);
138 }
139
140 return packer.read(messagePack, clazz);
141 }
142 ```
143
144 # 圧縮機能 - API設計
145 通常のデータを扱う場合
146 * put(String managerKey, String key, Object val)
147 * take(String managerKey, String key)
148
149 圧縮表現のデータを扱う場合
150 * put(String **"compressed"** + managerKey, String key, Object val)
151 * take(String **"compressed"** + managerKey, String key)
152
153 # 圧縮機能 - 通信プロトコルの変更
154 Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。
155 データの 表現に圧縮した byteArray を追加したため、Remote から put された byteArray が圧縮されているのかそ うでないのかを判断する必要がある。
156
157 # 圧縮機能の評価
158 RingRelayTest
159
160 # まとめ
161 * Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。
162 * これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。
163 * 同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。
164 * 今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。