Mercurial > hg > Papers > 2016 > parusu-thesis
changeset 15:1890002fd43b
Add neckNode section
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 14 Feb 2016 19:53:15 +0900 |
parents | 84e12a138c37 |
children | 85f003248de7 |
files | paper/images/directConnection.graffle paper/images/directConnection.pdf paper/images/lostChild.graffle paper/images/vnc.graffle paper/images/vnc.pdf paper/main.pdf paper/main.tex paper/reference.bib |
diffstat | 8 files changed, 60 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/main.tex Sat Feb 13 19:00:18 2016 +0900 +++ b/paper/main.tex Sun Feb 14 19:53:15 2016 +0900 @@ -133,6 +133,8 @@ \label{fig:tree} \end{figure} +\newpage + \section{TreeVNC の原理} 従来の VNC と TreeVNC の構造を比較を図\ref{fig:treeVncTheory}に示す。 @@ -140,7 +142,7 @@ \begin{center} \includegraphics[scale=0.5]{./images/treeVncTheory} \end{center} - \caption{構成される木構造} + \caption{ポート一本にかかる負荷} \label{fig:treeVncTheory} \end{figure} @@ -163,6 +165,8 @@ \end{center} \end{table} +\newpage + \section{圧縮形式} TreeVNC は ZRLEE\cite{taninari:2012a} というエンコードでデータのやり取りを行う。 ZRLEE はRFB プロトコルで使えるエンコーディングタイプの ZRLE を元に生成される。 @@ -295,12 +299,12 @@ ある一定時間 MulticastQueue から画像データが取得されない場合 Memory Over Flow を回避するために Timeout スレッドが用意されている。 Timeout を検知した際、Node との接続が切れたと判断する。 -図\ref{fig:lostChild}は6台の Node が接続してる状態で、 Node3 が切断した場合の木の再構成を示している。 +図\ref{fig:lostChild}は6台の Node が接続してる状態で Node3 が切断した場合の木の再構成を示している。 \begin{itemize} - \item Node3 の切断を検知した Node1 が Root Node へ LOST\_CHILD メッセージを送信する(1: send LOST\_CHILD)。 - \item LOST\_CHILD メッセージを受け取った Root Node は nodeList から切断した Node を消し、最後尾の Node6 に切断した Node Number を割り当てる(2: update nodeList)。 - \item Root Node は最後尾の Node6 に、切断した子 Node3 が接続していた Node1 に接続する様に CONNECT\_TO メッセージを送信する(3: send CONNECT\_TO (Node1))。 + \item Node3 の切断を検知した Node1 が Root Node へ LOST\_CHILD メッセージを送信する(1: sendLostChild)。 + \item LOST\_CHILD メッセージを受け取った Root Node は nodeList から切断した Node を消し、最後尾の Node6 に切断した Node Number を割り当てる(2: updateNodeList)。 + \item Root Node は最後尾の Node6 に、切断した子 Node3 が接続していた Node1 に接続する様に CONNECT\_TO メッセージを送信する(3: send ConnectTo (Node1))。 \item 最後尾の Node が子 Node を失った親 Node へ接続しに行く(4: connect (Node1))。 \end{itemize} @@ -357,8 +361,10 @@ そのため、 TreeVNC が複数のネットワーク別に木構造を構成することが可能となる。 \chapter{NAT 対応} -\section{遠隔地からの接続} -TreeVNC は 木構造を所属しているネットワークでしか生成しておらず +\section{TreeVNC の問題点} +TreeVNC は Root Node が所属しているネットワークで木を構成する。 +そのため、NAT 越えた別のネットワークからの接続を行うことが出来ない。 + \section{DirectConnection} 遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。 @@ -366,22 +372,33 @@ 別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。 この接続を Direct Connection と呼ぶ。 -Direct Connection した Node はそのネットワークの Root Node になる。 -そのネットワークの他の Node はそのネットワークの Root Node に接続し、木構造を生成する。 +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=0.5]{./images/directConnection.pdf} + \caption{NAT を越えた Node からの接続} + \label{fig:directConnection} + \end{center} +\end{figure} -配信側の Root Node は Direct Connection で接続された Root Node に対して Framebuffer Update で 画像データを送信する。 -Framebuffer Update が送信された Root Node は そのネットワークの Node に対して Framebuffer Update を送信する。 +\section{Direct Connectionでの木構造} +Direct Connection した Node はそのネットワークの Root Node になり、接続先である TreeVNC の nodeList に追加されない。 +つまり、ネットワーク毎に木構造をもつことになる。 -これにより、NATを越えたネットワークの画面共有が可能となる。 +新しく接続する Node は図\ref{fig:directConnectionTree}のようにそのネットワークの Root Node に FIND\_ROOT メッセージを送信し、接続処理を行う。 \begin{figure}[htbp] \begin{center} - \includegraphics[scale=0.5]{./images/directConnection.pdf} - \caption{遠隔地 Node からの接続} - \label{fig:directConnection} + \includegraphics[scale=0.5]{./images/directConnectionTree.pdf} + \caption{} + \label{fig:directConnectionTree} \end{center} \end{figure} +\section{Direct Connectionでの画面配信} +配信側の Root Node は Direct Connection で接続された Node に対して FRAMEBUFFER\_UPDATE メッセージで 画像データを送信する。 +FRAMEBUFFER\_UPDATE を受け取った Root Node はデータをそのまま子ノードに流すことで画面配信を行うことができる。 + + \chapter{TreeVNC のリファクタリング} \section{マルチディスプレイ対応} 画面配信側のPCがマルチディスプレイの場合 VNC サーバーからは複数の画面全体の画像データが送信されてしまう。 @@ -399,7 +416,7 @@ \begin{figure}[htbp] \begin{center} - \includegraphics[scale=0.5]{./images/shareScreenToMultiDisplay.pdf} + \includegraphics[scale=0.4]{./images/shareScreenToMultiDisplay.pdf} \end{center} \caption{マルチディスプレイへの対応} \label{fig:multidisplay} @@ -415,7 +432,6 @@ 切り替えが完了した後に、 現在配信中の画面を停止し、画面の切替を行う。 切り替え用のスレッドを用意することで、配信状況を維持したままスムーズな画面切り替えが可能になった。 - \section{クライアントへのエラー通知} TreeVNC には接続しているクライアントへのエラーの通知を行うことが出来なかった。 そのため、 画面切り替えを行う際に切り替え先が VNC サーバーの共有設定をしていない場合 Root Node に接続エラーのダイアログが表示されるという実装になっており、切り替えを行ったクライアントには通知されていなかった。 @@ -469,9 +485,10 @@ X軸はメッセージ伝達にかかった秒数(ms)、 Y軸は画像データのサイズ(Byte)である。 画像データの伝達はほぼ1秒以内に収まっているが、容量が小さい場合でも時間がかかる場合がある。 -それはその送信の前に大容量の画像を送信した後の回線のDelayが残っているためだと考えられる。 +それはその送信の前に大容量の画像を送信した後の回線の Delay が残っているためだと考えられる。 -また、深さ3で極端に遅い場合がある。 遅い原因として、1つの Node がボトルネックになっていることが判明している。 +また、深さ3で極端に遅い場合がある。 +遅い原因として、1つの Node がボトルネックになっていることが判明している。 このような極端に遅い Node をそのまま木に配置した場合、その Node の子 Node 以下に影響を及ぼすおそれがある。 \begin{figure}[htbp] @@ -506,12 +523,34 @@ \label{fig:depth4} \end{figure} -\section{ボトルネックになっているノードへの対処} +\newpage + +\section{ボトルネックになっている Node への対処} +画像データを受け取る時間が遅い Node をそのまま木構造に配置しているとその子 Node 以下に影響を及ぼす。 +そのためネックになっている Node への対処が必要である。 + +ボトルネックになっている Node への対処として CHECK\_DELAY\_REPLAY を使用している。 +CHECK\_DELAY\_REPLAY を受け取った Root Node はその Node がボトルネックなっているかの判断を行う。 +ボトルネックになっているなら Root Node の nodeList からその Node を削除する。 +削除した Node の場所には末端の Node を配置するように CONNECT\_TO メッセージを送信する。 +nodeList から削除された Node は接続されたままなので、データの受信は行うが、 木構造には入らないため、ネックになっている Node の下に新しい Node が繋がることはない。 +そのためネックになっている Node 以下に影響を及ばすことがない。 + +図\ref{fig:fixTree}は 6台の Node が接続している状態で Node1 がネックになっている場合の木の再構成を示している。 + +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=0.4]{./images/fixTree.pdf} + \end{center} + \caption{ボトルネックになっている Node への対処} + \label{fig:fixTree} +\end{figure} % 今後の課題 \chapter{まとめ} \section{NATを越えた画面切り替え} + \section{新機能の評価} % 参考文献
--- a/paper/reference.bib Sat Feb 13 19:00:18 2016 +0900 +++ b/paper/reference.bib Sun Feb 14 19:53:15 2016 +0900 @@ -48,7 +48,7 @@ } @article{parusu:2016a, - author = "{Tatsuki Iha and Shinji KONO}", + author = "{Tatsuki IHA and Shinji KONO}", title = "有線LAN上のPC画面配信システムTreeVNCの改良", journal = "第57回 プログラミング・シンポジウム", month = "jan",