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>
Binary file presen/pix/hadesScreen2.png has changed