Mercurial > hg > Papers > 2015 > nozomi-sigos
annotate paper/chapter3.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 | e13be99f69b6 |
children |
rev | line source |
---|---|
1
e13be99f69b6
can't view graphix correct place
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
1 \section{Aliceの新機能} |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
2 実用的なアプリケーションであるTreeVNCをAlice上で実装することで、Aliceに必要な機能を洗い出した。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
3 \subsection{flip機能} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
4 Data Segment APIのput、updateを呼ぶとOutput Data Segmentが毎回新しく作成される。そして出力するデータのコピーが行われる。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
5 しかし、AliceVNCのようにInput Data Segmentとして取得したデータをそのまま子ノードにOutput Data Segmentとして出力する場合、コピーを行なうのは無駄である。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
6 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
7 そこで、このコピーを無くしData Segmentの更新におけるオーバーヘッドを減らす方法としてflip機能の実装を行った。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
8 ソースコード\ref{src:exampleFlip}のようにInput Data SegmentであるReceiverをflipメソッドに引数として渡すことで、無駄なコピーを減らす。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
9 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
10 \lstinputlisting[label=src:flipAlice, caption=Aliceにおけるflip]{source/flip.java} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
11 \end{table} |
0 | 12 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
13 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
14 \lstinputlisting[label=src:exampleFlip,caption=flipの使用例]{source/Sort.java} |
0 | 15 \end{table} |
16 | |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
17 \subsection{Data Segmentの表現の追加(圧縮機能)} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
18 TreeVNCでは画面配信の際、データを圧縮してノード間通信を行っている。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
19 そのため、AliceVNCにも圧縮されたデータ形式を扱える機能が必要だと考えた。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
20 しかし、ただデータを圧縮する機構を追加すればいいわけではない。 |
0 | 21 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
22 AliceVNCでは、ノードは受け取った画面データを描画すると同時に、子ノードのRemote DS Managerに送信する。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
23 ノードはDSを受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
24 しかし、受け取ったデータを自分の子ノードに対して送信する際には、解凍する必要はない。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
25 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。 |
0 | 26 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
27 そこで、1つのData Segmentに対し複数の表現を持たせることで、必要に応じた形式でDSを扱うことを可能にした。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
28 DSを扱うReceiveData.classに、次の3種類の表現を同時に持つことができる。 |
0 | 29 |
30 \begin{enumerate} | |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
31 \item 一般的なJavaのクラスオブジェクト |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
32 \item MessagePack for Javaでシリアライズ化されたバイナリオブジェクト |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
33 \item 2を圧縮したバイナリオブジェクト |
0 | 34 \end{enumerate} |
35 | |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
36 ソースコード\ref {src:ReceiveData}はReceiveData.classが持つ表現であり、{\tt val}に1. 一般的なJavaのクラスオブジェクト の表現でデータ本体が保存される。{\tt messagePack}には2. シリアライズ化されたバイナリオブジェクトが保存され、通常のRemoteDSMへの通信にこの表現が扱われる。そして、{\tt zMessagePack}には3. 圧縮されたバイナリオブジェクトが保存される。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
37 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
38 \lstinputlisting[label=src:ReceiveData, caption=データを表現するクラス]{source/ReceiveData.java} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
39 \end{table} |
0 | 40 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
41 また、圧縮状態を持つDSを扱うDSMとしてLocalとRemoteそれぞれにCompressed Data Segment Managerの追加した。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
42 put/updateでは、ソースコード\ref{src:zput}のように指定するDSM名の先頭に"compressed"をつけることでDSは自動で圧縮状態も持つようになる。さらに、take/peekもソースコード\ref{src:ztake}のようにsetKeyを実行する際にDSM名の先頭に"compressed"をつけることで圧縮形式でDSを受け取ることができる。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
43 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
44 \lstinputlisting[label=src:zput, caption=圧縮DSのput]{source/compress_put.java} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
45 \end{table} |
0 | 46 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
47 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
48 \lstinputlisting[label=src:ztake,caption=圧縮DSのtake]{source/compress_take.java} |
0 | 49 \end{table} |
50 | |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
51 これによりユーザは指定するDSMを変えるだけで、他の計算部分を変えずに圧縮表現を持つDSを扱うことができる。 |
0 | 52 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
53 ノードは圧縮されたDSを受け取った後、そのまま子ノードにflipすれば圧縮状態のまま送信されるので、送信の際の再圧縮がなくなる。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
54 また、画面表示の際は{\tt asClass()}(ソースコード\ref {src:asClass})を使うことで適切な形式でデータを取得できる。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
55 {\tt asClass()}はDSを目的の型にcastするメソッドであり、圧縮されていれば解凍してcastを行っている。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
56 これにより必要なDSを必要な時にだけ解凍できる。 |
0 | 57 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
58 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
59 \lstinputlisting[label=src:asClass, caption=asClassの処理]{source/asClass.java} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
60 \end{table} |
0 | 61 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
62 \subsection{パケットの再設計} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
63 2.4で述べたように、Remoteからputされたデータは必ずシリアライズ化されておりbyteArrayで表現される。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
64 しかし、putされたbyteArrayが全てシリアライズ化された状態であるとはいえない。Localからも一般的なJavaのクラスオブジェクトとしてbyteArrayが使用されている場合が存在する。例えば、AliceVNCで使われる画像データはbyteArrayで表現されているが、これはLocalからputされている。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
65 また、データの表現に圧縮形式を追加したことで、RemoteからでもputされたbyteArrayが圧縮されているのかそうでないのかが判断できなくなった。 |
0 | 66 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
67 ここからわかることは、データを表現するにはデータ単体をやりとりするだけでは不十分ということである。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
68 そこで、データとデータの状態を表すヘッダをまとめて1つのオブジェクトとして扱うように変更した。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
69 Aliceの通信におけるヘッダにあたるCommandMessage.class(ソースコード\ref {src:CommandMessage}にシリアライズ状態表すフラグと、圧縮状態を表すフラグを追加した。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
70 これによってputされたDSMはフラグに応じた適切な形式でReceiveData.class内にDSを格納できる。 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
71 また、CommandMessage.classに圧縮前のデータサイズも追加したことで、適切な解凍が可能になった。 |
0 | 72 |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
73 \begin{table}[html] |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
74 \lstinputlisting[label=src:CommandMessage, caption=変更後のCommandMessage]{source/CommandMessage.java} |
0 | 75 \end{table} |
76 | |
77 \begin{table}[htbp] | |
5
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
78 \caption{CommandMessageの変数名の説明} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
79 \label{tb:variable} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
80 \begin{center} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
81 \begin{tabular} {|l|l|} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
82 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
83 変数名&説明\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
84 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
85 type&CommandType {\tt PEEK, PUT}などを表す\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
86 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
87 seq&Data Segmentの待ち合わせを行っている\\Code Segmentを表すunique number\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
88 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
89 key&どのKeyに対して操作を行うか指定する\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
90 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
91 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
92 quickFlag&SEDAを挟まずCommandを処理を行うかを示す\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
93 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
94 serialized&データ本体のシリアライズ状態を示す\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
95 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
96 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
97 compressed&データ本体のシリアライズ状態を示す\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
98 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
99 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
100 dataSize&圧縮前のデータサイズを表す\\ |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
101 \hline |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
102 |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
103 \end{tabular} |
4a7fa91ef60a
not fix English Abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
1
diff
changeset
|
104 \end{center} |
0 | 105 \end{table} |
106 | |
1
e13be99f69b6
can't view graphix correct place
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
107 |