view FinalMid/FinalMid_165729B.tex @ 37:f7a79686256d default tip

update mid
author riono <e165729@ie.u-ryukyu.ac.jp>
date Mon, 17 Feb 2020 00:04:06 +0900
parents a2a82eead86f
children
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{abstract}
\usepackage[dvipdfmx]{graphicx}
\usepackage{multirow}
\usepackage{here}
\usepackage{cite}
\usepackage{url}
\usepackage{geometry}

\usepackage{caption}


\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/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}


\renewcommand{\abstractname}{Abstract}
\begin{document}
\title{画面配信システム TreeVNC のMulticast 導入}
\author{165729B 氏名 {安田}{亮} 指導教員 : 河野真治}
\date{}
\twocolumn [
\maketitle
\centering
\begin{onecolabstract}
In lectures and seminars,the materials prepared on the PC screen is used.
Participants need to concentrate on the projector,which can be a burden when cross-referencing with the PC at hand.
When the presenter is replaced,the cable needs to be replaced by switching the presenter's PC screen,
depending on the adapter connected to the PC,the PC screen may not be displayed properly.
TreeVNC,which is being developed in our laboratory,is a screen distribution system that displays the presenter's PC screen on the participant's PC.
By connecting clients connected to the server in the form of a binary tree and distributing the delivery cost,
It is designed so that the processing performance does not decrease even if many people connect.
In addition,there is a mechanism for freely switching the screen of the presenter,which is convenient for presentations at seminars and the like.
Currently,TreeVNC screen sharing is limited to wired LANs because of the large amount of data.
To support widely used wireless LAN,
we evaluate the implementation of data communication in multicast and the data division 
and compression method,and evaluate the possibility of multicast in TreeVNC.
\end{onecolabstract} ]

\thispagestyle{fancy}



\section{画面配信ソフトウェアTreeVNCの活用}
現代の講義やゼミではPC画面で用意した資料をプロジェクタに映しながら進行することが多い。
発表者のPCを接続するたびにケーブルを差し替える必要があり、発表者のPCによっては接続するアダプターの種類や解像度の設定により、正常にPC画面を表示できない場合がある。また、参加者もプロジェクタに集中を割く必要があり、同時に手元のPCで作業を行う場合、集中の妨げとなってしまう。

当研究室で開発している画面配信システムTreeVNC\cite{taninari:2011a}は、発表者のPC画面を参加者のPC画面に表示するソフトウェアである。サーバに接続したクライアントをバイナリツリー状に接続することで、配信コストをクライアントに分散させる仕組みになっている。
しかし、画面共有は送信するデータ量が多いため、無線LANで接続を行なった際に有線接続よりも遅延が大きくなってしまう。そこで本研究では、Multicastでのデータ通信の考察やデータの分割・圧縮方法の実装、評価を行う。

\section{TreeVNCの基本概念}
Virtual Network Computing\cite{vnc}(以下VNC)は、サーバ側とクライアント(ビューワー)側からなるリモートデスクトップソフトウェアである。遠隔操作にはサーバを起動し、クライアント側がサーバに接続することで可能としている。特に画面送信の動作にはRemote Frame Buffer(以下RFB)プロトコル\cite{rfbprotocol}を用いている。

TreeVNCはjavaを用いて作成されたTight VNC\cite{tightvnc}を元に作成されている。 TreeVNCはVNCを利用して画面配信を行っているが、従来のVNCでは配信(サーバ)側のPCに全ての参加者(クライアント)が接続するため負荷が大きくなってしまう。

そこでTreeVNCではサーバに接続を行ってきたクライアントをバイナリツリー状(木構造)に接続する。接続してきたクライアントをノードとし、その下に新たなノードを最大2つ接続していく。これにより人数分のデータのコピーと送信の手間を分散することができる(図\ref{fig:TreevncStruct})。

\begin{figure}[htb] %PDF
\begin{center}
\includegraphics[scale=0.28]{pic/TreevncStruct.pdf}
\caption{TreeVNCでの接続構造}
\label{fig:TreevncStruct}
\end{center}
\end{figure}


%\thispagestyle{fancy}


バイナリツリー状に接続することで、N台のクライアントが接続を行ってきた場合、従来のVNCではサーバ側がN回のコピーを行って画面配信する必要があるが、TreeVNCでは各ノードが最大2回ずつコピーするだけで画面配信が可能となる。



TreeVNCはZRLEE\cite{taninari:2012a}というエンコードタイプでデータのやり取りを行う。ZRLEEはRFBプロトコルで使用できるZLREというエンコードタイプを元に生成される。

ZLRE(Zlib Run-Length Encoding)とは可逆圧縮可能なZlib形式\cite{zlib}とRun-Length Encoding方式を組み合わせたエンコードタイプである。


ZLREはZlibで圧縮されたデータとそのデータのバイト数がヘッダーとして付与され送信される。


Zlibはjava.util.zip.deflaterとjava.util.zip.inflaterで圧縮と解凍が行える。しかしjava.util.zip.deflaterは解凍に必要な辞書を書きだす(flush)ことが出来ない。従って、圧縮されたデータを途中から受け取ってもデータを正しく解凍することが出来ない。



そこでZRLEEは一度Root Nodeで受け取ったZRLEのデータをunzipし、Update Rectangleと呼ばれる画面ごとのデータに辞書を付与してzipし直すことで、初めからデータを読み込んでいなくても解凍を出来るようになっている(図\ref{fig:ZRLEtoZRLEE})。

\begin{figure}[htb] %PDF
\begin{center}
\includegraphics[scale=0.5]{pic/EncodeZRLEtoZRLEE.pdf}
\caption{ZRLEEへ再圧縮されたデータを途中から受け取った場合}
\label{fig:ZRLEtoZRLEE}
\end{center}
\end{figure}


\section{Multicatに向けたBlockingの実装}
画像配信のデータ量は膨大なため、現在のTreeVNCでVNCサーバに無線LAN接続を行なった場合、画面配信の遅延が大きくなってしまう。

無線LAN接続時の場合でも画面切り替えの機能は有効であるため、VNCサーバ側が無線LANで接続を行い、クライアント側は有線接続を行うことで画面配信が可能となる。ここで、WifiのMulticastの機能を用いてクライアント側でもWifiを使用することが可能であると考えられる。

WifiのMulticast Packetのサイズは64KByteが最大となっている。4Kディスプレイを例にとると、4Kディスプレイの大きさの画面更新には8MByte(画素数) \* 8Byte(色情報)で圧縮前で、64MByte程度となる。これを圧縮しつつ、64kbye毎のパケットに変換して送る必要がある。


VNCサーバから受け取ったZRLEで構成された画像データをZRLEEに変換、再構成するためにTileLoopというルーチンで再構成を行う。

TileLoopはVNCサーバから受け取ったZRLEを図\ref{fig:BlockingUpdateRectangle}のようにRectangleを分割し、ZRLEEに再圧縮を行ったPacketを生成する。

\begin{figure}[htb] %PDF
\begin{center}
\includegraphics[scale=0.4]{pic/FrameUpdateRectangle.pdf}
\caption{Rectangleの分割}
\label{fig:BlockingUpdateRectangle}
\end{center}
\end{figure}



Tile内はパレットなどがある場合があるが、通常はRun Length encodeされたRGBデータである。
これまでのTreeVNCではVNCサーバから受け取ったRectangleを分割せずにZRLEEへ再構成を行なっていた。これをMluticastのためにデータを64KByteに収まる最大3つのRectangleに再構成する(図\ref{fig:Packet})。この時にTile内部は変更する必要はないが、Rectangleの構成は変わる。ZLREを展開しつつ、Packetを構成する必要がある。

\begin{figure}[htb] %PDF
\begin{center}
\includegraphics[scale=0.3]{pic/Blocking.pdf}
\caption{ZRLEEのPacketの構成と分割されたRectangle}
\label{fig:Packet}
\end{center}
\end{figure}



64KByteのPacketの中には複数のTileが存在するが、連続してRectangleを構成する必要がある。3つの
Rectangleの構成を下記に示す。

\begin{itemize}
\item 行の途中から始まり、行の最後までを構成するRectangle(図\ref{fig:BlockingUpdateRectangle}中 Phase0)
\item 行の初めから最後までを構成するRectangle(図\ref{fig:BlockingUpdateRectangle}中 Phase1)
\item 行の初めから、行の途中までを構成するRectangle(図\ref{fig:BlockingUpdateRectangle}中 Phase2)
\end{itemize}

ZRLEとjava.util.zip.deflaterを使用した圧縮では、圧縮後のデータ長を予測することができない。Packetが満杯になってしまうと、圧縮書き込みの途中であっても圧縮書き込みが中断する。そのため、Packetのサイズを余分に確保する必要がある。したがって最初から最大の64KByteではなく、42KByteに制限を行っている。


java.util.zip.deflaterには下記の3種類の圧縮方法がある。

\begin{itemize}
\item NO\_FLUSH : Streamに格納されたデータを最高率で圧縮を行う。Streamにある入力データが規定量に満たない場合は圧縮されない
\item SYNC\_FLUSH : これまでにStreamに格納されたデータの圧縮を行う。ただし圧縮率が低下する可能性がある
\item FULL\_FLUSH : SYNC\_FLUSH同様、これまでにStreamに格納されたデータの圧縮を行う。異なる点はこれまでの辞書情報がリセットされるため、圧縮率が極端に低くなる可能性がある
\end{itemize}

TileLoopではデータの圧縮にNO\_FLUSHを利用していたが、圧縮後のデータがPacketの上限である64KByteを超えてしまうことが多発した。

これは圧縮されるための入力データの規定量が想定以上に多く、圧縮後のデータ長がMulticast Packetの上限を越えてしまったためである。

そこで圧縮率は悪くなるが、1Tile毎に確実にPacketに書き込まれるSYNC\_FLUSHを利用し、ZRLEEの生成を行う。また各行末ではFULL\_FLUSHを行い、Packetへの書き込みを行なっている。


\section{TreeVNC開発環境やソースコードの修正改善}
jarファイルの生成や、アプリケーションの生成を行なっているGradleのバージョンが4.8であったため、これを現行の最新バージョンである6.1でBuildできるよう対応を行なった。
また、Javaで使用しているRetinaディスプレイのAPIがJava8以前のものを使用していた。これはJava9以降で非推奨となってしまったため、Java9以降に対応できるようAPIの書き換えを行なった。

TreeVNCのデバッグにはこれまで、1つのPC上でサーバ側とクライアント側を同時に起動してデバッグを行なっていた。本来はこれを1つのプロセスでデバッグできる-pオプションがあるが、TreeVNCの仕様変更などにより、使用不可となっていた。Blockingデバッグは非常に多く行う必要があったため、-pオプションの修正を行い、1つのプロセスでデバッグを可能とした。

\section{まとめ}
本研究ではTreeVNCにWifi上のMulticast Packetを用いる手法の考察と実装と、Gradle6.1対応、java9以降のRetinaAPI対応、デバッグオプションの修正を行った。

画面圧縮にHardware supportedなMPEG4などを用いることができればより効率的な転送が可能であるが、ここではJava上で実装できる安易な方法をあえて選択した。Wifiの速度とMulticastの信頼性が高ければこれでも実用になる可能性がある。

Blocking後のMulticast 送信は実装中であるが、Multicast PacketのPacket loss率は、接続環境に依存すると思われるのでさらなる実験が必要だと思われる。

有線接続時よりも、画面共有の質が落ちるのはある程度はやむを得ないが、再送が必要である場合には、必要なプロトコルを実装する。

VNCサーバへの接続方法の分割についても、Node接続時のNetwork Interfacesから有線接続か無線LAN接続かを完全に区別できない。接続時にユーザが選択するか、接続時にある程度区別する処理を実装する必要がある。

Blockingでは1Tile毎にSYNC\_FLUSHを行なっているが、NO\_FLUSHを利用した時と比べて、圧縮率が下がってしまっているため、圧縮率の向上の手法を考察する必要がある。



\thispagestyle{fancy}
\nocite{*}
\bibliographystyle{junsrt}
\bibliography{reference}
%\addcontentsline{toc}{chapter}{参考文献}

\end{document}