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{新機能の評価}