Mercurial > hg > Papers > 2017 > mitsuki-thesis
diff presen/slide.md @ 16:11058e51adb7
update
author | mir3636 |
---|---|
date | Wed, 15 Feb 2017 23:00:11 +0900 |
parents | 1ba7fa1773d9 |
children | 981020cb97ae |
line wrap: on
line diff
--- a/presen/slide.md Wed Feb 15 22:07:09 2017 +0900 +++ b/presen/slide.md Wed Feb 15 23:00:11 2017 +0900 @@ -16,120 +16,21 @@ # Continuation based C (CbC) - Continuation based C (CbC) はこの Code Gear 単位を 用いたプログラミング言語として開発している。 - Code Gear から 次の Code Gear へと goto による継続で遷移で処理を行い、引数として出力を与える。 -<img src="./images/multidisplay.svg" alt="message" width="500"> -# この発表は -- TreeVNC の概要 - - 構造 - - 原理 - - 画面切り替え -- 今回の改良 - - NAT 対応 - - マルチディスプレイの対応 -- TreeVNC の評価 - - 画像データ送信の遅延 - - ネックになってるノードへの対処 - -# TreeVNC -- TreeVNC は本研究室で開発している VNC を利用した画面配信システム -- 配信コストを分散させることで大人数でも画面配信が可能 -- スムーズな配信画面の切替を行う - -# VNC -- VNC(Virtual Network Computing) は RFBプロトコルを用いて遠隔操作を行うソフトウェア -- サーバー側とクライアント側に分かれており、サーバーを起動し、クライアントがサーバーに接続を行うことで遠隔操作を可能とする - -<img src="./images/vnc.svg" alt="message" width="600"> - -# RFB プロトコル -- RFB(Remote Frame Buffer)プロトコルは VNC で用いられているプロトコル -- 自身の画面をネットワーク越しに他者の画面に表示する -- Framebuffer と呼ばれるメモリ上に置かれた画像データを使用して画面表示を行う -- サーバーは Framebuffer が更新されるたびにクライアントに対して変更部分だけを送信する。 - -# TreeVNC の構造 -- Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている -- 様々なメッセージで通信を行う -- クライアント同士をバイナリツリー状に接続する -- バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ -- Root Node が参照している VNC サーバーから FrameBuffer を取得して、 木構造を辿って Node に送信する。 - -<img src="./images/treeVnc.svg" alt="message" width="400"> - -# TreeVNC の原理 -- ポート一本あたりの負荷 - - 従来のVNC : Node数 * データ量 - - TreeVNC : (2(子供の数) + 1) * データ量 -- 従来のVNCはNode数に比例 -- TreeVNCはNode数に関係なく一定 - -<img src="./images/treeVncTheory.svg" alt="message" width="700"> - -# 共有画面切り替え -- TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている -- 画面を配信されている側のビューワにある Share Screen ボタンが押す -- Root Node に SERVER\_CHANGE\_REQUEST を木構造を辿りながら送信 -- Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を開始 +# Gears OS +- Gears OS では並列実行するための Task を、実行する Code Gear 、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。 +- またGears OS では Meta Computation を Meta Code Gear、Meta Data Gear で表現する。 +- Meta Code Gear は通常の Code Gear の直後に遷移され、Meta Computation を実行する。 +- Meta Code Gear で OS の 機能であるメモリ管理やスレッド管理を行う。 -# Direct Connection -- NATを越えたネットワークからの接続は直接配信側の Root Node に接続を行うことで実現する -- Direct Connection した Node はそのネットワークの Root Node になる -- Direct Connection された Root Node では NAT を越えたネットワーク先の Node の管理を行わない - -<img src="./images/directConnection.svg" alt="message" width="800"> - -# マルチディスプレイ -- 画面切り替えの際のSERVER\_CHANGE\_REQUESTに共有するディスプレイの座標を付加する -- Root Node は 接続した VNC サーバーから画像データを要求する FRAME\_BUFFER\_UPDATE\_REQUEST に受け取った座標を付加する -- VNC サーバーは要求された座標内の画像データを FRAME\_BUFFER\_UPDATE で Root Node に送信する - -<img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="700"> - -# TreeVNC の評価 -- 木の深さによる画像データの遅延を調べる -- 実験環境 - - 実際に講義を受講している学生が TreeVNC を使用 - - 約20名の接続 - -# 実測方法 -- Root Node は 送信時間と画像データを持った CHECK\_DELAY を 末端 Node まで木構造を辿りながら伝達する -- CHECK\_DELAY を受け取った各 Node は 付加された送信時間を CHECK\_DELAY\_REPLY に付加し、 Root Node に送信する -- CHECK\_DELAY\_REPLY を受け取った Root Node は CHECK\_DELAY の送信にどれだけ時間がかかったかの計算を行う - -<img src="./images/checkDelay.svg" alt="message" width="600"> - -# 深さ1, 2 -<img src="./images/depth1.svg" alt="message" width="600"> -<img src="./images/depth2.svg" alt="message" width="600"> +# Context +- Gears OS では Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 +- Gears OSは必要なCode/DataGearに参照したい場合、このContext を通す必要がある。 -# 深さ3, 4 -<img src="./images/depth3.svg" alt="message" width="600"> -<img src="./images/depth4.svg" alt="message" width="600"> - -# 結果から -- 画像データの伝達はほぼ1秒以内に収まっている -- 容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の遅延が残っているためだと考えられる -- 深さ3が遅い原因として1つの Node がボトルネックになっている事が判明した。 -- ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある - -<img src="./images/depth3.svg" alt="message" width="600" height="600"> -<img src="./images/depth3_without_bottle.svg" alt="message" width="600" height="600"> +# stub Code Gear +- しかし、Context を直接扱うのはセキュリティ上好ましくない。 +- そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 -# ネックになっているノードへの対処 -- CHECK\_DELAY\_REPLY で Root Node は ネックかどうかのを判断をする -- ネックになっているなら、その Node を木構造のリストから削除 -- 最後の Node を削除した Node の場所に移動 -- ネックになったところは三分木になる - -<img src="./images/fixTree.svg" alt="message" width="800"> - -# まとめと課題 -- 今回TreeVNCの様々な問題点の解決を行った - - NAT - - マルチディスプレイ - - 画面切り替えの安定化 - - エラー通知 - -- NATを越えた画面切り替え -- 音声配信等の共有機能の追加 - +# Gearef、GearImpl +- Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 +-