Mercurial > hg > Papers > 2015 > parusu-prosym
comparison presen/prosym.md @ 33:c20b2d98c5f4
Update
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 08 Jan 2016 03:17:25 +0900 |
parents | 0b99de43a192 |
children | 1ef0837924a3 |
comparison
equal
deleted
inserted
replaced
32:0b99de43a192 | 33:c20b2d98c5f4 |
---|---|
60 - サーバー側の処理性能が落ちてしまう | 60 - サーバー側の処理性能が落ちてしまう |
61 - 配信者を切り替える際、配信側のサーバーを立ち上げ直す必要がある | 61 - 配信者を切り替える際、配信側のサーバーを立ち上げ直す必要がある |
62 | 62 |
63 # TreeVNC の構造 | 63 # TreeVNC の構造 |
64 - Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている | 64 - Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている |
65 - 様々なメッセージで通信を行う | |
65 - クライアント同士をバイナリツリー状に接続する | 66 - クライアント同士をバイナリツリー状に接続する |
66 - バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ | 67 - バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ |
67 - Node は 親 Node から送られたデータを自分の子 Node に流す機能、 逆に子 Node から送られてきたデータを親 Nodeに流す機能がある | |
68 | 68 |
69 # Root Node | 69 # Node が行う処理 |
70 - Root Node は 子 Nodeにデータを流す機能に加え | 70 - Node |
71 - 親 Node から送られたデータを自分の子 Node に流す | |
72 - 子 Node から送られてきたデータを親 Nodeに流す | |
73 - Root Node | |
74 - TreeVNC で配信を行う際に一番最初に起動する Node | |
75 - Node の機能 | |
71 - 各 Node の管理 | 76 - 各 Node の管理 |
72 - VNC サーバーから送信されたFramebuffer の管理を行う | 77 - VNC サーバーから送信されたFramebuffer の管理 |
78 | |
73 | 79 |
74 # TreeVNCの負荷分散 | 80 # TreeVNCの負荷分散 |
75 - ポート一本あたりの負荷 | 81 - ポート一本あたりの負荷 |
76 - 従来のVNC : Node数 * データ量 | 82 - 従来のVNC : Node数 * データ量 |
77 - TreeVNC : (2(子供の数) + 1) * データ量 | 83 - TreeVNC : (2(子供の数) + 1) * データ量 |
81 <img src="./images/comparenormalandtree.svg" alt="message" width="600"> | 87 <img src="./images/comparenormalandtree.svg" alt="message" width="600"> |
82 | 88 |
83 # TreeVNC の圧縮形式 | 89 # TreeVNC の圧縮形式 |
84 - TreeVNC は ZRLEE というエンコードでデータのやり取りを行う | 90 - TreeVNC は ZRLEE というエンコードでデータのやり取りを行う |
85 - ZRLEE は Rfb でのエンコードの1つである ZRLE を元に生成される | 91 - ZRLEE は Rfb でのエンコードの1つである ZRLE を元に生成される |
86 - ZRLEE はZRLE を一度 Root Node で解凍して再圧縮を行う | 92 - ZRLE を一度 Root Node で解凍して再圧縮を行う |
87 - その際配信画面の更新のたびに辞書を作りなおす | 93 - 配信画面の更新のたびに辞書を作りなおす |
94 - 途中からデータを受け取っても解凍できる | |
88 | 95 |
89 <img src="./images/ZRLEE.svg" alt="message" width="400"> | 96 <img src="./images/ZRLEE.svg" alt="message" width="400"> |
90 | 97 |
91 # TreeVNC に参加するまでのメッセージ通信の流れ | 98 # メッセージ通信の流れ |
92 <img src="./images/message.svg" alt="message" width="400"/> | 99 <img src="./images/message.svg" alt="message" width="400"/> |
93 | 100 |
94 # 切断時の木の再構成 | 101 # 切断時の木の再構成 |
95 - TreeVNC はバイナリーツリーという特性上 Node の切断を検知できずにいると、Node 同士で構成された木構造が崩れてしまう | 102 - TreeVNC はバイナリーツリーという特性上 Node の切断を検知できずにいると、Node 同士で構成された木構造が崩れてしまう |
96 - TreeVNC は Node 切断の検知を LOST\_CHILD というメッセージ通信で行っている | 103 - TreeVNC は Node 切断の検知を LOST\_CHILD というメッセージで行っている |
97 | 104 |
98 <img src="./images/lostChild1.svg" alt="message" width="800"> | 105 <img src="./images/lostChild1.svg" alt="message" width="800"> |
99 | 106 |
100 # 共有画面切り替え | 107 # 共有画面切り替え |
101 - TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている | 108 - TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている |
102 - 画面を配信されている側のビューワにある Share Screen ボタンが押す | 109 - 画面を配信されている側のビューワにある Share Screen ボタンが押す |
103 - Root Node に SERVER\_CHANGE\_REQUEST メッセージを送信する | 110 - Root Node に SERVER\_CHANGE\_REQUEST を送信する |
104 - Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を始める。 | 111 - Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を始める。 |
105 - NAT 越えは現時点では実装されていない | 112 - NAT 越えは現時点では実装されていない |
106 | 113 |
107 # QUALITY モードと SPEED モード | 114 # QUALITY モードと SPEED モード |
108 - 高解像度のデータの描画処理はPCのスペックによって重くなる場合がある | 115 - 高解像度のデータの描画処理はPCのスペックによって重くなる場合がある |
109 - 画像描画処理には | 116 - 画像描画処理には |
110 - 高画質優先の QUALITY モード | 117 - 高画質優先の QUALITY モード |
111 - 描画速度優先の SPEED モード | 118 - 描画速度優先の SPEED モード |
112 - 今まで QUALITY モード を使用していた(変更不可) | 119 - 今まで QUALITY モード を使用していた(変更不可) |
113 - 今回ビューワからユーザーがどちらのモードを使用するかを変更できるようにした | 120 - ビューワからユーザーがどちらのモードを使用するかを変更を可能にした |
114 - これにより描画処理の遅延が解決できると思われる | |
115 | 121 |
116 # マルチディスプレイ | 122 # マルチディスプレイ |
117 - 画面切り替えの際のSERVER\_CHANGE\_REQUESTに共有するディスプレイの座標を付加する | 123 - 画面切り替えの際のSERVER\_CHANGE\_REQUESTに共有するディスプレイの座標を付加する |
118 - Root Node は 接続した VNC サーバーから画像データを要求する FRAME\_BUFFER\_UPDATE\_REQUEST メッセージに受け取った座標を付加する | 124 - Root Node は 接続した VNC サーバーから画像データを要求する FRAME\_BUFFER\_UPDATE\_REQUEST に受け取った座標を付加する |
119 - VNC サーバーは要求された座標内の画像データを FRAME\_BUFFER\_UPDATE メッセージで Root Node に送信する | 125 - VNC サーバーは要求された座標内の画像データを FRAME\_BUFFER\_UPDATE で Root Node に送信する |
120 | 126 |
121 <img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="800"> | 127 <img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="800"> |
122 | 128 |
123 # 複数ネットワークの対応 | 129 # 複数ネットワークの対応 |
124 - Root Node が接続しているネットワークごとに木構造を形成する | 130 - Root Node が接続しているネットワークごとに木構造を形成する |
127 <img src="./images/MultiNetworkTree.svg" alt="message" width="600"> | 133 <img src="./images/MultiNetworkTree.svg" alt="message" width="600"> |
128 | 134 |
129 # Direct Connection | 135 # Direct Connection |
130 - NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する | 136 - NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する |
131 - Direct Connection した Node はそのネットワークの Root Node になり、そのネットワークの他の Node は Root Node に接続を行い木構造を作る | 137 - Direct Connection した Node はそのネットワークの Root Node になり、そのネットワークの他の Node は Root Node に接続を行い木構造を作る |
138 - Direct Connection された Root Node では NAT を越えたネットワークの Root Node の管理を行わない | |
132 | 139 |
133 <img src="./images/directConnection.svg" alt="message" width="800"> | 140 <img src="./images/directConnection.svg" alt="message" width="800"> |
134 | 141 |
135 # TreeVNCの評価 | 142 # TreeVNCの評価 |
136 - 木の深さによる画像データの遅延を調べる | 143 - 木の深さによる画像データの遅延を調べる |
137 - 実験環境 | 144 - 実験環境 |
138 - 実際に講義を受講している学生が TreeVNC を使用 | 145 - 実際に講義を受講している学生が TreeVNC を使用 |
139 - 約20名の接続 | 146 - 約20名の接続 |
140 | 147 |
141 # 実測方法 | 148 # 実測方法 |
142 - Root Node は 送信時間と画像データを持った CHECK\_DELAY を 末端 Node まで各 Node を伝いながら伝達する | 149 - Root Node は 送信時間と画像データを持った CHECK\_DELAY を 末端 Node まで木構造を辿りながら伝達する |
143 - CHECK\_DELAY を受け取った各 Node は CHECK\_DELAY\_REPLY を送信する | 150 - CHECK\_DELAY を受け取った各 Node は 付加された送信時間を CHECK\_DELAY\_REPLY に付加し、 Root Node に送信する |
144 - CHECK\_DELAY\_REPLY を受け取った Root Node は CHECK\_DELAY の送信にどれだけ時間がかかったかの計算を行う | 151 - CHECK\_DELAY\_REPLY を受け取った Root Node は CHECK\_DELAY の送信にどれだけ時間がかかったかの計算を行う |
145 | 152 |
146 ```java | 153 ```java |
147 // 遅延時間の計算 | 154 // 遅延時間の計算 |
148 Long delay = System.currentTimeMillis() - time; | 155 Long delay = System.currentTimeMillis() - time; |
156 <img src="./images/depth3.svg" alt="message" width="450"> | 163 <img src="./images/depth3.svg" alt="message" width="450"> |
157 <img src="./images/depth4.svg" alt="message" width="450"> | 164 <img src="./images/depth4.svg" alt="message" width="450"> |
158 | 165 |
159 # 結果から | 166 # 結果から |
160 - 画像データの伝達はほぼ1秒以内に収まっている | 167 - 画像データの伝達はほぼ1秒以内に収まっている |
161 - 容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の Delay が残っているためだと考えられる | 168 - 容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の遅延が残っているためだと考えられる |
162 - 深さ 3 で極端に遅い場合がある。 遅い原因として1つの Node がボトルネックになっている事が判明した。 | 169 - 深さ3が遅い原因として1つの Node がボトルネックになっている事が判明した。 |
163 - ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある | 170 - ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある |
164 | 171 |
165 # まとめと課題 | 172 # まとめと課題 |
166 - 今回TreeVNCの様々な問題点の解決を行った | 173 - 今回TreeVNCの様々な問題点の解決を行った |
167 - 実験を行うことによりさらなる問題点が判明した | 174 - 実験を行うことによりさらなる問題点が判明した |