view slides/index.html @ 31:819eedb5189e

add poster
author sugi
date Sat, 21 Feb 2015 00:10:08 +0900
parents 9d3fadcc379d
children
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
  <meta charset='utf-8'>
  <title>分散フレームワーク AliceのMeta Computationによる応用</title>

<!-- 
   Notes on CSS media types used:
 
   1) projection -> slideshow mode (display one slide at-a-time; hide all others)
   2) screen     -> outline mode (display all slides-at-once on screen) 
   3) print      -> print (and print preview)
  
   Note: toggle between projection/screen (that is, slideshow/outline) mode using t-key

   Questions, comments?
   - send them along to the mailinglist/forum online @ http://groups.google.com/group/webslideshow    
-->

<!-- style sheet links -->
<link rel="stylesheet/less" href="themes/blank/projection.css.less"  media="screen,projection">
<link rel="stylesheet/less" href="themes/blank/screen.css.less"      media="screen">
<link rel="stylesheet/less" href="themes/blank/print.css.less"       media="print">

<link rel="stylesheet/less" href="blank.css.less"    media="screen,projection">

<!-- Notes about less css support
     - all less stylesheets (*.css.less) need to get listed/loaded first (before the less.js script)
     - find more info about less.js online @ http://lesscss.org

    ***** NOTE:
   less.js browser script currently won’t work if you’re using Google Chrome
    and the path to your page starts with "file:///" due to a known Chrome issue.
   (In the developer/js console you will see:
     XMLHttpRequest cannot load file:///../s6/shared/projection.css.less.
     Cross origin requests are only supported for HTTP.)
  -->

<!-- add js libs (less, jquery) -->
<script src="js/less-1.1.4.min.js"></script>
<script src="js/jquery-1.7.min.js"></script>

<!-- S6 JS -->
<script src="js/jquery.slideshow.js"></script>
<script src="js/jquery.slideshow.counter.js"></script>
<script src="js/jquery.slideshow.controls.js"></script>
<script src="js/jquery.slideshow.footer.js"></script>
<script src="js/jquery.slideshow.autoplay.js"></script>
<script>
  $(document).ready( function() {
    Slideshow.init();
    
    // Example 2: Start Off in Outline Mode
    // Slideshow.init( { mode: 'outline' } );
    
    // Example 3: Use Custom Transition
    // Slideshow.transition = transitionScrollUp;
    // Slideshow.init();

    // Example 4: Start Off in Autoplay Mode with Custom Transition
    // Slideshow.transition = transitionScrollUp;
    // Slideshow.init( { mode: 'autoplay' } );
  } );
</script>

<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
<!--[if IE]>
<script src="js/jquery.microsoft.js"></script>
<![endif]-->

</head>
<body>

<div class="layout">
  <div id="header"></div>
  <div id="footer">
    <h1>分散フレームワークAlice上のMeta Computationとその応用</h1>
    <h2>琉球大学大学院 情報工学専攻 修士2年次 杉本優</h2>
  </div>
</div>

<div class="presentation">

  <!-- add slides here; example -->
  
  <div class='slide cover'>
    <h1>分散フレームワークAlice上のMeta Computationとその応用</h1>
    <ul>
	<p>琉球大学 杉本優
	<br>
	Feb 23, 2013
	</p>
    </ul>
  </div>


  <div class='slide'>
    <h1>研究の背景と目的</h1>
	<p>分散プログラムには信頼性とスケーラビリティが必要である。</p>
	<p>信頼性とは定められた環境下で安定して期待された動作を行う。</p>
	<p>スケーラビリティとはサービスの質をリソースを追加するだけで維持できる性能を指す。</p>
	<p>その両方を兼ね備えたアプリケーションの作成は容易ではない。</p>
	<p>マシンがメニコア化しているため分散プログラムにも並列性が求められる。</p>
	<p>これら全てを兼ね備えた分散プログラムの記述をサポートするフレームワークがAliceである。</p>
  </div>

  <div class='slide'>
    <h1>Aliceの計算モデル</h1>
    <p>データをData Segment、タスクをCode Segmentという単位に分割して記述する手法を提唱</p>
    <p>分散フレームワークAliceはそのプロトタイプとして開発された。</p>
    <p>AliceはKeyで指し示されるDSを待ち合わせてCSを実行させるComputationである</p>
  </div>

  <div class='slide'>
    <h1>Data Segment</h1>
    <p>Data Segment(DS)はコンピュータが表すことができる値である。</p>
    <p>Javaの実装では特定のオブジェクトにマッピングされ、マッピングされたクラスを通してアクセスされる。</p>
    <p>DSはAlice内部のData Segment Managerによって管理されている。</p>
    <p>DSに対応するkeyが設定されており、そのkeyを用いてデータベースに対して操作する。</p>
    <p>DSMにはLocal DSMとRemote DSMがあり、Local DSMは各ノード固有のデータベース</p>
    <p>keyを指定してDSを保存、取得を行う。</p>
  </div>


  <div class='slide'>
    <h1>Data Segment API</h1>
    <p>DSMに対して以下のコマンドを送り操作できる<p>
    <Div Align="center">
    <table border="4">
      <tr>
        <td>put</td><td>データを追加する</td>
      </tr>
      <tr>
	<td>update</td><td>データを更新する</td>
      </tr>
      <tr>
	<td>peek</td><td>データを取得する</td>
      </tr>
      <tr>
	<td>take</td><td>データを取得する。取得したデータはDSMから削除される。</td>
      </tr>
    </table>
    </Div>
  </div>


  <div class='slide'>
    <h1>Remote Data Segment Manager</h1>
    <p>Remote DSMは接続されているノードのLocal DSMのproxyである。</p>
    <p>Remote DSMに対してDSを書き込むと対応するノードのLocal DSMに転送される。</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><object type="image/svg+xml" data="images/remote_datasegment.svg" width="600"></td>
      </tr>
    </table>
    </Div>
  </div>

  <div class='slide'>
    <h1>Code Segment</h1>
    <p>Alice上で実行されるタスクの単位がCSである。</p>
    <p>複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。</p>
    <p>入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ</p>
    <p>keyで指定されたDSが揃うと実行されるという性質を持つ</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><object type="image/svg+xml" data="images/dsandcs.svg" width="600"></td>
      </tr>
    </table>
    </Div>
  </div>

  <div class='slide'>
    <h1>CodeSegmentの依存関係</h1>
    <p>データの依存関係にないCSは並列実行される</p>
    <p>データの依存関係がある場合は依存を解決した順に実行される</p>
    <p>タスクの依存関係を記述するにはタスクにデータの依存関係をつければよい</p>
    <p>並列度あげるために、処理を細かく記述し、依存するDSを少なくする</p>
    <table border="1">
      <tr>
        <td><object type="image/svg+xml" data="images/dsandcs2.svg" width="800"></td>
      </tr>
    </table>
    </Div>
  </div>

  <div class='slide'>
    <h1>実用的なアプリケーションに必要な機能</h1>
    <p>赤嶺一樹の修論の段階でAliceの基本機能でアプリケーションを記述できることは確認された。</p>

    <p>一方で実用的なアプリケーションには</p>
      <ul>
	<li>動的なトポロジーへの対応</li>
	<li>応答速度</li>
      </ul>
     <p>というものが求められる。</p>
     <p>本研究ではAliceに動的なトポロジーに関するMeta Computationの追加と速度改善を行った。</p>   
  </div>

  <div class='slide'>
    <h1>Meta Computation</h1>
    <p>Meta ComputationはComputationを実行するComputationである。</p>
    <p>AliceのComputationはkeyによりData Segmentを待ち合わせてCode Segmentを実行することである。<p>
    <p>AliceのMeta ComputationはJavaで記述したAliceの実装システムである。<p>

    <p>Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる</p>
    <p>Meta ComputationもCSとDSにより表現されている。</p>
    <p>Aliceを構成するCSとDSをそれぞれMeta CSとMeta DSと呼ぶ</p>

  </div>

  <div class='slide'>
    <h1>追加したMeta Computation</h1>
   <ul> 
      <li>Topologyを再構成</li>
      <li>keepAlive</li>
      <li>切断時の処理を変更</li>
      <li>再接続の処理を変更</li>
   </ul>
  </div>



  <div class='slide'>
    <h1>Topology(木構造)を再構成する</h1>
    <p>木構造で親Nodeが切断した場合に木を再構成する必要がある</p>
    <p>再構成のアルゴリズムはTreeVNCのアルゴリズムを利用しており、最後に参加したノードを落ちたノードの位置に移動させる</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td>
	  <object type="image/svg+xml" data="images/disconnect.svg" width="500">
	</td>
        <td>
	  <object type="image/svg+xml" data="images/reconnect.svg" width="500">
	</td>
      </tr>
    </table>
    </Div>
  </div>

    <div class='slide'>
    <h1>Keep Alive</h1>
    <p>ノード間の通信はRemote DSMに対して操作をすることで行われる。</p>
    <p>長時間通信が行われないとRemote DSMとの切断を発見するのに時間がかかる。</p>
    <p>接続はしているが、問題が発生し応答が遅れている場合がある。この遅れがアプリケーションの全体のパフォーマンスを落とす</p>

    <p>以上の問題を解決するのが、一定時間ごとにMessageを送るKeepAliveという機能</p>
    <p>一定時間内にMessageが届かなければ、そのノードとのConnectionを切断する</p>
    <table border="1">
      <tr>
        <td><object type="image/svg+xml" data="images/keepAlive.svg" width="800"></td>
     </tr>
    </table>
    </Div>

  </div>

  <div class='slide'>
    <h1>切断時と再接続時の処理の変更</h1>

    <p>MMORPGなどのRPGではゲームの最中にサーバと切断される場合がある。<p>
    <p>その場合、操作するキャラクターはゲーム開始時の位置に戻される</p>
    <p>アプリケーションにはノードの切断に対する処理を用意したい</p>
    <p>同様に切断されたノードが再接続した際に対して処理を用意したい</p>

  </div>

  <div class='slide'>
    <h1>再接続時の処理の変更</h1>
<h3>切断時に対する処理の設定するAPI</h3>
<div class="source">
<pre>

ClosedEventManager
public static void register(Class clazz)
</pre>
</div>
<h3>再接続のに対する処理を設定するAPI</h3>
<div class="source">
<pre>
TopologyNodeConfig
public void register(Class clazz)
</pre>
</div>
<p>再接続と切断時の処理を設定するAPIは今回追加したMeta Computation中で特殊である。</p>
<p>APIを呼ぶ際にClassを指定する。指定できるClassはCode Segmentを継承したClassのみ</p>
<p>指定したClassは、Code Segmentの性質からDSが揃い次第実行される</p>
<p>アプリケーションとして実行されるのではなく、Meta Computationとして実行される</p>
<p>この2つのAPIはMeta Computationの振る舞いを自由に変更することができる</p>

  </div>

  <div class='slide'>
    <h1>Meta Computationの改善</h1>
    <p>例題を通して発見された問題を示す</p>
    <ul>      
      <li>SEDAによる応答性の悪化</li>
      <li>DataSegmentの作成時のコピー</li>
      <li>パケット作成時のMessagePackによる変換</li>
    </ul>
  </div>

  <div class='slide'>
    <h1>SEDA Architectureによる応答性の悪化</h1>
    <p>SEDAとはマルチスレッドを用いて大量の接続を管理し、データを処理ごとに分けられたステージと呼ばれるスレッドで処理を行う機構</p>
    <p>AliceにおけるSEDA</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><img src="images/seda.png" width="900"></td>
      </tr>
    </table>
    </Div>
    <p>多段のパイプラインによりレスポンスが遅れる</p>
    <p>Sortのようなレスポンス重視のプログラミングには不向き</p>
    <p>コア数が少ないマシンではスレッドの切り替えが頻繁に起こる</p>
  </div>

  <div class='slide'>
    <h1>Output DS作成時のコピー</h1>
    <p>Input DSはCSにより変更されOutput DSとして出力される。</p>
    <p>変更されたDSをコピーし新しくDSを作成する。</p>
    <p>このコピーがOverheadである。</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><img src="images/put.png" width="700"></td>
      </tr>
    </table>
    </Div>
  </div>

  <div class='slide'>
    <h1>Output DS作成時のコピーに対する改善案</h1>
    <p>Input DSとOutput DSをSwapすることで解決をはかった</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><img src="images/flip.png" width="700"></td>
      </tr>
    </table>
    </Div>
    <p>Input DSとOutput DSを入れ替える</p>
    <p>後から必要な部分だけ変更を加えるため無駄なコピーを抑える</p>
  </div>

  <div class='slide'>
    <h1>パケット作成時のMessagePackによる変換</h1>
<p>DSMに対する通信を行う際はCommandMessage型のオブジェクトをMessagePackというシリアライズライブラリを用いてシリアライズを行う</p>
<div class="source">
<pre>
public class CommandMessage {
    public int type;
    public int seq;
    public String key;
<font color="#ff3030">    public byte[] val;</font>
    public boolean quickFlag;
    public boolean serialized;
}
</pre>
</div>
<p>変数valにMessagePackによりシリアライズされたDSをが入る。</p>
<p>CommandMessage型のオブジェクトをMessagePackで変換するとDS部分が2回変換する。</p>
<p>2回目の変換がOverheadになる</p>

<p>val部分をCommandMessageから分離させて、残った要素に対して変換を行うことでval部が2回シリアライズされることを防ぐ</p>
  </div>


  <div class='slide'>
    <h1>RingTopologyによる評価</h1>
    <p>改善効果をRingTopologyの例題により計測した。</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><object type="image/svg+xml" data="images/topologyring.svg" width="500"></td>
      </tr>
    </table>
    </Div>
    <p>リングトポロジーを構成し、Messageが100周する時間を計り、1周あたりの平均時間を求めた。</p>
    <p>先行研究であるFederated Lindaも比較した。</p>
  </div>

  <div class='slide'>
    <h1>RingTopologyの測定結果</h1>
    <p>赤の実線が改善後のAlice、青の破線が改善前のAliceそして緑の点線がFederatedLindaである。</p>
    <Div Align="center">
    <table border="1">
      <tr>
        <td><object type="image/svg+xml" data="images/compare_100KB.svg" width="800"></td>
      </tr>
    </table>
    </Div>
    <p>改善後は改善前と比べ<font color="#ff3030">12%</font>性能が向上した。Federated Lindaと同等の性能を持つ</p>
  </div>

  <div class='slide'>
    <h1>bitonic sortによる評価</h1>
    <p>改善効果をbitonic sortの例題により計測した。分割数は4つで行った。</p>
    <Div Align="center">
    <table border="2">
      <tr>
        <td></td><td>改善前</td><td>改善後</td>
      </tr>
      <tr>
        <td>実行時間(ms)</td><td>164.8</td><td>112.1</td>
      </tr>
    </table>
    </Div>
    <p>改善後は改善前と比べ<font color="#ff3030">32%</font>性能が向上した。</p>

  </div>

  <div class='slide'>
    <h1>TreeVNCとAliceVNCとの比較</h1>
    <p>共有画面システムであるTreeVNCとTreeVNCAlice上で実装したAliceVNCをコードの量から比較した</p>
    <Div Align="center">
    <table border="3">
      <tr>
        <td></td><td>行数</td><td>単語数</td>
      </tr>
      <tr>
	<td>TreeVNC</td><td>5049</td><td>14191</td>
      </tr>
      <tr>
        <td>AliceVNC</td><td><Div Align="right">989</Div></td><td><Div Align="right">2355</Div></td>
      </tr>
    </table>
    </Div>
    <p>Aliceを使うことで記述するソースコードを80%減らすことができる</p>
  </div>



  <div class='slide'>
    <h1>結論</h1>
    <p>本研究ではAliceに動的なトポロジーの対応機能とMeta Computationの追加を行った。</p>
    <p>その結果、画面共有システムであるTreeVNCをAlice上で実装することができた。</p>

    <p>Aliceの性能改善を行った結果、リングの実験では<font color="#ff3030">12%</font>、sortの例題では<font color="#ff3030">32%</font>性能を改善できた。</p>

    <p>Aliceに実用的なアプリケーションを記述する能力があることを確認できた。</p>
  </div>

  <div class='slide'>
    <h1>今後の課題</h1>
    <h3>圧縮機能</h3>
    <p>Remote DSMへ書き込みを行う際に転送量を抑えたい場合がある。</p>
    <p>TreeVNCの場合、独自の圧縮アルゴリズムを用いて画面データを圧縮して送信している</p>
    <h3>永続性の確保</h3>
    <p>memory上にDSがあるため、プロセスの終了と共にすべて失われてしまう</p>

    <h3>syntaxの問題</h3>
    <p>特定の操作を行う際、APIを決められた順番で呼ばなければならない</p>
  </div>


  <div class='slide'>
    <h1>デモ</h1>
    <ul>
      <li>水族館の例題</li>
      <li>AliceVNC</li>
    </ul>
  </div>
  
  <div class='slide'>
    <h1>

    </h1>

  </div>

  <div class='slide'>
    <h1>今後の課題</h1>
  </div>


  <div class='slide'>
    <h1>AliceVNC</h1>
    
  </div>

  <div class='slide'>
    <h1>TCP_NODELAYとTCP_DELAYとの比較</h1>
    <p>TCP_DELAYはパケットを送信する際に小さいパケットを送るのではなく、まとめて大きいパケットとして送る手法。飛び交うパケットを減らすことで通信効果を向上させる</p>
    <Div Align="center">
    <table border="1">
      <tr>
	<td><object type="image/svg+xml" data="images/compareTcpDelay.svg" width="800"></td>
      </tr>
    </table>
    <Div>
     
  </div>

</div> <!-- presentation -->
</body>
</html>