view paper/prosym.tex @ 12:aaa9a0f50d3f

Update 11_29_19:16
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Sun, 29 Nov 2015 19:16:17 +0900
parents 6daaf5e03e4d
children 956ebac058fb
line wrap: on
line source

% withpage: ページ番号をつける (著者確認用)
\documentclass[dvipdfmx]{ipsjprosym}
\usepackage[dvipdfmx]{graphicx}
\usepackage{url}
\usepackage{listings, jlisting}
\lstset{%
  language={java},%使用言語
  basicstyle={\small},%書体
  commentstyle={\small\itshape},%コメントの書体
  keywordstyle={\small\bfseries},%キーワードの書体
  %identifierstyle={\small},%
  %ndkeywordstyle={\small},%
  stringstyle={\small},%文字列の書体
  frame={trlb},%外枠
  breaklines=true,%改行
  columns=[l]{fullflexible},%
  xrightmargin=0zw,%
  xleftmargin=3zw,%
  numbers=left,%行番号の表示
  numberstyle={\scriptsize},%行番号の書体
  numbersep=1zw,%
  stepnumber=1,
  lineskip=-0.5ex,%
  captionpos=b,%キャプションの位置
  moredelim=**[s][\color{red}]{\"compressed}{\"},
}
\renewcommand{\lstlistingname}{Code}
\input{dummy.tex} %% Font 

\begin{document}

% ユーザー定義したマクロなど
\makeatletter
\let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
\def\<{\(\langle\)} 
\def\>{\(\rangle\)} 
%\def\|{\verb|} 
\def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} 
\def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\} 
\def\LATEX{\iLATEX\Large} 
\def\LATEx{\iLATEX\normalsize} 
\def\LATex{\iLATEX\small} 
\def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em 
\   T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} 
\def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi} 
\def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi} 
\def\Quote{\list{}{}\item[]} 
\let\endQuote\endlist
\def\TT{\if@LaTeX@e\tt\fi}
\def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
    $\backslash$#1\fi}

% Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{有線 LAN 上のPC画面配信システムTreeVNCの改良}

\affiliate{IE}{琉球大学工学部情報工学科}

\author{伊波 立樹}{Tatsuki IHA}{IE}
\author{河野 真治}{Shinji KONO}{IE}

\begin{abstract}
    ゼミや授業等で、それぞれがPC端末を持っている場合では、PCの機能を活かしたコミュニケーションが可能である。教員が操作する画面をそのまま学生に配信したり, ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
    画面配信システムTreeVNCは参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる仕組みを取っている。そのため,多人数が参加しても処理性能が下がらない。また、ツリーのルートが参照しているVNCサーバーを変更することで、ケーブルの差し替えなしに画面の切替が可能となる。
    今研究ではTreeVNCの改良として、WANへの対応、 マルチディスプレイへの対応を行った。
\end{abstract}

\begin{jkeyword}
\end{jkeyword}

\maketitle

% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{研究背景と目的}
% 後で考える
ゼミや授業等で、それぞれがPC端末を持っている場合では、
PCの機能を活かしたコミュニケーションが可能である。

画面配信システム TreeVNC\cite{oc:thesis}\cite{taninari:2012a}は参加したクライアントをバイナリツリー状に接続し、
配信コストをクライアントにバランスさせる仕組みになっている。
そのため、授業で先生の画面を表示する際、多人数の生徒が参加しても処理性能が下がらない。

また、ツリーのルートが参照している VNCサーバーを変更することで、共有する画面の切替が可能となる。
これはゼミの際に発表者の画面切り替えを円滑に行うための機能で、プロジェクターなどのケーブルの差し替えの手間を省くことが出来る。

本研究では WAN 、マルチディスプレイへの対応を行った。
WANへの対応として、新しい接続方法を提案し、実装を行った。
また、マルチディスプレイへの対応としては配信する際に、配信するディスプレイ情報を取得し、配信を行うことで、対応した。

\section{画面配信システムTreeVNC}
\subsection{VNCについて}
VNC(Virtual Network Computing) は、 RFBプロトコルを用いて遠隔操作を行うリモートデスクトップソフトウェアである。
VNC はサーバー側とクライアント(ビューア)側に分かれている。 サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能とする。

\subsection{RFBプロトコル}
RFB(remote frame buffer)プロトコル\cite{rfbProtocol}とは、自身の画面を送信し、ネットワーク越しに他者の画面に表示するプロトコルである。
ユーザが居る側をRFBクライアント側と呼び、Framebufferへの更新が行われる側はRFBサーバと呼ぶ。
Framebufferとは、メモリ上に置かれた画像データのことである。
RFBプロトコルでは、最初にプロトコルバージョンの確認や認証が行われる。
その後、クライアントに向けてFramebufferの大きさやデスクトップに付けられた名前などが含まれている初期メッセージが送信される。
RFBサーバ側はFramebufferの更新が行われるたびに、RFBクライアントに対してFramebufferの変更部分だけを送信する。
更にRFBクライアントのFramebufferUpdateRequestが来るとそれに答え返信する。
RFBプロトコルは、描画データに使われるエンコードが多数用意されており、また独自のエンコードを実装することもできるプロトコルである。

\subsection{多人数で VNC を使用する時の問題点}
VNCを使用すればクライアント側にサーバー側の画面を表示することが可能である。 
しかし、多人数のクライアントが1つのサーバーに接続してしまうと処理性能が落ちてしまうという問題点がある。

また、 ゼミ等の発表で画面配信者が頻繁に切り替わる場合、
配信者が替わる度にアプリケーションを終了し、接続をし直さないといけないという問題がある。

\subsection{TreeVNC の構造}
TreeVNC は Java を用いて作成された TightVNC(Tight Virtual Network Computing)\cite{tightvnc} を元に作成されている。

TreeVNC は クライアント同士を接続させ、画面描画のデータを受け取ったクライアントが次のクライアントにデータを流す方式を取っている。
また、サーバへ接続しに来たクライアントをバイナリツリー状に接続する(図\ref{fig:tree})。
バイナリツリー状に接続することで、$N$台のクライアントが接続しに来た場合、画面配信の画像データをコピーする回数は従来の VNC ではサーバ側で$N$回する必要があるが、TreeVNCでは各ノードが2回ずつコピーするだけで済む。 

バイナリツリーのルートのノードを Root Node と呼ぶ。 
Root Node は子ノードにデータを流す機能に加え、各ノードの管理と VNC サーバーから流れてきた画像データの管理を行う。 

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/TreeVNC.pdf}
    \end{center}
    \caption{構成される木構造}
    \label{fig:tree}
\end{figure}


\subsection{node 間で行われるメッセージ通信}
RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。
TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。


\begin{table}[h!]
  \caption{通信経路とメッセージ一覧}
  \large
  \scalebox{0.4} {
  \begin{tabular}{|l|l|l|} \hline
    通信経路            & message                    & 説明 \\ \hline \hline
                        & FIND\_ROOT                 & TreeVNC接続時にrootを探す。 \\ \cline{2-3}
    send direct message & WHERE\_TO\_CONNECT         & 接続先をrootに聞く。 \\ \cline{2-3}
    (child to root)     & LOST\_CHILD                & 子nodeの切断をrootに知らせる。 \\ \hline \hline

                        & FIND\_ROOT\_REPLY          & FIND\_ROOTへの返信。 \\ \cline{2-3}
    send direct message & CONNECT\_TO\_AS\_LEADER    & 左子nodeとして接続する。接続先のnodeが含まれている。 \\ \cline{2-3}
    (root to child)     & CONNECT                    & 右子nodeとして接続する。接続先のnodeが含まれている。 \\ \hline \hline

    message down tree   & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。\\ \cline{2-3}
    (root to child)     & CHECK\_DELAY               & 通信の遅延を測定する。 \\ \hline \hline

    message up tree     & CHECK\_DELAY\_REPLY        & CHECK\_DELAYへの返信。 \\ \cline{2-3}
    (child to root)     & SERVER\_CHANGE\_REQUEST    & 画面切り替え要求。 \\ \hline \hline

                        & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求。 \\ \cline{2-3}
    send message        & SET\_PIXEL\_FORMAT         & pixel値の設定。 \\ \cline{2-3}
    (root to VNCServer) & SET\_ENCODINGS             & pixelデータのencodeTypeの設定。 \\ \cline{2-3}
                        & KEY\_EVENT                 & キーボードからのイベント。 \\ \cline{2-3}
                        & POINTER\_EVENT             & ポインタからのイベント。 \\ \cline{2-3}
                        & CLIENT\_CUT\_TEXT          & テキストのカットバッファを持った際のmessage。 \\ \hline \hline

                        & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。 \\ \cline{2-3}
    send message        & SET\_COLOR\_MAP\_ENTRIES   & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3}
    (VNCServer to root) & BELL                       & ビープ音を鳴らす。 \\ \cline{2-3}
                        & SERVER\_CUT\_TEXT          & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline
  \end{tabular}
  }
  \label{tb:message}
\end{table}


図\ref{fig:message}は TreeVNC で Node が Root Node に接続し、画像データを受信するまでのメッセージ通信の様子である。
図 \ref{fig:message}の手順として

\begin{itemize}
    \item 接続を行う Node (以下 Client Node)はMulticast通信で Root Node に対してFIND\_ROOTを送信する(1:findRoot())
    \item Root NodeがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
    \item Client Node 側で、どのRoot Nodeに接続するかを選択するパネルが表示される
    \item Client Node はパネルで接続するRoot Nodeを選択し、Rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
    \item 受信した Root Node は Client Node の接続先をCONNECT\_TOで送信する(4:connectTo)
    \item Client Node は Root の指定した接続先に接続しに行く
    \item Root Node, Client Node間の接続が確立後、Root Node から Clinet Node に対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(5:framebufferUpdate())
\end{itemize}

を行っている。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=65mm]{./pic/message.pdf}
    \end{center}
    \caption{node 間で行われるメッセージ通信}
    \label{fig:message}
\end{figure}


\subsection{配信画面切り替え}
ゼミでは発表者が順々に入れ替わる。発表者が入れ替わる度に共有する画面の切り替えが必要となる。
ゼミを円滑に進めるために、画面の切り替えをスムーズに行いたい。

画面の共有にプロジェクタを使用する場合、 発表者が変わる度にケーブルの抜き差しを行う必要がある。
その際に、ディスプレイ解像度を設定し直す必要が出たり、 接続不良が起こる等の煩わしい問題が生じることがある。

従来のVNCを使用する場合、 画面の切り替えの度に一旦VNCを終了し、発表者のVNCServerへと再接続を行う必要がある。

TreeVNC は、配信者の切り替えの度に生じる問題を解決している。
TreeVNC を立ち上げることで、ケーブルを使用する必要なしに、各参加者の手元のPCに発表者の画面を共有することができる。
画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、ビューワの ``Share Screen'' ボタンを押すことによって、配信者の切り替えを行うことができる。

TreeVNC の Root Node は配信者の VNCServer と通信を行っている。
VNCServer から画面データを受信し、そのデータを 子 Node へと送信している。
配信者切り替え時に ``Share Screen'' ボタン が押されると、
Root Node は ``Share Screen'' ボタン を押したクライアントの VNC サーバー と通信を始める。
そのためTreeVNCは配信者切り替えの度に VNC を終了し、再接続する必要がない。

\section{TreeVNCの新機能}
\subsection{QUALITYモードとSPEEDモード}
高解像度のまま拡大・縮小の処理を行うと、
PC のスペックによっては描画処理に時間がかかってしまうことがある。
配信者の画面をリアルタイムに取得するため、
描画処理に時間のかからないモードを追加する。

画像描画処理には、
高画質優先の QUALITY モードと描画速度優先の SPEED モードがある。
今まで TreeVNC は QUALITY モードで使用していた。

今回、どちらのモードを使用するかを ビューワ から変更出来るようにした。
これにより、描画処理の遅延を解決することができた。

\subsection{マルチディスプレイ対応}
画面配信側のPCがマルチディスプレイの場合、
VNCServer からは複数の画面全体の画像データが送信されてしまう。

授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。
そこで、画面を共有する際、ディスプレイを選択させ、画面共有を行う機能を追加した。

ディスプレイの情報は個々のクライアントでしか取得ができない。
そのため、配信側は画面の切替を行う際に、ディスプレイを選択し、そのディスプレイの左上と右下の座標を取得する。
その座標を Root Node への画面切り替えを要求する SERVER\_CHANGE\_REQUEST message に付加させる。 
Root Node は 配信側の VNCServer に画像データを要求する FRAMEBUFFER\_UPDATE\_REPLY message に送信された座標を付加する。 
VNC サーバーは要求された座標内の画像データを FRAMEBUFFER\_UPDATE message で Root Node に送信する。 
これにより、一画面のみの表示が可能となる。

図\ref{fig:multidisplay} は Display1 のみを画面共有する例を示している。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/shareScreenToMultiDisplay.pdf}
    \end{center}
    \caption{マルチディスプレイへの対応}
    \label{fig:multidisplay}
\end{figure}

\subsection{無線LANへの対応}
授業でTreeVNCを使用する場合、
有線を使用するか否かは学生によって違う。
TreeVNCを有線・無線の両方からの接続に対応したい。

従来の TreeVNC は、クライアントの接続する木構造が単一であった。
そのため、単一のネットワークインターフェースでしか使用することができなかった。

この問題を解決するために、 図\ref{fig:multinetworktree}の様に、ネットワークインターフェース別に 木構造を形成するように設計した。

\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=70mm]{./pic/MultiNetworkTree.pdf}
  \end{center}
  \caption{Multi Network Tree}
  \label{fig:multinetworktree}
\end{figure}

TreeVNC は Root Node が TreeManager というオブジェクトを持っている。
TreeManager は TreeVNC の接続部分を管理している。
TreeManager では木構造を管理する nodeList が生成される。
この nodeList を元に、新しい Client Node の接続や、切断検出時の接続の切り替え等を行う。

Root Node の保持しているネットワークインタフェース毎にTreeManager を生成する様に変更した。
新しい Client Node が接続してきた際、 interfaces から Client Node のネットワークインタフェースと一致する TreeManager を取得する。
その TreeManager に、Client Node 接続の処理を任せる。
こうすることによって、TreeVNC を複数のネットワークインターフェース別に
木構造を構成することができる。

\subsection{WANへの対応}
遠隔地からでもゼミや授業に参加できるよう、
別ネットワークから TreeVNC への接続を可能にした。

図\ref{fig:directConnection} に別ネットワークからの接続を示す。
別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。
この接続を Direct Connection と呼ぶ。

Direct Connection した Client Node はそのネットワークの Root Node になる。 
そのネットワークの他の Client Node はそのネットワークの Root Node に接続し、木構造を生成する。

配信側の Root Node は Direct Connection で接続された Root Node に対して Framebuffer Update で 画像データを送信する。
Framebuffer Update が送信された Root Node は そのネットワークの Client Node に対して Framebuffer Update を送信する。

これにより、別ネットワークでの画面共有が可能となる。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=80mm]{./pic/directConnection.pdf}
        \caption{遠隔地 Node からの接続}
        \label{fig:directConnection}
    \end{center}
\end{figure}


\section{TreeVNC の評価}
\subsection{木の深さによる画像データ伝達の遅延}
VNCサーバー から受信する画像データ、 TreeVNC で扱われるメッセージ通信は構成された木を伝って伝達される。
接続する人数が増える毎に木の段数は増えていく。 そこで Root Node から木の末端の Clinet Node までの画像データ伝達の遅延を検証する実験を行った。

\subsection{実験環境}
授業を受講している学生が TreeVNC を使用した状態で実験を行った。
TreeVNC には最大で17名が接続していた。

\subsection{メッセージを使用した実測}
TreeVNC を伝搬するメッセージに、CHECK\_DELAY・CHECK\_DELAY\_REPLY を追加した。
CHECK\_DELAY は Root Node から 末端の Client Node まで伝達するメッセージと画像データ (図\ref{fig:checkdelay}, 左)、
CHECK\_DELAY\_REPLY は各 Client Node から Root Node まで伝達するメッセージ(図\ref{fig:checkdelay}, 右)である。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=80mm]{./pic/checkDelay.pdf}
    \end{center}
    \caption{CHECH\_DELAY, CHECK\_DELAY\_REPLY}
    \label{fig:checkdelay}
\end{figure}

CHECK\_DELAY メッセージは送信時刻を付けて送信する。
Root Nodeから CHECK\_DELAY 送信し、末端の Client Node まで各 Node を伝いながら伝達して行く。

CHECK\_DELAY\_REPLY には CHECK\_DELAY から受け取った送信時刻に画像データのサイズを付けて送信する。
CHECK\_DELAY を受け取った各 Client Node は CHECK\_DELAY\_REPLY を接続している親 Node に送信する。

CHECK\_DELAY\_REPLY を受け取った Root Node はメッセージと画像データの伝達にどれだけの時間がかかったかを計算する。
データ計算方法を以下のソースコード\ref{calc}に記述する。 この変数``time''は CHECK\_DELAY\_REPLY に付いている送信時刻である。

\begin{table}[htb]
    \begin{lstlisting}[label=calc, caption=遅延時間の計算方法]
    Long delay = System.currentTimeMillis() - time;
    \end{lstlisting}
\end{table}


\subsection{depth毎の遅延結果}
バイナリツリーで木を構成した場合、 Node 数が17台だと深さが4となる。
各木構造の階層毎に、画像データの伝搬にかかった時間を測定した。

図\ref{fig:depth}は遅延の分布を示した散布図である。
X軸はメッセージ伝達にかかった秒数(ms)、 Y軸は画像データのサイズ(Byte)である。


- 大体1秒以内

- 大容量の画像の送信の後のDelayが残っているため、容量が小さいとこでも時間がかかる場合がある

- Depth3に極端に遅い場合がある → 1つのnodeがネックになっている

- 極端に遅いやつを下に持っていくアルゴリズムが必要(これはまとめにも書く)

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth1.eps}
    \end{center}
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth2.eps}
    \end{center}
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth3.eps}
    \end{center}
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth4.eps}
    \end{center}
    \caption{深さ毎のデータサイズと遅延の関係}
    \label{fig:depth}
\end{figure}

\section{まとめ}
本研究では画面配信システムTreeVNCをマルチディスプレイ、WAN に対応させた。

マルチディスプレイに対応したことで、 配信者が配信したいディスプレイを選択し、画面配信することが可能となった。

WANに対応することで別ネットワークにいるユーザーが TreeVNC に参加することが可能となった。

今後の課題として、画面切り替えの安定化、 WAN での画面切り替え、 ユーザビリティの向上、 共有機能の追加を行う。

現在のTreeVNCでは、share button を押すと、その時配信されている画面から、自動的に画面が切り替わってしまうという問題がある。
それを防ぐために share button が押されるとその時の配信者に切り替え確認を行う処理を追加する。

今回追加した Direct Connection などの一部の機能はコマンドラインオプションで指定する必要があるため、一般ユーザーでは操作するのが困難である。
そこで、 今までコマンドラインオプションで指定していた機能を ビューワ で操作するように変更を行う。

共有機能の追加としては、音声、講義中の質問・意見 等が挙げられる。

- 新機能の評価方法、評価

- 極端に遅いやつを下に持っていくアルゴリズム

\nocite{*}
\bibliographystyle{ipsjunsrt}
\bibliography{prosym}

\end{document}