annotate Paper/riono-sigos.tex @ 2:c52d91f27041

update
author riono <e165729@ie.u-ryukyu.ac.jp>
date Fri, 01 May 2020 22:23:46 +0900
parents 566fbbc15926
children 5bb2d3078c38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 %%
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 %% 研究報告用スイッチ
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 %% [techrep]
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 %%
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 %% 欧文表記無しのスイッチ(etitle,eabstractは任意)
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 %% [noauthor]
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 %%
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 %\documentclass[submit,techrep]{ipsj}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 \documentclass[submit,techrep,noauthor]{ipsj}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
14 %\usepackage[dvips]{graphicx}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
15 \usepackage[dvipdfmx]{graphicx}
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 \usepackage{latexsym}
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
17 \usepackage{url}
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 \def\|{\verb|}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 %
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 %\setcounter{巻数}{59}%vol59=2018
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 %\setcounter{号数}{10}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 %\setcounter{page}{1}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \begin{document}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
32 \title{Multicast Wifi VNCの実装と評価}
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
34 \affiliate{KIE}{琉球大学大学院理工学研究科情報工学専攻}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
35 \affiliate{IE}{琉球大学工学部工学科知能情報コース}
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
37 \author{安田 亮}{Ryo Yasuda}{KIE}[riono210@cr.ie.u-ryukyu.ac.jp]
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
38 \author{河野 真治}{Shinji Kono}{IE}[kono@ie.u-ryukyu.ac.jp]
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 \begin{abstract}
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
41 講義やゼミではPC画面で用意した資料を見ながら進行することが多い。PCごとにアダプターや解像度が異なっており、正常にPC画面を表示できない場合がある。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
42 当研究室で開発しているTreeVNCは、発表者のPC画面を参加者のPCに表示する画面配信システムである。TreeVNCの画像共有は、送信するデータ量が多いために有線LANでの接続に限られている。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
43 本稿では無線LANでもTreeVNCを利用可能にするため、Wifi上にシステム制御用の従来の木構造と、画像データ送信用のMulticastの両方を構築を行う。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
44 Multicastでは、サーバから送信された画像データUpdateRectangleを小さいパケットに分割し送信を行うよう実装した。
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \end{abstract}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \maketitle
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
49
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
50 \section{画面配信ソフトウェアTreeVNCの活用}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
51 現代の講義や発表、LTなどではPC画面で用意した資料をプロジェクタに移しながら進行することが多い。ゼミでは発表者を交代する際に、PC画面の切り替えを行う必要がある。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
52
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 その場合、発表者のPCを接続するたびにケーブルを差し替える必要がある。発表者のPCによっては接続するアダプターの種類や解像度の設定により、正常にPC画面を表示できない場合がある。また、参加者もプロジェクタに集中を割く必要があり、同時に手元のPCで作業を行う場合集中の妨げとなってしまう。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
54
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 当研究室で開発している画面配信システムTreeVNC\cite{taninari:2011a}は、発表者の画面を参加者のPC画面に表示するソフトウェアである。そのため、参加者は不自由なく手元のPCを操作しながら講義を受けることが可能になる。さらに、発表者の交代もケーブルの差し替えを行わずに、全体に共有する画面の切り替えが可能となっている。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
57 しかし、画面共有は送信するデータ量が多いため、無線LAN接続で接続を行なった際に有線接続よりも遅延が大きくなってしまう。そこで本研究では、Multicast通信の実装を行い無線LAN接続でもTreeVNCを利用可能にし、TreeVNCの有用性を評価することで講義やゼミを円滑に行えることを目標とする。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
58
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
59 \section{TreeVNCの基本概念}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
60 Virtual Network Computing\cite{vnc}(以下VNC)は、サーバ側とクライアント(ビューワー)側からなるリモートデスクトップソフトウェアである。遠隔操作にはサーバを起動し、クライアント側がサーバに接続することで可能としている。また、動作にはRFBプロトコルを用いている。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
61
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
62 Remote Frame Bufferプロトコル\cite{rfbprotocol}(以下RFB)とはVNC上で使用される、自身のPC画面をネットワーク上に送信し、他人のPC画面に表示を行うプロトコルである。画面が表示されるユーザ側をRFBクライアントと呼び、画面送信を行うためにFrameBufferの更新が行われる側をRFBサーバと呼ぶ。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
63
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
64 Framebufferとは、メモリ上に置かれた画像データのことである。RFBプロトコルでは、最初にプロトコルのバージョンの確認や認証が行われる。その後、RFBクライアントへ向けてFramebuffferの大きさやデスクトップに付けられた名前などが含まれている初期メッセージを送信する。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
65
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
66 RFBサーバ側はFramebufferの更新が行われるたびに、RFBクライアントに対してFramebufferの変更部分を送信する。さらに、RFBクライアントからFramebuffer - UpdateRequestが来るとそれに答え返信する。変更部分のみを送信する理由は、更新があるたびに全画面を送信すると、送信するデータ面と更新にかかる時間面において効率が悪くなるからである。
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
68 TreeVNCはjavaを用いて作成されたTight VNC\cite{tightvnc}を元に作成されている。TreeVNCはVNCを利用して画面配信を行なっているが、従来のVNCでは配信(サーバ)側のPCに全ての参加者(クライアント)が接続するため負荷が大きくなってしまう(図\ref{fig:vncStruct})。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
69  
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
70 \begin{figure}[htb] %PDF
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
71 \begin{center}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
72 \includegraphics[width=8cm]{fig/vncStruct.pdf}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
73 \caption{従来のVNCでの接続構造}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
74 \label{fig:vncStruct}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
75 \end{center}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
76 \end{figure}
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
78 そこでTreeVNCではサーバに接続を行なってきたクライアントをバイナリツリー状(木構造)に接続する。接続してきたクライアントをノードとし、その下に新たなノードを最大2つ接続していく。これにより人数分のデータのコピーと送信の手間を分散することができる(図\ref{fig:TreevncStruct})。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
79
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
80 \begin{figure}[htb] %PDF
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
81 \begin{center}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
82 \includegraphics[width=8cm]{fig/TreevncStruct.pdf}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
83 \caption{TreeVNCでの接続構造}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
84 \label{fig:TreevncStruct}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
85 \end{center}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
86 \end{figure}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
87
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
88 通信の数は、送信されるデータは従来の方法だとN個のノードに対してN-1回必要である。これはバイナリツリー状の構造を持っているTreeVNCでも通信の数は変わらない。
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
91 バイナリツリー状に接続することで、N台のクライアントが接続を行なってきた場合、従来のVNCではサーバ側がN回のコピーを行なって画面配信する必要があるが、TreeVNCでは各ノードが最大2回ずつコピーするだけで画面配信が可能となる。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
92
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
93 木構造のルートのノードをRoot Nodeと呼び、そこに接続されるノードをNodeと呼ぶ。Root Node は子Nodeにデータを渡す機能、各Nodeの管理、VNCサーバから送られてきたデータの管理を行なっている。各Nodeは、親Nodeから送られてきたデータを自身の子Nodeに渡す機能、子Nodeから送られてきたデータを親Nodeに渡す機能がある。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
94
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
95 \section{MulticastQueue}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
96 配信側の画面が更新されると、VNCサーバから画像データがFRAME\_BUFFER\_UPDATEメッセージとして送られる。その際、親Nodeが受け取った画像データを同時に複数の子Nodeに伝えるためにMulticastQueueというキューに画像データを格納する。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
97
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
98 各NodeはMulticastQueueからデータを取得するスレッドを持つ。MulticastQueueは複数のスレッドから使用される。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
99
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
100 \section{木の再構成}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
101 TreeVNCはバイナリツリー状での接続のため、Nodeが切断されたことを検知できずにいると構成した木構造が崩れてしまい、新しいNodeを適切な場所に接続できなくなってしまう。そこで木構造を崩さないよう、Node同士の接続の再構成を行う必要がある。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
102
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
103 TreeVNCの木構造のネットワークトポロジーはRoot Nodeが持っているnodeListで管理している。Nodeの接続が切れた場合、Root Nodeに切断を知らせなければならない。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
104
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
105 TreeVNCはLOST\_CHILDというメッセージ通信で、Node切断の検知および木構造の再構成を行なっている。LOST\_CHILDの検出方法にはMulticastQueueを使用しており、ある一定時間MulticastQueueから画像データが取得されない場合、MemoryOverFlowを回避するためにTimeoutスレッドが用意されている。そして、Timeoutを検知した際にNodeとの接続が切れたと判断する。
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
107 \section{データの圧縮形式}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
108 TreeVNCでは、ZRLEE\cite{taninari:2012a}というエンコード方法でデータの圧縮を行う。ZRLEEはRFBプロトコルで使用できるZRLEというエンコードタイプを元に生成される。
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109
2
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
110 ZLRE(Zlib Run-Length Encoding)とは可逆圧縮可能なZlib形式\cite{zlib}とRun-Length Encoding方式を組み合わせたエンコードタイプである。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
111
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
112 ZLREはZlibで圧縮されたデータとそのデータのバイト数がヘッダーとして付与され送信される。Zlibはjava.util.zip.deflaterとjava.util.zip.inflaterで圧縮と解凍が行える。しかしjava.util.zip.deflaterは解凍に必要な辞書を書き出す(flush)ことができない。従って、圧縮されたデータを途中から受け取ってもデータを正しく解凍することができない。
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
113
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
114 \begin{figure}[htb] %PDF
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
115 \begin{center}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
116 \includegraphics[width=8cm]{fig/EncodeZRLE.pdf}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
117 \caption{ZRLEでデータを途中から受け取った場合}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
118 \label{fig:ZRLE}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
119 \end{center}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
120 \end{figure}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
121
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
122 \section{Blockingの実装}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
123
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
124 \section{Multicast用のシステム構成}
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
125
riono <e165729@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
126 \section{まとめ}
1
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 \nocite{*}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 \bibliographystyle{ipsjunsrt}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 \bibliography{riono-sigos}
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
566fbbc15926 add Makefile and tex file
riono <e165729@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 \end{document}