Mercurial > hg > Papers > 2015 > parusu-prosym
view presen/prosym.html @ 34:1ef0837924a3 default tip
Fix
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 08 Jan 2016 03:20:50 +0900 |
parents | c20b2d98c5f4 |
children |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>有線 LAN 上のPC画面配信システムTreeVNCの改良</title> <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin15]"> <meta name="author" content="Tatsuki IHA, Shinji KONO" > <!-- style sheet links --> <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> <link rel="stylesheet" href="s6/themes/print.css" media="print"> <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> <!-- JS --> <script src="s6/js/jquery-1.11.3.min.js"></script> <script src="s6/js/jquery.slideshow.js"></script> <script src="s6/js/jquery.slideshow.counter.js"></script> <script src="s6/js/jquery.slideshow.controls.js"></script> <script src="s6/js/jquery.slideshow.footer.js"></script> <script src="s6/js/jquery.slideshow.autoplay.js"></script> <!-- prettify --> <link rel="stylesheet" href="scripts/prettify.css"> <script src="scripts/prettify.js"></script> <script> $(document).ready( function() { Slideshow.init(); $('code').each(function(_, el) { if (!el.classList.contains('noprettyprint')) { el.classList.add('prettyprint'); el.style.display = 'block'; } }); prettyPrint(); } ); </script> <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> <!--[if IE]> <script src="s6/js/jquery.microsoft.js"></script> <![endif]--> </head> <body> <div class="layout"> <div id="header"></div> <div id="footer"> <div align="right"> <img src="s6/images/logo.svg" width="200px"> </div> </div> </div> <div class="presentation"> <div class='slide cover'> <table width="90%" height="90%" border="0" align="center"> <tr> <td> <div align="center"> <h1><font color="#808db5">有線 LAN 上のPC画面配信システムTreeVNCの改良</font></h2> </div> </td> </tr> <tr> <td> <div align="left"> Tatsuki IHA, Shinji KONO <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> </div> </td> </tr> </table> </div> <div class='slide '> <!-- === begin markdown block === generated by markdown/1.2.0 on Ruby 2.3.0 (2015-12-25) [x86_64-darwin15] on 2016-01-08 03:19:45 +0900 with Markdown engine kramdown (1.9.0) using options {} --> <!-- _S9SLIDE_ --> <h2 id="section">画面共有を利用したコミュニケーション</h2> <ul> <li>授業やゼミ等で、それぞれが PC 端末を持っている場合では、PC の機能を活かした コミュニケーションが可能である</li> <li>画面配信システム TreeVNC は参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる 仕組みを取っている。そのため, 多人数が参加しても処理性能が下がらない</li> <li>ツリー のルートが参照している VNC サーバーを変更することで、ケーブルの差し替えなしに画面の切替が行える</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc-">TreeVNC の問題点</h2> <ul> <li>TreeVNC を実際に使用していく中で様々な問題が発生した。</li> <li>琉球大学では無線と有線が別々のネットワークになっている</li> <li>TreeVNCは単一のネットワークにしか対応できず、両方のネットワークにつながっている端末でも1つのネットワークでしか使用できなかった</li> <li>講義等を大学外の遠隔地から受けたい場合がある</li> <li>TreeVNC は NAT を越えた接続が行うことができない</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc--1">TreeVNC の問題点</h2> <ul> <li>ゼミ等で発表者毎に画面切り替えを行う際、デュアルディスプレイを使っている人がいた</li> <li>その際 VNC サーバーからはすべての画面データが送信されており、発表とは関係ない画面も配信されていた</li> </ul> <p><img src="./images/multidisplay.svg" alt="message" width="500" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-1">この発表は</h2> <ul> <li>TreeVNC の概要 <ul> <li>構造</li> <li>圧縮形式</li> <li>TreeVNC の原理</li> <li>画面切り替え</li> </ul> </li> <li>今回の改良 <ul> <li>描画処理の安定化</li> <li>複数のネットワークの対応</li> <li>NAT を越えた通信</li> <li>マルチディスプレイの対応</li> </ul> </li> <li>TreeVNC の評価 <ul> <li>画像データ送信の遅延</li> </ul> </li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc">TreeVNC</h2> <ul> <li>TreeVNC は本研究室で開発している VNC を利用した画面配信システム</li> <li>参加したクライアントをバイナリツリー状で接続することで配信コストを分散させる</li> <li>スムーズな配信画面の切替を行う</li> </ul> <p><img src="./images/TreeVNC.svg" alt="message" width="400" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="vnc">VNC</h2> <ul> <li>VNC(Virtual Network Computing) は RFBプロトコルを用いて遠隔操作を行うソフトウェア</li> <li>サーバー側とクライアント側に分かれており、サーバーを起動し、クライアントがサーバーに接続を行うことで遠隔操作を可能とする</li> </ul> <p><img src="./images/vnc.svg" alt="message" width="600" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="rfb-">RFB プロトコル</h2> <ul> <li>RFB(Remote Frame Buffer)プロトコルは VNC で用いられているプロトコル</li> <li>自身の画面をネットワーク越しに他者の画面に表示する</li> <li>Framebuffer と呼ばれるメモリ上に置かれた画像データを使用して画面表示を行う</li> <li>サーバーは Framebuffer が更新されるたびにクライアントに対して変更部分だけを送信する。</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="vnc-1">多人数でVNCを使用する際の問題点</h2> <ul> <li>多人数のクライアントが1つのサーバーに接続する構造</li> <li>サーバー側の処理性能が落ちてしまう</li> <li>配信者を切り替える際、配信側のサーバーを立ち上げ直す必要がある</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc--2">TreeVNC の構造</h2> <ul> <li>Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている</li> <li>様々なメッセージで通信を行う</li> <li>クライアント同士をバイナリツリー状に接続する</li> <li>バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="node-">Node が行う処理</h2> <ul> <li>Node <ul> <li>親 Node から送られたデータを自分の子 Node に流す</li> <li>子 Node から送られてきたデータを親 Nodeに流す</li> </ul> </li> <li>Root Node <ul> <li>TreeVNC で配信を行う際に一番最初に起動する Node</li> <li>Node の機能</li> <li>各 Node の管理</li> <li>VNC サーバーから送信されたFramebuffer の管理</li> </ul> </li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc-1">TreeVNCの負荷分散</h2> <ul> <li>ポート一本あたりの負荷 <ul> <li>従来のVNC : Node数 * データ量</li> <li>TreeVNC : (2(子供の数) + 1) * データ量</li> </ul> </li> <li>従来のVNCはNode数に比例</li> <li>TreeVNCはNode数に関係なく一定</li> </ul> <p><img src="./images/comparenormalandtree.svg" alt="message" width="600" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc--3">TreeVNC の圧縮形式</h2> <ul> <li>TreeVNC は ZRLEE というエンコードでデータのやり取りを行う</li> <li>ZRLEE は Rfb でのエンコードの1つである ZRLE を元に生成される</li> <li>ZRLE を一度 Root Node で解凍して再圧縮を行う</li> <li>配信画面の更新のたびに辞書を作りなおす</li> <li>途中からデータを受け取っても解凍できる</li> </ul> <p><img src="./images/ZRLEE.svg" alt="message" width="400" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-2">メッセージ通信の流れ</h2> <p><img src="./images/message.svg" alt="message" width="400" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-3">切断時の木の再構成</h2> <ul> <li>TreeVNC はバイナリーツリーという特性上 Node の切断を検知できずにいると、Node 同士で構成された木構造が崩れてしまう</li> <li>TreeVNC は Node 切断の検知を LOST_CHILD というメッセージで行っている</li> </ul> <p><img src="./images/lostChild1.svg" alt="message" width="800" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-4">共有画面切り替え</h2> <ul> <li>TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている</li> <li>画面を配信されている側のビューワにある Share Screen ボタンが押す</li> <li>Root Node に SERVER_CHANGE_REQUEST を送信する</li> <li>Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を始める。</li> <li>NAT 越えは現時点では実装されていない</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="quality--speed-">QUALITY モードと SPEED モード</h2> <ul> <li>高解像度のデータの描画処理はPCのスペックによって重くなる場合がある</li> <li>画像描画処理には <ul> <li>高画質優先の QUALITY モード</li> <li>描画速度優先の SPEED モード</li> </ul> </li> <li>今まで QUALITY モード を使用していた(変更不可)</li> <li>ビューワからユーザーがどちらのモードを使用するかを変更を可能にした</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-5">マルチディスプレイ</h2> <ul> <li>画面切り替えの際のSERVER_CHANGE_REQUESTに共有するディスプレイの座標を付加する</li> <li>Root Node は 接続した VNC サーバーから画像データを要求する FRAME_BUFFER_UPDATE_REQUEST に受け取った座標を付加する</li> <li>VNC サーバーは要求された座標内の画像データを FRAME_BUFFER_UPDATE で Root Node に送信する</li> </ul> <p><img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="800" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-6">複数ネットワークの対応</h2> <ul> <li>Root Node が接続しているネットワークごとに木構造を形成する</li> <li>新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する木構造を取得し、 接続の処理を任せる</li> </ul> <p><img src="./images/MultiNetworkTree.svg" alt="message" width="600" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="direct-connection">Direct Connection</h2> <ul> <li>NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する</li> <li>Direct Connection した Node はそのネットワークの Root Node になる</li> <li>Direct Connection された Root Node では NAT を越えたネットワーク先の Node の管理を行わない</li> </ul> <p><img src="./images/directConnection.svg" alt="message" width="800" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="treevnc-2">TreeVNCの評価</h2> <ul> <li>木の深さによる画像データの遅延を調べる</li> <li>実験環境 <ul> <li>実際に講義を受講している学生が TreeVNC を使用</li> <li>約20名の接続</li> </ul> </li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-7">実測方法</h2> <ul> <li>Root Node は 送信時間と画像データを持った CHECK_DELAY を 末端 Node まで木構造を辿りながら伝達する</li> <li>CHECK_DELAY を受け取った各 Node は 付加された送信時間を CHECK_DELAY_REPLY に付加し、 Root Node に送信する</li> <li>CHECK_DELAY_REPLY を受け取った Root Node は CHECK_DELAY の送信にどれだけ時間がかかったかの計算を行う</li> </ul> <pre lang="java"><code>// 遅延時間の計算 Long delay = System.currentTimeMillis() - time; </code></pre> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-8">深さ1, 2</h2> <p><img src="./images/depth1.svg" alt="message" width="450" /> <img src="./images/depth2.svg" alt="message" width="450" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-9">深さ3, 4</h2> <p><img src="./images/depth3.svg" alt="message" width="450" /> <img src="./images/depth4.svg" alt="message" width="450" /></p> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-10">結果から</h2> <ul> <li>画像データの伝達はほぼ1秒以内に収まっている</li> <li>容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の遅延が残っているためだと考えられる</li> <li>深さ3が遅い原因として1つの Node がボトルネックになっている事が判明した。</li> <li>ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある</li> </ul> </div> <div class='slide '> <!-- _S9SLIDE_ --> <h2 id="section-11">まとめと課題</h2> <ul> <li>今回TreeVNCの様々な問題点の解決を行った</li> <li>実験を行うことによりさらなる問題点が判明した</li> <li>実測で判明したネックになっているNodeへの対処</li> <li>NATを越えた画面切り替え</li> <li>追加した機能の評価方法を思考し、評価を行う</li> </ul> <!-- === end markdown block === --> </div> </div><!-- presentation --> </body> </html>