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
Binary file paper/images/directConnection.graffle has changed
Binary file paper/images/directConnection.pdf has changed
Binary file paper/images/lostChild.graffle has changed
Binary file paper/images/vnc.graffle has changed
Binary file paper/images/vnc.pdf has changed
Binary file paper/main.pdf has changed
--- 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",