Mercurial > hg > Papers > 2014 > taninari-master
view presen/master.html @ 34:aacf118c6a8c default tip
add file.
author | Taninari YU <you@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 03 Mar 2014 17:37:21 +0900 |
parents | 57a92ff9540c |
children |
line wrap: on
line source
<!DOCTYPE html> <html> <head> <meta charset='utf-8'> <title>Presentation</title> <script src='slides.js'></script> <style media='screen,projection'> /**** * Add your styles here. */ body { font-size: 175%; } .step { color: silver; } /* or hide next steps e.g. .step { visibility: hidden; } */ .slide { font-family: 'Open Sans', Arial, sans-serif; color: rgb(102, 102, 102); text-shadow: 0 1px 1px rgba(0, 0, 0, .1); } .slide h1, .slide h2, .slide h3 { color: rgb(51, 51, 51); } .slide pre { font-family: 'Droid Sans Mono', 'Courier New', monospace; font-size: 80%; padding: 5px 10px; margin-top: 40px; margin-bottom: 40px; color: black; background: rgb(240, 240, 240); border: 1px solid rgb(224, 224, 224); box-shadow: inset 0 2px 6px rgba(0, 0, 0, .1); overflow: hidden; } .slide code { font-family: 'Droid Sans Mono', 'Courier New', monospace; color: black; } </style> </head> <body> <section class='slides'> <!-- Add your slides here. Delete or comment out the slides below. --> <article class='cover'> <h1> 授業やゼミ向けの画面共有システム <br> TreeVNCの設計と実装 </h1> <p> 谷成 雄 <br> Feb 4, 2014 </p> </article> <article class='smaller'> <h3>概要</h3> <p> 大学の講義、プロジェクタなどの投影機を用いて授業を行っているが、スクリーンに写されている画面は後ろの席に行けば行くほど見えづらくなる。 </p> <p> その問題を画面共有ソフトVNCを用いて、手元のコンピュータに講師の画面を表示することで解決しようと考えた。 </p> <p> しかし、通常のVNCを用いて多人数が同時に接続するとサーバ側の処理性のが低下し、授業の進行について行かなくなってしまう。 </p> <p> 本研究では、多人数で使用しても処理性能が低下することない画面共有システムTreeVNCの設計と実装を行い、更にゼミなどで使用しやすいようにUIの提案と実装も行った。 </p> </article> <article> <h3> VNCについて </h3> <p> VNC(Virtual Network Computing)とは、RFBプロトコルというプロトコルを用いて画面共有を実現することのできるアプリケーションである。 </p> <p> RFBプロトコルはGUI操作によるリモートアクセス用の通信プロトコルである。 </p> <p> ソースコードはオープンソースとして公開されているため、多数の派生ソフトが存在する。 </p> <p> 派生ソフトには、RealVNCやTightVNCなどがある。 </p> </article> <article class='smaller'> <h3> 多人数でVNCを使用する場合の問題点 </h3> <p> VNC Serverに対して、一極集中型で接続してしまうので、VNC ServerへのCPU負荷が高い。 </p> <p> VNC Server側の通信網1本への通信負荷が高い。 </p> <p style="text-align: center"> <img style="height:250px" src="./images/vnc.png"/> </p> </article> <article> <h3> 多人数でVNCを使用する場合の問題点 </h3> <p> 1台と48台でVNC Serverに接続した時のCPU使用率とスループット </p> <table class="center" class="incremental" border=1> <tr> <td></td> <td>スループット(単位:bps)</td> <td>CPU使用率</td> </tr> <tr> <td>1台</td> <td>20M<small>(VNCでの最大速度)</small></td> <td>55%</td> </tr> <tr> <td>48台</td> <td>4M(1台あたり)</td> <td>100%</td> </tr> </table> <p> 48台でVNC Serverに接続した際、CPU使用率が100%になりスループットが5分の1まで下がってしまう。 </p> </article> <article> <h3> TreeVNCの設計 </h3> <p> 多人数でVNCを使用する際は、VNC Serverに一極集中で接続してしまうのが問題であったので、集中している負荷を分散できないか考えた。 </p> <p> VNC Serverに負荷が集中しているので、クライントに負荷を分散するようにクライアント同士でのデータをやりとりすることで負荷分散ができる。 </p> <p> クライント同士の接続を木構造に行って、データを上から下へと流しすようにすることで、すべてのクライアントへデータを届ける。 今後、木構造に接続されたクライアントのことをNodeと呼ぶ。 </p> </article> <article class='smaller'> <h3> TreeVNCの設計 </h3> <p> Nodeを木構造に接続させるために、トポロジを管理する特別なNodeが必要になる。今後このノードのことをRoot Nodeと呼ぶ。 </p> <p> RootNodeはVNC Serverに接続し、Nodeの接続に対して木構造にNodeを接続するように命令を出す。 </p> <p style="text-align: center"> <img style="height:250px" src="./images/treevnc.png"/> </p> </article> <article> <h3> TreeVNCの原理 </h3> <p> TreeVNCでは、接続が分散していて、通信網1本に対する負荷が減少するのでNodeが増えても高いスループットを保つことができる。 </p> <p style="text-align: center"> <img style="height:250px" src="./images/structureofTreeVNC.png"/> </p> </article> <article> <h3> 木の構成方法 </h3> <ul> <li> Nodeは接続を行う時にRoot Nodeに接続し、Root Nodeから接続するべき場所のIPアドレスをもらう。 </li> <li> Root Nodeは接続してきたNodeのIPアドレスを自身が持つリストに登録し、接続先のIPアドレスを返す。 </li> <li> Nodeは指定されたNodeに接続を行う。 </li> <p> Nodeが接続される度に、この手順を繰り返すことで、木を構成することができる。 </p> </ul> </article> <article> <h3> 画面切り替えの実装 </h3> <p> 授業ではなくゼミなどの多数発表者がいる場面で、TreeVNCを用いるためには、発表者が変わる度にRoot NodeとNodeがアプリケーションを立ち上げなおさなければならない。 発表者が大勢いると切り替えだけで時間を取られてしまう。 </p> <p> そこで、ボタンひとつで画面を切り替えることのできるように実装を行った。 </p> </article> <article> <h3> 画面の切り替え </h3> <p> 画面の切替手順は以下のとおりである。 </p> <ul> <li> Node側が、アプリケーションのWindowに配置された、切り替えボタンを押すと、Root Nodeに対してボタンを押したNodeのIPアドレスが渡される。 </li> <li> Root Nodeは受け取ったIPアドレスのNodeに対して、接続要求を出す。 </li> <li> Nodeが要求を認証するとRoot Nodeは現在使用しているストリームを閉じて、すべてのNodeに対して画面が切り替わったことを知らせる。 </li> <li> Nodeは切り替わった画面への接続を行う。 </li> </ul> </article> <article> <h3> マルチディスプレイの対応 </h3> <p> マルチディスプレイを使用してTreeVNCを使用する場合、Nodeにすべてのディスプレイのデータが送られてしまう。 しかし、実際、発表する際には一つのディスプレイしか使用しない場合が多いので、無駄なデータが流れていることになる。 Node側も見たい画面へとスクロールする手間が出てくる。 </p> <p> 一つのディスプレイのデータを送ることができるように実装を行った。 </p> </article> <article> <h3> マルチディスプレイの対応 </h3> <p> RFBプロトコルの中ではFrameBufferUpdateで、画像データの送信を行っている。 画像のやりとりの手順は以下の表である。 </p> <table> <tr> <th> バイト数 <th> 説明 <tr> <td> 2 <td> message-type and padding <tr> <td> 2 <td> number-of-rectangle <tr> <td> 2 <td> x-position <tr> <td> 2 <td> y-position <tr> <td> 2 <td> width <tr> <td> 2 <td> height <tr> <td> 4 <td> encoding-type </table> </article> <article class='smaller'> <h3> マルチディスプレイの対応 </h3> <p> 流れてきたx-position,y-position,width,heightで画像の位置と大きさがわかる。 </p> <p> 2つディスプレイがある場合は、2つのディスプレイにまたがった画像のデータが来ることはない。 </p <p style="text-align: center"> <img style="height:200px" src="./images/sendscreenimage.png"/> </p> <p> そこで、Root Nodeでフィルタリングしてやることで一つのディスプレイの情報を送ることができる。 例えば上の図で左側の画面の画像を送信したい場合は、x-positionが1920以下の画像だけを、Nodeに送ることでひとつのディスプレイデータを送ることが実現できる。 </p> </article> <article> <h3> MulticastとBroadcastについて </h3> <p> TreeVNCでは、TCPコネクションを用いて、通信を行っているので、クライアント数の通信が必要である。 </p> <p> BroadcastやMulticastを用いると、データ送信は一回だけで良い。 </p> <p> しかし、BroadcastとMulticastのは、パケットの確実性は保証していないので、パケットが消失してしまうことがある。 </p> </article> <article> <h3> MulticastとBroadcastについて </h3> <p> どの程度パケットが消失しているのかをテストしてみた。 以下の表は100packetデータを送信してデータのロス率を調べた表である。 </p> <table class="center" class="incremental" border=1> <tr> <td></td> <td>256byte</td> <td>4000byte</td> </tr> <tr> <td>Broadcast</td> <td>47%</td> <td>87%</td> </tr> <tr> <td>Multicast</td> <td>0%</td> <td>37%</td> </tr> </table> <p> Multicastを使用しても、4000byteで1000packetを送信して37%のデータをロスしているので、予想以上にロス率が高い。 </p> </article> <article> <h3> MulticastとBroadcast </h3> <p> MulticastとBroadcastは、一回のデータ送信で、約64000byteのデータしか送信することができない。 </p> <p> 1920*1080の画像で送られてくるデータは6220800byteである。つまりデータを約100個に分割しなければならない。 </p> <p> 分割するテストプログラムを書いてみたところ、分割と送信に画面共有に支障をきたすほど処理が遅くなってしまった。 </p> </article> <article> <h3> TreeVNCの評価 </h3> <p> TreeVNCを評価するために複数のNodeが必要となる、そこで今回は学科で提供されている並列計算環境を利用して、実験を行った。 使用した並列計算環境の性能は以下の図に示す。 </p> <table> <tr> <th> 名前 <th> 概要 <tr> <td> CPU <td> Intel(R) CPU X5650@2.67GHz <tr> <td> 物理コア数 <td> 2 <tr> <td> 物理コア数 <td> 4 <tr> <td> OS <td> CentOS 5.8 <tr> <td> 台数 <td> 48台 </table> </article> <article> <h3> TreeVNCの評価 </h3> <p> TreeVNCは木構造で構成されているので、一番上のノードから一番下のノードまで、データが届くのに時間がかかってしまう可能性がある。 </p> <p> </p> <table> <tr> <th> 段数 <th> 遅延 <tr> <td> 2 <td> 約1ミリ秒 <tr> <td> 4 <td> 約58ミリ秒 <tr> <td> 6 <td> 約139ミリ秒 </fgtable> </article> <article class='slide nobackground'> <iframe src='http://slideshow-s9.github.io'></iframe> </article> <article class='fill'> <h3> Full-slide embed with (optional) slide title on top </h3> <iframe src='http://slideshow-s9.github.io'></iframe> </article> <article> <h3> Thank you! </h3> <ul> <li> <a href='http://www.example.com'>example.com</a> </li> </ul> </article> </section> </body> </html>