view presen/sample.html @ 11:13feccaa684f default tip

add presen
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 28 Dec 2015 19:43:36 +0900
parents
children
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8">
   <title>分散フレームワークAliceの圧縮機能</title>

<meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]">
<meta name="author"    content="照屋のぞみ" >

<!-- 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">分散フレームワークAliceの圧縮機能</font></h1>
          </div>
        </td>
      </tr>
      <tr>
        <td>
          <div align="left">
            照屋のぞみ
            琉球大学 工学部 情報工学科 4年
            <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.1.0 (2013-12-25) [x86_64-darwin13.0]
                on 2015-12-28 18:44:07 +0900 with Markdown engine kramdown (1.5.0)
                  using options {}
  -->

<!-- _S9SLIDE_ -->
<h1 id="section">研究目的(1/3)</h1>
<ul>
  <li>当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。</li>
  <li>ここで言う信頼性とは定められた環境下で安定して仕様に従った動作を行うことを指す。  </li>
  <li>Aliceでは当研究室が提案しているデータを Data Segment、タスクを Code Segment という単位で分割して記述するプログラミング手法を採用している。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-1">研究目的(2/3)</h1>
<ul>
  <li>Aliceでは、処理をComputationとMetaComputationに階層化し、コアな仕様と複雑な例外処理に分離する。</li>
  <li>もとのComputationを変更なくプログラムの挙動を変えさせることにより分散アプリケーションの信頼性向上をめざす。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-2">研究目的(3/3)</h1>
<ul>
  <li>本研究では、 Alice上に画面配信システムTreeVNCを構築する。</li>
  <li>構築するにあたり必要となった転送・圧縮などの機能を AliceのMeta Computationとして実装する。</li>
  <li>そしてTreeVNCとの比較を行うことで実用的なアプリケーション制作におけるMetaComputationの役割と有効性を示す。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="data-segment--code-segment">Data Segment と Code Segment</h1>
<ul>
  <li>Aliceではデータを <strong>Data Segment(DS)</strong> 、タスクを <strong>Code Segment(CS)</strong> という単位に分割して依存関係を記述することでプログラミングを行う。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="data-segment--code-segment-1">Data Segment と Code Segment</h1>
<ul>
  <li>CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。</li>
  <li>CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。
<img src="./images/dsandcs.svg" alt="opt" width="60%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="codesegment">CodeSegmentの依存関係</h1>
<ul>
  <li>データの依存関係にないCSは並列実行される</li>
  <li>データの依存関係がある場合は Input DS が揃うと順に実行される</li>
  <li>DSはCSに専有されるためロックを必要としない
<img src="./images/dsandcs2.svg" alt="opt" width="60%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="data-segment--codesegment">Data Segment と CodeSegment</h1>
<ul>
  <li>AliceはJavaで実装されており、DSはJava-Object、CSはRunnableに相当する</li>
  <li>ユーザーが記述する際には CodeSegment.class を継承することでDSを操作するためのAPIを利用して依存関係を記述することができる。</li>
  <li>DSはAliceが内部にもつデータベースにより管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="data-segment-manager">Data Segment Manager</h1>
<ul>
  <li>DS の集合体であるデータベースを Alice では <strong>DS Manager(DSM)</strong> と呼ぶ。  </li>
  <li>DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。</li>
  <li>keyに対して複数のDSを保存する際はFIFO的に処理される<br />
<img src="./images/KeyDS.svg" alt="opt" width="50%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="data-segment-manager-1">Data Segment Manager</h1>
<ul>
  <li>Local DSM … 各ノード固有のデータベース。</li>
  <li>Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。<br />
      <img src="./images/remote_datasegment.svg" alt="opt" width="60%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="data-segment-api">Data Segment API</h1>
<ul>
  <li>DS の追加<br />
    <ul>
      <li>put(String managerKey, String key, Object val)  </li>
      <li>update(String managerKey, String key, Object val)  </li>
    </ul>
  </li>
  <li>DS の取得<br />
    <ul>
      <li>take(String managerKey, String key)  </li>
      <li>peek(String managerKey, String key)  </li>
    </ul>
  </li>
</ul>

<!--![opt](./images/dsm.svg)-->


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="cs--input-ds-">CS と Input DS の対応付け</h1>
<ul lang="java">
  <li>take/peekは実際にはcreate()とsetKey()によって行われる</li>
  <li>create()でDSの受け皿を作っておき、setKey()にkeyをセットすることで Input DS を指定する</li>
</ul>
<pre><code>public class TestCodeSegment extends CodeSegment{

    private Receiver receiver = ids.create(CommandType.TAKE);

    public TestCodeSegment(){
        receiver.setKey("num");
    }

    @Override
    public void run() {
        int n = receiver.asInteger();
        ods.put("local", "num", ++n);
	}
}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="codesegment--">CodeSegment の 例</h1>
<ul>
  <li>RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す  
<img src="./pictures/remoteTest.svg" alt="opt" width="70%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="codesegment---1">CodeSegment の 例</h1>
<ul>
  <li>RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す<br />
<img src="./pictures/remoteTest2.svg" alt="opt" width="70%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 lang="java" id="startcodesegment">StartCodeSegment</h1>
<pre><code>public class RemoteStartCodeSegment extends CodeSegment {

    @Override
    public void run() {
        RemoteIncrement cs = new RemoteIncrement();
		cs.num.setKey("remote", "num");

		ods.put("local", "num", 0);
    }

}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 lang="java" id="codesegment---2">CodeSegment の 例</h1>
<pre><code>public class RemoteIncrement extends CodeSegment {

    public Receiver num = ids.create(CommandType.TAKE);

    @Override
    public void run() {
        int num = this.num.asInteger();
        if (num == 10) System.exit(0);

        RemoteIncrement cs = new RemoteIncrement();
        cs.num.setKey("remote", "num");

        ods.put("local", "num", ++num);
    }

}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="computation--meta-computation">Computation と Meta Computation</h1>
<ul>
  <li>Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。</li>
  <li>Alice のComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。</li>
  <li>分散トポロジーの構成、通信の切断・再接続時の処理やデータの表現形式の選択など、Computationを支えている処理。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="computation--meta-computation-1">Computation と Meta Computation</h1>
<ul>
  <li>AliceのMeta ComputationもCS/DSにより実現される</li>
  <li>DS/CSの接続の間にMeta Computationが実行されている
<img src="./images/MetaCSDS.svg" alt="opt" width="70%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="computation--meta-computation-2">Computation と Meta Computation</h1>
<ul>
  <li>分散環境構築などの複雑な処理をAliceがMeta Computationとして提供する</li>
  <li>プログラマは目的の処理だけ記述し通信部分などはMeta Computationを指定する</li>
  <li>Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alicemeta-computation---topology-manager">AliceのMeta Computation - Topology Manager</h1>
<ul lang="DOT">
  <li>トポロジーの構成・管理を <strong>Topology Manager</strong> が提供</li>
  <li>ユーザーはDOT Languageで記述したトポロジーファイルを用意しTopology Managerで指定する</li>
  <li>DOT Languageとは、プレーンテキストを用いてデータ構造としてのグラフを表現するためのデータ記述言語
  </li>
</ul>
<pre><code>digraph test{
	node0 −&gt; node1[label=”right”] node0 −&gt; node2[label=”left”]
	node1 −&gt; node2[label=”right”] node1 −&gt; node0[label=”left”]
	node2 −&gt; node0[label=”right”] node2 −&gt; node1[label=”left”]
}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topology-manager">Topology Managerの働き</h1>
<ul>
  <li>Topology Managerを起動しトポロジーファイルを読ませる<br />
<img src="./images/topM1.svg" alt="opt" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topology-manager-1">Topology Managerの働き</h1>
<ul>
  <li>NodeはTopology Managerに接続し、接続すべきNodeの情報を要求する<br />
<img src="./images/topM2.svg" alt="opt" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topology-manager-2">Topology Managerの働き</h1>
<ul>
  <li>Topology Managerが接続情報を各ノードに与える<br />
<img src="./images/topM3.svg" alt="opt" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topology-manager-3">Topology Managerの働き</h1>
<ul>
  <li>トポロジーが構成される<br />
<img src="./images/topM4.svg" alt="opt" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="topology-manager-4">Topology Manager</h1>
<ul>
  <li>参加ノード数が予め決まっていないこともあるため動的トポロジーにも対応</li>
  <li>Topology Managerを起動する際にトポロジーを指定する</li>
  <li>現在は二分木が用意されている</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alicemeta-computation---keep-alive">AliceのMeta Computation - Keep Alive</h1>
<ul>
  <li>ノードの切断検知のため、定期的に heart beat を送信し生存確認を行う</li>
  <li>一定時間内にノードからの応答がない場合そのノードのRemote DSMが切断される</li>
  <li>切断された際の再構成機能はTopology Managerがもつ  
<img src="./images/keepAlive.svg" alt="opt" width="70%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alicemeta-computation---">AliceのMeta Computation - 切断・再接続処理</h1>
<ul>
  <li>ノードが切断や再接続されたときにユーザーが任意のCSを実行したい場合がある</li>
  <li>ユーザーは任意のCSを記述後、ClosedEventManagerに指定する</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevnc">TreeVNC</h1>
<ul>
  <li>Aliceを用いて実装する実用的な分散プログラムの例題</li>
  <li>当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム  </li>
  <li>TightVNCがもとになっている<br />
<img src="./images/treeVNC.svg" alt="opt" width="50%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alicevnc">AliceVNC</h1>
<ul>
  <li>TreeVNCのコードは画面データの処理部分や分散処理部分が混在しており大変複雑</li>
  <li>Aliceを用いて実装すればTightVNCからの変更が少ない見通しの良い記述で構成可能
<img src="./images/AliceVNC.svg" alt="opt" width="60%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="treevncalicemeta-computation">TreeVNCで用いるAliceのMeta Computation</h1>
<ul>
  <li>TreeVNC の Computationは、VNCサーバからデータを受け取って表示する処理。  </li>
  <li>TreeVNCのMeta Computationは、VNCサーバのデータを各VNCノードにコピーする処理。 <br />
    <ul>
      <li>TreeTopologyの構成</li>
      <li>ノード間通信の切断時・再接続時の処理</li>
      <li>子ノードへのデータの複製</li>
      <li>データの圧縮</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="meta-computation">Meta Computationの追加</h1>
<ul>
  <li>TreeVNCの数MByteの画面差分データを配信し続けるためデータを圧縮している</li>
  <li>画面データを圧縮して送る → 解凍して画面表示 → 再圧縮して子ノードへ転送</li>
  <li>再圧縮オーバーヘッドなしにゼロコピー転送する機能が必要</li>
  <li>圧縮のMeta Computationと転送のMeta Computationを追加した</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="ds">今までのDSの表現</h1>
<ul>
  <li>DSは以下のどちらか一つの表現を持つ<br />
    <ol>
      <li>一般的なJavaのオブジェクト<br />
 LocalDSMにputしたときの形式  </li>
      <li>MessagePackでシリアライズ化されたバイナリオブジェクト<br />
 RemoteDSMにputしたときの形式  </li>
    </ol>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="messagepack">MessagePackとは</h1>
<ul>
  <li>Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。</li>
  <li>シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。</li>
  <li>JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="ds-1">今までのDSの形式</h1>
<ul>
  <li>DSは以下のどちらか一つの表現を持つ<br />
    <ol>
      <li>一般的なJavaのオブジェクト<br />
 LocalDSMにputしたときの形式  </li>
      <li>MessagePackでシリアライズ化されたバイナリオブジェクト<br />
 RemoteDSMにputしたときの形式  </li>
    </ol>
  </li>
  <li>今まではシリアライズ・デシリアライズのオーバーヘッドもあった  </li>
  <li>ただ圧縮する機能を追加するのではなく、再シリアライズ・再圧縮のオーバーヘッドをなくす形で圧縮のMeta Computationを実装する</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-3">圧縮表現の追加</h1>
<ul>
  <li>DSに対し以下の表現を同時に持たせる<br />
    <ol>
      <li>一般的なJavaのオブジェクト</li>
      <li>MessagePackでシリアライズ化されたバイナリオブジェクト</li>
      <li>2をさらに圧縮したバイナリオブジェクト</li>
    </ol>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 lang="java" id="section-4">圧縮表現の追加</h1>
<pre><code>public class ReceiveData {
	private Object val = null;
	private byte[] messagePack = null;
	private byte[] zMessagePack = null;
}
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="dsmapi">DSMとAPIの追加</h1>
<ul lang="java">
  <li>Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加</li>
  <li>指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる  </li>
</ul>
<pre><code>	put("Remote", "Key", val);  
	put("compressedRemote", "Key", val);  
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-5">データ表現の自動生成</h1>
<ul>
  <li>DS が圧縮表現を持っていれはそれをそのまま子ノードにputする</li>
  <li>持っていなければその時点でCompressed DSM内部で圧縮表現を生成してputする</li>
  <li>DS はオブジェクト表現と圧縮表現を同時にもつため、TreeVNCでは受け取った画面データを解凍した後、転送のために再圧縮することはない。</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-6">任意の表現での取得</h1>
<ul lang="java">
  <li>圧縮表現で画面データ受け取り、Local DSM 内に格納。</li>
  <li>AliceVNCが画面表示のためにデータを必要としたときに、 <strong>asClass()</strong> を用いてオブジェクト表現でデータを取り出す。</li>
  <li>asClass() は DS のcastメソッドであり内部で解凍とデシリアライズを行う</li>
  <li>ユーザーは送られてくるDSの表現を気にせず扱える</li>
</ul>
<pre><code>	Receiver receiver = ids.create(CommandType.TAKE);
	receiver.setKey("num");
	int n = receiver.asClass(Integer.class);
</code></pre>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="dsput">圧縮を指定してDSをputする例</h1>
<ul>
  <li>複数表現は必要最低限にしか作られない
<img src="./pictures/compressput.svg" alt="opt" width="90%" />  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="keyds">keyには様々な表現のDSが対応</h1>
<ul>
  <li>Compressed Local DSM は Local DSM は同じデータベースを指す  </li>
  <li>同じkeyに対して複数の表現を持ったDSが対応する場合もある<br />
<img src="./pictures/compressDS.svg" alt="opt" width="60%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-7">転送機能</h1>
<ul>
  <li>AliceではInputDSをReceiverに受け取ったあと、Receiverから任意の型で取り出し、操作してOutputDSとして出力する</li>
  <li>TreeVNCのように受け取ったデータをそのまま転送したいときには無駄</li>
  <li>受け取った形式のまま転送できる <strong>flipメソッド</strong> を追加。put/updateと同じように扱える。  
  flip(String managerKey, String key, Receiver receiver)</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="meta-computation-1">Meta Computationの評価</h1>
<p>TreeVNCとAliceVNCを比較した<br />
* 性能比較<br />
	同等の性能が実現できたか
* コード比較<br />
	シンプルな記述</p>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-8">性能比較 - 実験内容</h1>
<ul>
  <li>木の段数ごとにメッセージの到達にどれぐらい時間がかかっているかを計測</li>
  <li>講義内で学生に協力してもらい、最大 17 名の接続があった<br />
<img src="./pictures/delay.svg" alt="opt" width="50%" /><img src="./pictures/delay2.svg" alt="opt" width="50%" /></li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-9">性能比較 - 計測ヘッダの内容</h1>
<ul>
  <li>計測用ヘッダ  </li>
</ul>

<table style="border-collapse: collapse;border:1px solid #000000;">
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 変数名 </th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;">説明</th>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> time </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">ルートノードがパケットを送信した時刻</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">depth</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">9木の段数。初期値=1。</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">dataSize</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">送信時の形式に変換済みの画面データのサイズ</td>
	</tr>
</table>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-10">性能比較 - 実験結果</h1>
<ul>
  <li>3段目の計測結果</li>
  <li>同じ傾向から同等の処理性能があることがわかった<br />
<img src="./pictures/TreeVNC_depth3.svg" alt="TreeVNC" width="40%" />
<img src="./pictures/AliceVNC_compress_depth3.svg" alt="AliceVNC" width="40%" />  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-11">性能比較 - 圧縮・転送の有無</h1>
<ul>
  <li>圧縮に成功しているためデータがほとんど1Mbyte以下</li>
  <li>同じ1kbyteのデータでも転送機能有りのほうが100ms以下</li>
  <li>圧縮・転送を用いたほうがTreeVNCの結果と近いため、圧縮・転送のMeta Computationは有用
<img src="./pictures/AliceVNC_notcompress_depth3.svg" alt="AliceVNC" width="40%" /><br />
<img src="./pictures/AliceVNC_compress_depth3.svg" alt="AliceVNCz" width="40%" />  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-12">コード量比較</h1>
<ul>
  <li>TightVNCからのコードの増加量</li>
  <li>Aliceを用いれば通常の TreeVNC の 20% の行数で記述できる。</li>
</ul>

<table style="border-collapse: collapse;border:1px solid #000000;">
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"></th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;"> 行数 </th>
	<th style="border:1px solid #000000;padding:5px 15px 5px 15px;">単語数</th>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> TreeVNC </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">5049</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">14191</td>
	</tr>
	<tr>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;"> AliceVNC </td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">989</td>
	<td style="border:1px solid #000000;padding:5px 15px 5px 15px;">2355</td>
	</tr>
</table>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-13">コード複雑度比較</h1>
<ul>
  <li>循環的複雑度を用いる
  コード内の線形独立な経路の数。if や forが多いほど複雑度が高い。</li>
  <li>計測にはIntelliJのプラグイン「MetricsReloaded」を使用</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-14">コード複雑度比較</h1>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alice1---erlang">Aliceと他言語等との比較(1) - Erlang</h1>
<ul>
  <li>ネットワークに依存しない通信が可能</li>
  <li>Topologyは自分で管理</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="alice1---akka">Aliceと他言語等との比較(1) - Akka</h1>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-15">まとめ</h1>
<ul>
  <li>Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせる圧縮機能と、ゼロコピー転送の機能を実装した。</li>
  <li>TreeVNCをAlice上で実装し比較を行った結果、シンプルな記述でTreeVNCの基本機能を実現でき、同等の性能を出すことに成功した</li>
  <li>AliceのMeta Computationが信頼性の高い実 用的な分散アプリケーションの構築に有用であることが確認された</li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-16">今後の課題</h1>
<ul>
  <li>APIの再設計
    <ul>
      <li>put/updateに対しtake/peekがcreate()・setKey()の操作はわかりにくい</li>
    </ul>
  </li>
  <li>セキュリティをサポートしていない
    <ul>
      <li>圧縮と同様の手法で暗号形式のデータ表現を扱えるように拡張可能</li>
    </ul>
  </li>
  <li>Javaでの実装
    <ul>
      <li>AliceにGCは必要ない。GCを持たないCbC言語等での再実装を検討。</li>
    </ul>
  </li>
  <li>永続性の確保
    <ul>
      <li>現在はプロセスの終了と共にDSが失われる</li>
    </ul>
  </li>
</ul>


</div>
<div class='slide '>
<!-- _S9SLIDE_ -->
<h1 id="section-17">今後の課題</h1>
<ul>
  <li>TreeVNCでは拡張が困難であった別ネットワーク間の通信もTopology Manager を用いれば容易に拡張できると考えられる<br />
<img src="./pictures/overNAT.svg" alt="opt" width="60%" />  </li>
</ul>
<!-- === end markdown block === -->
</div>


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