Mercurial > hg > Events > OSC2011
changeset 1:d33d9d7770b2
modify RemoteframebufferUpdate, ZRLEE
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 10 Sep 2011 03:00:41 +0900 |
parents | d91f1fc9c123 |
children | 0e1bdab59fc2 |
files | presen/index.html presen/index.html~ presen/pix/hadesScreen2.png |
diffstat | 3 files changed, 132 insertions(+), 81 deletions(-) [+] |
line wrap: on
line diff
--- a/presen/index.html Fri Sep 09 22:02:45 2011 +0900 +++ b/presen/index.html Sat Sep 10 03:00:41 2011 +0900 @@ -83,24 +83,35 @@ <h4><a href="http://ie.u-ryukyu.ac.jp/" rel="external">琉球大学 並列信頼研究室</a></h4> <div class="handout"></div> </div> - - <!-- PAGE --> <div class="slide"> - <h1>目的と背景</h1> + <h1>本日の内容</h1> + <li>友人と作ったJavaによる画面共有システム「TreeVNC」について</li> + <li>TreeVNCを作るにあたって学んだJavaでの並列プログラミングの仕方やVNCの話</li> + </div> + <!-- PAGE --> + <div class="slide"> + <h1>TreeVNCの目的と背景</h1> <li>大学の講義中、スクリーンに映されている画面は後ろの席程見えずらい。 </li> <li>その問題を手元のPCにも写せるようにすることで解決しようと考えた。</li> <li class="incremental">60人以上での画面共有を行うことを目標とする。</li> </div> <!-- PAGE --> <div class="slide"> - <h1>VNCを用いての画面共有</h1> + <h1>VNCによる画面共有</h1> <li>画面を共有する方法 -> VNC</li> <li>VNC: Virtual Network Computing </br>ネットワークを介してコンピュータを遠隔操作するプログラム </li> <li>VNCのリモートPCの画面を写す機能を利用する。</li> </div> <!-- PAGE --> <div class="slide"> + <h1>VNCを用いての画面共有</h1> + <li>まず、iMacで複数のPCからVNCをかけてみた。</li> + <li class="incremental">-> 10台と繋ぐ前にVNCでの画面がカクカクに... </li> + <li class="incremental">さらにCPU使用率も跳ね上がった。</li> + </div> + <!-- PAGE --> + <div class="slide"> <h1>通常のVNCの問題点</h1> <table class="center"> <tr> @@ -115,6 +126,7 @@ </td> </tr> </table> + <p class="incremental" style="text-align: center;" >実際に測ってみた</p> </div> <!-- PAGE --> <div class="slide"> @@ -133,7 +145,7 @@ <tr> <td>1台</td> - <td>20M</td> + <td>20M<small>(最大速度)</small></td> <td>55%</td> </tr> @@ -148,9 +160,15 @@ </div> <!-- PAGE --> <div class="slide"> + <h1>通常のVNCの問題点</h1> + <li>サーバへのCPU負荷が高い</li> + <li>1本の通信網への負荷が高い</li> + </div> + <!-- PAGE --> + <div class="slide"> <h1>VNCの問題点の解決策</h1> <p style="text-align: center;"> - <small>クライアントを木構造で接続させる</samll><br> + <small>クライアントを木構造で接続させるTreeVNC</samll><br> <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"><br> </p> </div> @@ -194,7 +212,7 @@ </tr> </p> </table> - <table class="center" border=1 cellspacing="0" width=80%> + <table class="center" border=1 cellspacing="0" width=100%> <tr> <td></td> <td>通常のVNC</td> @@ -202,7 +220,7 @@ </tr> <tr> <td>最大負荷</td> - <td> N * データ量 (クライアントの数に比例) </td> + <td> N*データ量 (クライアントの数に比例) </td> <td> (M+1) * データ量</td> </tr> </table> @@ -212,8 +230,9 @@ <!-- PAGE --> <div class="slide"> <h1>TreeVNCの設計</h1> + <li>木構造での接続</li> <li>TreeVNCのクライアントは最初にTop Proxyに接続を行う。</li> - <li>データは木の下へと流れていく。</li> + <li>データは木の下へと流していくようにする。</li> <li>tightVNC ViewerのJava版(ver 1.3)を元にTreeVNCの実装を行う。</li> <p style="text-align: center;"> <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"> @@ -221,7 +240,7 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>発表内容</h1> + <h1>今回の主な内容</h1> <ul> <li>RFB Protocol</li> <li>データ転送量</li> @@ -234,6 +253,23 @@ <div class="slide"> <h1>RFB protocol</h1> <li>Remote Frame Buffer Protocol : <br>GUI操作によるリモートアクセス用の通信プロトコル。VNCで用いられる。</li> + <table class="scale" width=100% > + <tr> + <td width=50%> + <img class="scale" src="./pix/VNC-Sequence-.png" height=80%> + </td> + <td width=50% align="left"> + <small> + <li><font color=blue>1~5</font>まではinitial seaquenceとなる。</li> + <li><font color=orange>6</font>以降は繰り返し行われる処理。画面のデータが転送されてくる。</li> + </small> + </td> + </tr> + </table> + </div> + <!-- PAGE --> + <div class="slide"> + <h1>画像の更新(FramebufferUpdate)</h1> <li>転送される画面(フレームバッファ)のデータは変更があった部分(差分)だけが矩形単位で送られる。</li> <table class="center" width=100%> <tr> @@ -254,28 +290,11 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>VNC のシーケンス図</h1> - <table class="scale" width=100% > - <tr> - <td width=50%> - <img class="scale" src="./pix/VNC-Sequence-.png" height=80%> - </td> - <td width=50% align="left"> - <small> - <li><font color=blue>1~5</font>まではinitial seaquenceとなる。</li> - <li><font color=orange>6</font>以降は繰り返し行われる処理。画面のデータが転送されてくる。</li> - </small> - </td> - </tr> - </table> - </div> - <!-- PAGE --> - <div class="slide"> <h1>RFB Protocol</h1> <li>FramebufferUpdateRequest:</li> <li><small>画面に差分が発生したらサーバから教えて貰うためのリクエスト</small></li> <small> -<table> +<table width=100% style="text-align: center;"> <td width=50%> <table border=1 cellspacing="0"> <tr> @@ -322,15 +341,19 @@ </table> </td> +<td> +<img src="./pix/TreeVNC1.png" width=90%> +</td> </table> -<li>このリクエストはTop Proxyだけが行う。 </li> </small> +<li><small>このリクエストはTop Proxyだけが行う。</small> </li> </div> <!-- PAGE --> <div class="slide"> <h1>RFB Protocol</h1> - <li>FramebufferUpdate: <small>画面の更新データ</small></li> - + <li>FramebufferUpdateRequest:<small>画面の更新データ</small></li> +<table width="100%"> +<td width=50%> <small> <table border=1 cellspacing="0" > <tr> @@ -358,11 +381,11 @@ </tr> </table> - <li>以下number-of-rectanglesの数だけ矩形のデータが続く</li> + <li><small>以下number-of-rectanglesの数だけ矩形のデータが続く</small></li> <table width=100%> <td> -<table border=1 cellspacing="0" width=50%> +<table border=1 cellspacing="0" width=100%> <tr> <td>バイト数</td> <td><pre>型 </pre></td> @@ -412,9 +435,13 @@ </td> </table> - +</small> +</td> +<td width> + <img src="./pix/TreeVNC2.png" width=90%> +</td> +</table> -</small> </div> <!-- PAGE --> <div class="slide"> @@ -520,7 +547,7 @@ <!-- PAGE --> <div class="slide"> <h1>データ転送量</h1> - <li>クライアントが60台の時の通常のVNCと、2分木構成にしたTreeVNCの通信網への負荷の理論値を考える。</li> + <li>クライアントが60台とした時、通常のVNCと、2分木構成にしたTreeVNCの通信網への負荷の理論値を考える。</li> <table class="center" border=1 cellspacing="0" width=80%> <tr> <td></td> @@ -534,7 +561,7 @@ </tr> </table> <p style="text-align: center;"><small>クライアントの数をN、木構造の子供の数をMとする</small> </p> - <li>N = 60、 M = 1 となる。</li> + <li>N = 60、 M = 2 、使用するエンコードはZRLEとする。</li> <li>724 * 449 の画面分のデータ(0.8M)を送信するとする。 </li> </div> @@ -576,7 +603,7 @@ <!-- PAGE --> <div class="slide"> <h1>エンコード</h1> - <li>MacintoshでVNCを行うとZRLEを使うことができる。</li> + <li>MacintoshでZRLEを使ってVNCを行うことができる</li> <li>データ量がRAWデータの約4分の1ですむ。</li> <li class="incremental">TreeVNCではこのZRLEを扱っている。</li> </div> @@ -603,23 +630,25 @@ <tr> <td>length</td> <td>U8 array</td> - <td>zlibData</td> + <td>ZlibData</td> </tr> </table> </small> - - <li>Zlibデータ</li> - <ul> - <li>Zlibデータは辞書を元にデータの解凍を行う</li> - </ul> - <li class="incremental">辞書がなければデータを正しく解凍できない</li> - </div> + <li>VNCでZRLEを使う場合は単一のzrleストリームを使ってデータの解凍を行う。</li> + <li class="incremental">問題が発生</li> + </div> <!-- PAGE --> <div class="slide"> <h1>ZRLEの問題</h1> + <li>Zlibデータは辞書を元にデータの解凍を行う</li> + <li class="incremental">辞書がなければデータを正しく解凍できない</li> + </div> + <div class="slide"> + <h1>ZRLEの問題</h1> <li>辞書はZlibデータの最初に送られてくる。</li> - <li>ZRLEのデータを最初から送ることができれば、辞書も送ることができる。</li> + <li>もしも、ZRLEのデータを最初から送っているのなら、辞書も送ることができる。</li> <li>データの途中から送ると辞書は送られず、正しく解凍を行うことができない。</li> + <li class="incremental">Zlibデータを解凍するjava.util.zip.Deflaterがエラーを吐く</li> <table class="textcenter" width=100%> <tr> <td> @@ -644,7 +673,7 @@ int len2 = zip(nDeflater, out, 0, bufs); </pre> </small> -<li>このエンコードはZRLEEと名付けた。</li> +<li>この圧縮し直したデータはZRLEEと名付けた。</li> <table class="textcenter" width=100%> <tr> <td> @@ -727,8 +756,9 @@ <div class="slide"> <h1>圧縮したデータの転送</h1> <li>一度ZRLEEに圧縮してしまえば、データはそのまま流すことができる。</li> + <li class="incremental"> -> 気にするのはスループットだけでいい。</li> <li>また、データの転送は複数いる子へ並列に行われる。</li> - <p class="textcenter"> + <p class="textcenter"> <img src="./pix/MulticastQueue3.png"> </p> <li class="incremental">MulticastQueueクラスを用いてデータの転送を行った。</li>
--- a/presen/index.html~ Fri Sep 09 22:02:45 2011 +0900 +++ b/presen/index.html~ Sat Sep 10 03:00:41 2011 +0900 @@ -83,24 +83,35 @@ <h4><a href="http://ie.u-ryukyu.ac.jp/" rel="external">琉球大学 並列信頼研究室</a></h4> <div class="handout"></div> </div> - - <!-- PAGE --> <div class="slide"> - <h1>目的と背景</h1> + <h1>本日の内容</h1> + <li>友人と作ったJavaによる画面共有システム「TreeVNC」について</li> + <li>TreeVNCを作るにあたって学んだJavaでの並列プログラミングの仕方やVNCの話</li> + </div> + <!-- PAGE --> + <div class="slide"> + <h1>TreeVNCの目的と背景</h1> <li>大学の講義中、スクリーンに映されている画面は後ろの席程見えずらい。 </li> <li>その問題を手元のPCにも写せるようにすることで解決しようと考えた。</li> <li class="incremental">60人以上での画面共有を行うことを目標とする。</li> </div> <!-- PAGE --> <div class="slide"> - <h1>VNCを用いての画面共有</h1> + <h1>VNCによる画面共有</h1> <li>画面を共有する方法 -> VNC</li> <li>VNC: Virtual Network Computing </br>ネットワークを介してコンピュータを遠隔操作するプログラム </li> <li>VNCのリモートPCの画面を写す機能を利用する。</li> </div> <!-- PAGE --> <div class="slide"> + <h1>VNCを用いての画面共有</h1> + <li>まず、iMacで複数のPCからVNCをかけてみた。</li> + <li class="incremental">-> 10台と繋ぐ前にVNCでの画面がカクカクに... </li> + <li class="incremental">さらにCPU使用率も跳ね上がった。</li> + </div> + <!-- PAGE --> + <div class="slide"> <h1>通常のVNCの問題点</h1> <table class="center"> <tr> @@ -115,6 +126,7 @@ </td> </tr> </table> + <p class="incremental" style="text-align: center;" >実際に測ってみた</p> </div> <!-- PAGE --> <div class="slide"> @@ -133,7 +145,7 @@ <tr> <td>1台</td> - <td>20M</td> + <td>20M<small>(最大速度)</small></td> <td>55%</td> </tr> @@ -148,9 +160,15 @@ </div> <!-- PAGE --> <div class="slide"> + <h1>通常のVNCの問題点</h1> + <li>サーバへのCPU負荷が高い</li> + <li>1本の通信網への負荷が高い</li> + </div> + <!-- PAGE --> + <div class="slide"> <h1>VNCの問題点の解決策</h1> <p style="text-align: center;"> - <small>クライアントを木構造で接続させる</samll><br> + <small>クライアントを木構造で接続させるTreeVNC</samll><br> <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"><br> </p> </div> @@ -194,7 +212,7 @@ </tr> </p> </table> - <table class="center" border=1 cellspacing="0" width=80%> + <table class="center" border=1 cellspacing="0" width=100%> <tr> <td></td> <td>通常のVNC</td> @@ -202,7 +220,7 @@ </tr> <tr> <td>最大負荷</td> - <td> N * データ量 (クライアントの数に比例) </td> + <td> N*データ量 (クライアントの数に比例) </td> <td> (M+1) * データ量</td> </tr> </table> @@ -212,8 +230,9 @@ <!-- PAGE --> <div class="slide"> <h1>TreeVNCの設計</h1> + <li>木構造での接続</li> <li>TreeVNCのクライアントは最初にTop Proxyに接続を行う。</li> - <li>データは木の下へと流れていく。</li> + <li>データは木の下へと流していくようにする。</li> <li>tightVNC ViewerのJava版(ver 1.3)を元にTreeVNCの実装を行う。</li> <p style="text-align: center;"> <img class="scale" src="./pix/TreeVNC0.png" width="500" heigth="500"> @@ -221,7 +240,7 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>発表内容</h1> + <h1>今回の主な内容</h1> <ul> <li>RFB Protocol</li> <li>データ転送量</li> @@ -234,6 +253,23 @@ <div class="slide"> <h1>RFB protocol</h1> <li>Remote Frame Buffer Protocol : <br>GUI操作によるリモートアクセス用の通信プロトコル。VNCで用いられる。</li> + <table class="scale" width=100% > + <tr> + <td width=50%> + <img class="scale" src="./pix/VNC-Sequence-.png" height=80%> + </td> + <td width=50% align="left"> + <small> + <li><font color=blue>1~5</font>まではinitial seaquenceとなる。</li> + <li><font color=orange>6</font>以降は繰り返し行われる処理。画面のデータが転送されてくる。</li> + </small> + </td> + </tr> + </table> + </div> + <!-- PAGE --> + <div class="slide"> + <h1>画像の更新(FramebufferUpdate)</h1> <li>転送される画面(フレームバッファ)のデータは変更があった部分(差分)だけが矩形単位で送られる。</li> <table class="center" width=100%> <tr> @@ -254,23 +290,6 @@ </div> <!-- PAGE --> <div class="slide"> - <h1>VNC のシーケンス図</h1> - <table class="scale" width=100% > - <tr> - <td width=50%> - <img class="scale" src="./pix/VNC-Sequence-.png" height=80%> - </td> - <td width=50% align="left"> - <small> - <li><font color=blue>1~5</font>まではinitial seaquenceとなる。</li> - <li><font color=orange>6</font>以降は繰り返し行われる処理。画面のデータが転送されてくる。</li> - </small> - </td> - </tr> - </table> - </div> - <!-- PAGE --> - <div class="slide"> <h1>RFB Protocol</h1> <li>FramebufferUpdateRequest:</li> <li><small>画面に差分が発生したらサーバから教えて貰うためのリクエスト</small></li> @@ -520,7 +539,7 @@ <!-- PAGE --> <div class="slide"> <h1>データ転送量</h1> - <li>クライアントが60台の時の通常のVNCと、2分木構成にしたTreeVNCの通信網への負荷の理論値を考える。</li> + <li>クライアントが60台とした時、通常のVNCと、2分木構成にしたTreeVNCの通信網への負荷の理論値を考える。</li> <table class="center" border=1 cellspacing="0" width=80%> <tr> <td></td> @@ -534,7 +553,7 @@ </tr> </table> <p style="text-align: center;"><small>クライアントの数をN、木構造の子供の数をMとする</small> </p> - <li>N = 60、 M = 1 となる。</li> + <li>N = 60、 M = 1 、使用するエンコードはZRLEとする。</li> <li>724 * 449 の画面分のデータ(0.8M)を送信するとする。 </li> </div> @@ -644,7 +663,7 @@ int len2 = zip(nDeflater, out, 0, bufs); </pre> </small> -<li>このエンコードはZRLEEと名付けた。</li> +<li>この圧縮し直したデータはZRLEEと名付けた。</li> <table class="textcenter" width=100%> <tr> <td> @@ -727,8 +746,9 @@ <div class="slide"> <h1>圧縮したデータの転送</h1> <li>一度ZRLEEに圧縮してしまえば、データはそのまま流すことができる。</li> + <li class="incremental"> -> 気にするのはスループットだけでいい。</li> <li>また、データの転送は複数いる子へ並列に行われる。</li> - <p class="textcenter"> + <p class="textcenter"> <img src="./pix/MulticastQueue3.png"> </p> <li class="incremental">MulticastQueueクラスを用いてデータの転送を行った。</li> @@ -1239,7 +1259,7 @@ <li>今回のTreeVNCは大学の授業「programming4」で作り始めた。</li> <li>Javaは基本知識だけ、VNCの仕組みについては全く知らない状態からのスタートあった。</li> <li>木の再構成、MulticastやZRLEの問題にも出会ったがなんとかクリアすることができた。</li> - <li class="incremental">Javaでの分散プログラミングは考えていたよりも簡単であった。</li> + <li class="incremental">Javaでの分散プログラミングは考えていたよりも楽であった。</li> </div> <!-- PAGE --> <div class="slide"> @@ -1255,6 +1275,7 @@ </div> --> <!-- PAGE --> +<!-- <div class="slide"> <h1>既存のプログラムとの比較</h1> <li>VNC Reflector</li>