Mercurial > hg > Papers > 2016 > parusu-thesis
comparison paper/main.tex @ 14:84e12a138c37
Add TreeVNC theory
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 13 Feb 2016 19:00:18 +0900 |
parents | bcd8506cd151 |
children | 1890002fd43b |
comparison
equal
deleted
inserted
replaced
13:bcd8506cd151 | 14:84e12a138c37 |
---|---|
105 | 105 |
106 \begin{figure}[htbp] | 106 \begin{figure}[htbp] |
107 \begin{center} | 107 \begin{center} |
108 \includegraphics[scale=0.8]{./images/vnc.pdf} | 108 \includegraphics[scale=0.8]{./images/vnc.pdf} |
109 \end{center} | 109 \end{center} |
110 \caption{VNC} | 110 \caption{VNCの構造} |
111 \label{fig:vnc} | 111 \label{fig:vnc} |
112 \end{figure} | 112 \end{figure} |
113 | 113 |
114 \section{TreeVNC の構造} | 114 \section{TreeVNC の構造} |
115 TreeVNC は Java を用いて作成された TightVNC(Tight Virtual Network Computing)\cite{tightvnc} を元に作成されている。 | 115 TreeVNC は Java を用いて作成された TightVNC(Tight Virtual Network Computing)\cite{tightvnc} を元に作成されている。 |
132 \caption{構成される木構造} | 132 \caption{構成される木構造} |
133 \label{fig:tree} | 133 \label{fig:tree} |
134 \end{figure} | 134 \end{figure} |
135 | 135 |
136 \section{TreeVNC の原理} | 136 \section{TreeVNC の原理} |
137 TreeVNC のの原理を書く予定 | 137 従来の VNC と TreeVNC の構造を比較を図\ref{fig:treeVncTheory}に示す。 |
138 \begin{itemize} | 138 |
139 \item 従来のVNC : Node数 * データ量 | 139 \begin{figure}[htbp] |
140 \item TreeVNC : (2(子供の数) + 1) * データ量 | 140 \begin{center} |
141 \end{itemize} | 141 \includegraphics[scale=0.5]{./images/treeVncTheory} |
142 % 従来のVNCはNode数に比例 | 142 \end{center} |
143 % TreeVNCはNode数に関係なく一定 | 143 \caption{構成される木構造} |
144 % 計算式 従来 N * データ量, TreeVNC (M+1) * データ量 | 144 \label{fig:treeVncTheory} |
145 \end{figure} | |
146 | |
147 表\ref{tb:treeVncTheory}はポート一本あたりの通信量である。 | |
148 通常の VNC の場合、クライアント数に比例してポート一本あたりの負荷が増えている。 | |
149 TreeVNC の場合は1つの Node に対して2台の Node が接続するため、クライアント数関係なく一定である。 | |
150 | |
151 送信するデータ量も通常の VNC の場合 Node 数に比例した量のデータを送信する必要があり、 CPU に負荷がかかってしまう。 | |
152 それに対して TreeVNC はクライアントが増えても送信するデータはクライアント毎に分散されているため、1台の CPU に掛かる負荷は一定となる。 | |
153 そのため、性能が低下せずに画面配信を行うことが出来る。 | |
154 | |
155 \begin{table}[htbp] | |
156 \begin{center} | |
157 \caption{ポート一本あたりの通信量(N はノード数)} | |
158 \begin{tabular}{|l|l|l|} \hline | |
159 & 通常の VNC & TreeVNC \\ \hline | |
160 通信量 & N * データ量 & (2 + 1) * データ量 \\ \hline | |
161 \end{tabular} | |
162 \label{tb:treeVncTheory} | |
163 \end{center} | |
164 \end{table} | |
145 | 165 |
146 \section{圧縮形式} | 166 \section{圧縮形式} |
147 TreeVNC は ZRLEE\cite{taninari:2012a} というエンコードでデータのやり取りを行う。 | 167 TreeVNC は ZRLEE\cite{taninari:2012a} というエンコードでデータのやり取りを行う。 |
148 ZRLEE はRFB プロトコルで使えるエンコーディングタイプの ZRLE を元に生成される。 | 168 ZRLEE はRFB プロトコルで使えるエンコーディングタイプの ZRLE を元に生成される。 |
149 | 169 |
187 | 207 |
188 \section{ノード間で行われるメッセージ通信} | 208 \section{ノード間で行われるメッセージ通信} |
189 RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。 | 209 RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。 |
190 TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。 | 210 TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。 |
191 | 211 |
192 \begin{table}[htb] | 212 \begin{table}[htbp] |
193 \caption{通信経路とメッセージ一覧} | 213 \caption{通信経路とメッセージ一覧} |
194 \scriptsize | 214 \scriptsize |
195 \begin{tabular}{|l|l|l|} \hline | 215 \begin{tabular}{|l|l|l|} \hline |
196 通信経路 & message & 説明 \\ \hline \hline | 216 通信経路 & message & 説明 \\ \hline \hline |
197 & FIND\_ROOT & TreeVNC接続時にRoot Nodeを探す。 \\ \cline{2-3} | 217 & FIND\_ROOT & TreeVNC接続時にRoot Nodeを探す。 \\ \cline{2-3} |
335 Root Node の保持しているネットワーク毎にTreeManager を生成する用に変更を行った。 | 355 Root Node の保持しているネットワーク毎にTreeManager を生成する用に変更を行った。 |
336 新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得し、 Node 接続の処理を任せる。 | 356 新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得し、 Node 接続の処理を任せる。 |
337 そのため、 TreeVNC が複数のネットワーク別に木構造を構成することが可能となる。 | 357 そのため、 TreeVNC が複数のネットワーク別に木構造を構成することが可能となる。 |
338 | 358 |
339 \chapter{NAT 対応} | 359 \chapter{NAT 対応} |
360 \section{遠隔地からの接続} | |
361 TreeVNC は 木構造を所属しているネットワークでしか生成しておらず | |
340 \section{DirectConnection} | 362 \section{DirectConnection} |
341 遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。 | 363 遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。 |
342 | 364 |
343 図\ref{fig:directConnection} にNATを越えたネットワークからの接続を示す。 | 365 図\ref{fig:directConnection} にNATを越えたネットワークからの接続を示す。 |
344 別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。 | 366 別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。 |
358 \caption{遠隔地 Node からの接続} | 380 \caption{遠隔地 Node からの接続} |
359 \label{fig:directConnection} | 381 \label{fig:directConnection} |
360 \end{center} | 382 \end{center} |
361 \end{figure} | 383 \end{figure} |
362 | 384 |
363 \chapter{TreeVNC の追加機能} | 385 \chapter{TreeVNC のリファクタリング} |
364 \section{マルチディスプレイ対応} | 386 \section{マルチディスプレイ対応} |
365 画面配信側のPCがマルチディスプレイの場合 VNC サーバーからは複数の画面全体の画像データが送信されてしまう。 | 387 画面配信側のPCがマルチディスプレイの場合 VNC サーバーからは複数の画面全体の画像データが送信されてしまう。 |
366 授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。 | 388 授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。 |
367 そこで、画面を共有する際、ディスプレイを選択させ、画面共有を行う機能を追加した。 | 389 そこで、画面を共有する際、ディスプレイを選択させ、画面共有を行う機能を追加した。 |
368 | 390 |
391 Root Node は SERVER\_CHANGE\_REQUEST を受け取ると、 配信状態を維持したまま、画面切り替え用に新しくスレッドを生成する。 | 413 Root Node は SERVER\_CHANGE\_REQUEST を受け取ると、 配信状態を維持したまま、画面切り替え用に新しくスレッドを生成する。 |
392 切り替え用のスレッドは切り替えに必要なデータの設定、 VNC サーバー への接続など通常の切り替え処理を実行する。 | 414 切り替え用のスレッドは切り替えに必要なデータの設定、 VNC サーバー への接続など通常の切り替え処理を実行する。 |
393 切り替えが完了した後に、 現在配信中の画面を停止し、画面の切替を行う。 | 415 切り替えが完了した後に、 現在配信中の画面を停止し、画面の切替を行う。 |
394 切り替え用のスレッドを用意することで、配信状況を維持したままスムーズな画面切り替えが可能になった。 | 416 切り替え用のスレッドを用意することで、配信状況を維持したままスムーズな画面切り替えが可能になった。 |
395 | 417 |
396 \section{ネックになっているノードへの対処} | |
397 | 418 |
398 \section{クライアントへのエラー通知} | 419 \section{クライアントへのエラー通知} |
399 TreeVNC には接続しているクライアントへのエラーの通知を行うことが出来なかった。 | 420 TreeVNC には接続しているクライアントへのエラーの通知を行うことが出来なかった。 |
400 そのため、 画面切り替えを行う際に切り替え先が VNC サーバーの共有設定をしていない場合 Root Node に接続エラーのダイアログが表示されるという実装になっており、切り替えを行ったクライアントには通知されていなかった。 | 421 そのため、 画面切り替えを行う際に切り替え先が VNC サーバーの共有設定をしていない場合 Root Node に接続エラーのダイアログが表示されるという実装になっており、切り替えを行ったクライアントには通知されていなかった。 |
401 | 422 |
435 | 456 |
436 CHECK\_DELAY\_REPLY を受け取った Root Node はメッセージと画像データの伝達にどれだけの時間がかかったかを計算する。 | 457 CHECK\_DELAY\_REPLY を受け取った Root Node はメッセージと画像データの伝達にどれだけの時間がかかったかを計算する。 |
437 データ計算方法を以下の Code \ref{calc}に記述する。 この変数 time は CHECK\_DELAY\_REPLY に付いている CHEKC\_DELAY の送信時刻である。 | 458 データ計算方法を以下の Code \ref{calc}に記述する。 この変数 time は CHECK\_DELAY\_REPLY に付いている CHEKC\_DELAY の送信時刻である。 |
438 | 459 |
439 \begin{lstlisting}[label=calc, caption=遅延時間の計算方法] | 460 \begin{lstlisting}[label=calc, caption=遅延時間の計算方法] |
440 Long delay = System.currentTimeMillis() - time; | 461 Long delay = System.currentTimeMillis() - time; |
441 \end{lstlisting} | 462 \end{lstlisting} |
442 | 463 |
443 \section{結果} | 464 \section{結果} |
444 バイナリツリーで木を構成した場合、 Node 数が17台だと深さが4となる。 | 465 バイナリツリーで木を構成した場合、 Node 数が17台だと深さが4となる。 |
445 各木構造の階層毎に、画像データの伝搬にかかった時間を測定した。 | 466 各木構造の階層毎に、画像データの伝搬にかかった時間を測定した。 |
446 | 467 |
447 図\ref{fig:depth1}は遅延の分布を示した散布図である。 | 468 図\ref{fig:depth1}, \ref{fig:depth2}, \ref{fig:depth3}, \ref{fig:depth4}は遅延の分布を示した散布図である。 |
448 X軸はメッセージ伝達にかかった秒数(ms)、 Y軸は画像データのサイズ(Byte)である。 | 469 X軸はメッセージ伝達にかかった秒数(ms)、 Y軸は画像データのサイズ(Byte)である。 |
449 | 470 |
450 画像データの伝達はほぼ1秒以内に収まっているが、容量が小さい場合でも時間がかかる場合がある。 | 471 画像データの伝達はほぼ1秒以内に収まっているが、容量が小さい場合でも時間がかかる場合がある。 |
451 それはその送信の前に大容量の画像を送信した後の回線のDelayが残っているためだと考えられる。 | 472 それはその送信の前に大容量の画像を送信した後の回線のDelayが残っているためだと考えられる。 |
452 | 473 |
453 また、深さ3で極端に遅い場合がある。 遅い原因として、1つの Node がボトルネックになっていることが判明している。 | 474 また、深さ3で極端に遅い場合がある。 遅い原因として、1つの Node がボトルネックになっていることが判明している。 |
454 このような極端に遅い Node をそのまま木に配置した場合、その Node の子 Node 以下に影響を及ぼす場合がある。 | 475 このような極端に遅い Node をそのまま木に配置した場合、その Node の子 Node 以下に影響を及ぼすおそれがある。 |
455 そのため、遅い Nodeを検出して、木の最後尾に移動させる機能が必要である。 | 476 |
456 | 477 \begin{figure}[htbp] |
457 \begin{figure}[ht] | 478 \begin{center} |
458 \begin{center} | 479 \includegraphics[scale=0.7]{./images/depth1.eps} |
459 \includegraphics[scale=0.8]{./images/depth1.eps} | 480 \end{center} |
460 \end{center} | 481 \caption{データサイズと遅延の関係 : 深さ1} |
461 \begin{center} | |
462 \includegraphics[scale=0.8]{./images/depth2.eps} | |
463 \end{center} | |
464 \caption{深さ1,2のデータサイズと遅延の関係} | |
465 \label{fig:depth1} | 482 \label{fig:depth1} |
466 \end{figure} | 483 \end{figure} |
467 | 484 |
468 \begin{figure}[ht] | 485 \begin{figure}[htbp] |
469 \begin{center} | 486 \begin{center} |
470 \includegraphics[scale=0.8]{./images/depth3.eps} | 487 \includegraphics[scale=0.7]{./images/depth2.eps} |
471 \end{center} | 488 \end{center} |
472 \begin{center} | 489 \caption{データサイズと遅延の関係 : 深さ2} |
473 \includegraphics[scale=0.8]{./images/depth4.eps} | |
474 \end{center} | |
475 \caption{深さ3, 4のデータサイズと遅延の関係} | |
476 \label{fig:depth2} | 490 \label{fig:depth2} |
477 \end{figure} | 491 \end{figure} |
492 | |
493 \begin{figure}[htbp] | |
494 \begin{center} | |
495 \includegraphics[scale=0.7]{./images/depth3.eps} | |
496 \end{center} | |
497 \caption{データサイズと遅延の関係 : 深さ3} | |
498 \label{fig:depth3} | |
499 \end{figure} | |
500 | |
501 \begin{figure}[htbp] | |
502 \begin{center} | |
503 \includegraphics[scale=0.7]{./images/depth4.eps} | |
504 \end{center} | |
505 \caption{データサイズと遅延の関係 : 深さ4} | |
506 \label{fig:depth4} | |
507 \end{figure} | |
508 | |
509 \section{ボトルネックになっているノードへの対処} | |
510 | |
478 % 今後の課題 | 511 % 今後の課題 |
479 | 512 |
480 \chapter{まとめ} | 513 \chapter{まとめ} |
481 \section{NATを越えた画面切り替え} | 514 \section{NATを越えた画面切り替え} |
482 \section{新機能の評価} | 515 \section{新機能の評価} |