view Papaer/midterm.tex @ 8:cde98651454a

update midterm and waiting for correction
author e165729 <e165729@ie.u-ryukyu.ac.jp>
date Mon, 21 Oct 2019 23:27:44 +0900
parents 7c0c0ed770de
children 0ba9525c86a6
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{here}
\usepackage{url}
%\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{Image/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{分散フレームワークChristieによる画像配信システムTreeVNCの実装\\
Implementation of screen delivery software TreeVNC by distributed framework Christie}
\author{165729B 氏名 {安田}{亮} 指導教員 : 河野 真治}
\date{}
\maketitle
\thispagestyle{fancy} 

\section{研究目的}
現代の講義やプレゼンなどでは,PC画面で用意した資料を見ながら進行することが多い.参加者はプロジェクタに注視する必要があり,手元のPCと交互に見る必要がある場合両方に集中を割く必要があり,負担になる可能性がある.また,発表者が交代する際にケーブルの差し替えを行う必要があり,PCと接続するアダプターによっては正常にPC画面を表示できない場合がある.

%当研究室では画面共有のより良い手法の1つとしてTreeVNCを開発している.

当研究室で開発しているTreeVNC\cite{taninari:2011a}は発表者のPC画面を参加者のPC画面に表示する画面配信ソフトウェアである.しかし既存のTreeVNCでは画面共有する際の送信するデータ量が多いため,有線LANでの使用に限られている.広く使われている無線LANに対応するためにMulticastでのデータ通信の実装やデータの分割・圧縮を行い,TreeVNCのMulticastの可能性を評価する.

また,当研究室で開発を行なっている分散フレームワークChristieでTreeVNCを再実装を行う.Christieを用いることでTreeVNCにおける長期間開発してきたことに伴うアルゴリズムの複雑さの解消および,メッセージ伝達速度の維持・向上の検証を行う.

\section{VNC}
VNC(Virtual Network Computing)\cite{vnc}は,サーバ側とクライアント(ビューワー)側からなるリモートデスクトップソフトウェアである.遠隔操作にはサーバを起動し,クライアント側がサーバ側に接続を行うことで可能としている.また,動作にはRFBプロトコル\cite{rfbprotocol}を用いている.TreeVNCはVNCを利用した画面配信を行なっている.しかし通常のVNCでは配信側のPCに,全ての参加者への配信を行う負担がかかってしまう.


RFB(Remote Frame Buffer)プロトコルとは,自身のPC画面をFramebufferと呼ばれるメモリ上に置かれた画像データをネットワーク上に送信し,他者のPC画面に表示を行うプロトコルである.


%\begin{figure}[htb] %分量次第で削除する
%\begin{center}
%    \includegraphics[width=8cm, height=4cm]{Image/vnc-crop.pdf}
%\caption{従来のVNCの接続方法}
%\label{fig:UntilVNC}
%\end{center}
%\end{figure}

\begin{figure}[htb] 
 	\begin{center}
    		\includegraphics[width=7cm, height=3.5cm]{Image/treevnc-crop.pdf}
    		\caption{TreeVNCの接続方法}
    		\label{fig:TreeVNCstruct}
  	\end{center}
\end{figure}

\section{TreeVNC}
TreeVNCはサーバに接続してきたクライアントをバイナリツリー状に接続する.接続してきたクライアントをノードとし,その接続したノードの下に新たなノード2つを接続していく.これにより,人数分のコピーと送信の手間を分散することが可能である(図\ref{fig:TreeVNCstruct}).


バイナリツリー状に接続することで,N台のクライアントが接続しにきた場合,従来のVNCではサーバ側がN回コピーを行なって配信する必要があるが,TreeVNCでは各ノードが2回ずつコピーをするだけで配信が可能となる.バイナリツリールートのノードをRoot Nodeと呼び,そこに接続されるノードをNodeと呼ぶ.Root Nodeは子Nodeにデータを渡す機能,各Nodeの管理,VNCサーバから送られてきたデータの管理を行なっている.各Nodeは,親Nodeから送られてきたデータを自身の子Nodeに渡す機能,子Nodeから送られてきたデータを親Nodeに渡す機能がある.

\section{Multicast}
画面配信のデータ量は膨大なため,現在のTreeVNCでVNCServerに無線LAN接続を行なった場合,画面配信の遅延が大きくなってしまう.バイナリツリーを構成している中に無線LANで接続を行なっているNodeが存在すると,そのNodeに接続されている全てのNodeもその遅延の影響を受けてしまう.ここでWifiのMulticastの機能を用いることで,配信側にもWifiを使用することが可能であると考えられる.Tree Rootは無線LANにUpdateRectangleをMulticastで一度だけ送信する.

WifiのMulticast packetのサイズは64Kbyteが最大となっている.HDや4Kの大きさの画面更新は8MB * 8byteとなり圧縮前で64MB程度となる.これを圧縮しつつ,64Kbyte毎のパケットに変換して送る必要がある.WifiのMulticast packetは確実に送られることは保障されていない.通し番号を付けて欠落を検知することはできるが,再送処理は複雑であることが予想される.
そこでまずBlockingについて考察と実験を行う.

\section{Blocking}
RFBのUpdateRectangleは1つのUpdateRectangleの中に複数のRectangleで構成されており,それぞれのRectangleにはencoding typeを持っている.サーバからはZRLEという,可逆圧縮可能なzlib形式をencodeしたRectangleが送信される.Rectangleにはencodeされたデータが指定された長さだけ入っており,このデータは64x64のtileにさらに分割されている(図\ref{fig:Phase}).

\begin{figure}[htb] 
 	\begin{center}
    		\includegraphics[width=7cm, height=3.5cm]{Image/FrameUpdateRectangle.pdf}
    		\caption{Rectangleの分類}
    		\label{fig:Phase}
  	\end{center}
\end{figure}

このパケットを64Kbyteに収まる3つのRectangleに再構成する.この時にtile内部は変更する必要はないが,Rectangleの構成は図\ref{fig:Phase}のように変わる.ZRLEを展開しつつ,パケットを構成する必要がある.

\section{Christie}
Christie\cite{christie}は本研究室で開発している分散フレームワークである.ChristieはTreeVNCと同様javaで記述されおり,以下のような概念を持っている.

\begin{itemize} 
\item CodeGear(以下CG)
\item DataGear(以下DG)
\item CodeGearManager(以下CGM)
\item DataGearManager(以下DGM)
\end{itemize}

CGはjavaのクラスやスレッドに相当し,DGは変数データに相当している.CGMはノードに相当し,CG, DG, DGMを管理する.DGMはDGを管理および格納を行う.

また,ChristieにはTopologyManagerという機能が実装されている.TopologyManagerはChristie上のCGM(ノード)をTopologyとして静的・動的に形成するノードである.TopologyManagerでTreeVNCのNodeの生成Node間の接続を行うことで,TreeVNCが持っているアルゴリズムの複雑さの解消を図る.

\section{まとめ	}
TreeVNCにWifi上のMulticast packetを用いる手法について考察した.Blockingは実装中であり,再圧縮の時間は全画面の場合でも実用的な時間で済むことが予想されている.Multicastで画面配信を行った際にどのくらいパケットロストするか不明であるため,さらなる実験が必要である.また,パケットロストした部分の検知・再送処理はTreeVNCをさらに複雑化させるため行わず,一定期間で画面データを全て送ることによって対処する.

Christieへの再実装のタイミングはBlockingを一通り実装したのちに行う予定である.現在のTreeVNCはサーバ側を起動してからクライアント側の接続を行わなくてはならないが,TopologyManagerでバイナリツリーの構成を行うことで待ち合わせが可能となり,どちらから起動しても問題なくなる.

その他残っている課題としてはマルチウィンドウの処理部分を行っているRetinaのAPIがjava9以前と以降で変更があったため,javaの最新版に対応できるよう修正を行う.


%\begin{thebibliography}{9}

%\bibitem{1}

%\end{thebibliography}


\nocite{*}
\bibliographystyle{junsrt}
\bibliography{reference}

\end{document}