# HG changeset patch # User Nozomi Teruya # Date 1432457784 -32400 # Node ID 99e5104997b742de450de61d3039df29fdb1683c # Parent c0fe42a8808deffcb6a2957af45ed322bbfe2bfb add compress part diff -r c0fe42a8808d -r 99e5104997b7 presen/sigOS/.DS_Store Binary file presen/sigOS/.DS_Store has changed diff -r c0fe42a8808d -r 99e5104997b7 presen/sigOS/images/treeVNC.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/presen/sigOS/images/treeVNC.svg Sun May 24 17:56:24 2015 +0900 @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r c0fe42a8808d -r 99e5104997b7 presen/sigOS/sample.html --- a/presen/sigOS/sample.html Sat May 23 16:11:04 2015 +0900 +++ b/presen/sigOS/sample.html Sun May 24 17:56:24 2015 +0900 @@ -35,7 +35,7 @@ @@ -174,13 +174,54 @@
-

Aliceの概要(4) - Code Segment

+

Aliceの概要(4) - Data Segment の表現

+
+ + +
    +
  • 一般的な Java のクラスオブジェクト +
      +
    • LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。
    • +
    +
  • +
  • MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト +
      +
    • RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。
    • +
    +
  • +
+ + + +
+
+ +
+
+
+

Aliceの概要(5) - Code Segment

  • Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。
  • 複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。
  • +
  • CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。
  • +
+ + + +
+
+ +
+
+
+

Aliceの概要(5) - Code Segment

+
+ + +
  • 入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。
  • keyで指定されたDSが揃うと実行されるという性質を持つ。 opt
  • @@ -191,10 +232,10 @@
-
+
-

Aliceの概要(5) - CodeSegmentの依存関係

+

Aliceの概要(6) - CodeSegmentの依存関係

@@ -210,16 +251,17 @@
-
+
-

AliceのMeta Computation

+

AliceのMeta Computation(1/2)

  • 並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。
  • Aliceではプログラマが記述する部分を Computation、Aliceが提供するComputationを支える部分を Meta Computation として分けて捉えている。
  • +
  • 分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。
@@ -227,10 +269,10 @@
-
+
-

AliceのMeta Computation

+

AliceのMeta Computation(2/2)

@@ -245,8 +287,8 @@
  • Javaで記述したAliceの実装システム
  • -
  • Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる
  • -
  • Meta ComputationもCSとDSにより表現されており、それぞれMeta CSとMeta DSと呼ぶ。
  • +
  • Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる
  • +
  • Meta Computation も CS と DS により表現されており、それぞれMeta CSとMeta DSと呼ぶ。
  • @@ -254,23 +296,48 @@
    -
    +
    +
    +
    +

    AliceVNC

    +
    + + +
      +
    • 研究室では授業向け画面共有システム TreeVNC の開発を行っている。
    • +
    • 授業で VNC を使う場合、1つ のコンピュータに多人数が同時につながるため、性能が大幅に落ちる
    • +
    • TreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う +opt
    • +
    + + + +
    +
    + +

    Alice の新機能

    -

    実用的なアプリケーションであるTreeVNCの実装で必要となった以下の機能をMeta Computation として実装した。
    -* flip機能 … Input DS を Output DSとして転送する -* 圧縮機能 … DS Managerの指定によってDSの表現を切り替える

    +
      +
    • Alice が実用的なアプリケーションを記述する能力をもつことを確認するために、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。
    • +
    • AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。
      +
        +
      • flip機能 … Input DS を Output DS として転送する
      • +
      • 圧縮機能 … DS Manager の指定によってDSの表現を切り替える
      • +
      +
    • +
    -
    +

    flip機能

    @@ -283,29 +350,169 @@
    -
    +

    圧縮機能

    +
      +
    • AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。
    • +
    • ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。
    • +
    • 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。
    • +
    + + + +
    +
    + +
    +
    +
    +

    圧縮機能 - Data Segmentの表現の変更

    +
    + + +

    1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。 + 1. 一般的な Java のクラスオブジェクト + 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト + 3. 2 を圧縮したバイナリオブジェクト

    + + + +
    +
    + +
    +
    +
    +

    圧縮機能 - Data Segmentの表現の変更

    +
    + + +
    	public class ReceiveData {
    +		private Object val = null;
    +		private byte[] messagePack = null;
    +		private byte[] zMessagePack = null;
    +	}
    +
    + + + +
    +
    + +
    +
    +
    +

    圧縮機能 - DSMの追加

    +
    + + +
      +
    • Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。
    • +
    • Compressed DSM にputする場合 +
        +
      • DS が圧縮表現を持っていればそれをputする
      • +
      • 持っていなければその時点で圧縮表現を作ってputする
      • +
      +
    • +
    -
    +
    +
    +
    +

    圧縮機能 - 任意の表現でDSを取得

    +
    + + +
      +
    • ReceiveData内にあるDSのcastメソッドであるasClass()を用いる
    • +
    +
    	public <T> T asClass(Class<T> clazz) {
    +		if (val != null) { return (T) val; }
    +
    +		if (zMessagePack != null && messagePack == null) {
    +			messagePack = unzip(zMessagePack, dataSize);
    +		}
    +
    +		return packer.read(messagePack, clazz);
    +	}
    +
    + + + +
    +
    + +
    -

    API設計

    +

    圧縮機能 - API設計

    +
    + + +

    通常のデータを扱う場合
    +* put(String managerKey, String key, Object val)
    +* take(String managerKey, String key)

    + +

    圧縮表現のデータを扱う場合
    +* put(String “compressed” + managerKey, String key, Object val)
    +* take(String “compressed” + managerKey, String key)

    + + + +
    +
    + +
    +
    +
    +

    圧縮機能 - 通信プロトコルの変更

    +
    + + +

    Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。 +データの 表現に圧縮した byteArray を追加したため、Remote から put された byteArray が圧縮されているのかそ うでないのかを判断する必要がある。

    + + + +
    +
    + +
    +
    +
    +

    圧縮機能の評価

    +
    + + +

    RingRelayTest

    + + + +
    +
    + +
    +
    +
    +

    まとめ

      -
    • put(String “compressed” + managerKey, String key, Object val)
    • -
    • take(String “compressed” + managerKey, String key)
    • +
    • Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。
    • +
    • これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。
    • +
    • 同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。
    • +
    • 今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。
    diff -r c0fe42a8808d -r 99e5104997b7 presen/sigOS/sample.markdown --- a/presen/sigOS/sample.markdown Sat May 23 16:11:04 2015 +0900 +++ b/presen/sigOS/sample.markdown Sun May 24 17:56:24 2015 +0900 @@ -50,43 +50,115 @@ +# Aliceの概要(4) - Data Segment の表現 +* 一般的な Java のクラスオブジェクト + * LocalDSM に put された場合は一般的な Java のクラスオブジェクトとして enQueue される。 +* MessagePack を用いて変換した byte[]で表現されたバイナリオブジェクト + * RemoteDSM に put された場合は通信時に byteArray に変換されたバイナリオブジェクトが enQueue される。 -# Aliceの概要(4) - Code Segment +# Aliceの概要(5) - Code Segment * Alice上で実行されるタスクの単位を Code Segment(CS) と呼ぶ。 * 複数のDSが入力され、その結果をDSとして出力するfunctionと捉えられる。 +* CS をユーザーが記述する際には CS を継承して記述することにより CS で使用する API を利用する事ができる。 + +# Aliceの概要(5) - Code Segment * 入力されるDSをInput DS、出力されるDSをOutput DSと呼ぶ。 * keyで指定されたDSが揃うと実行されるという性質を持つ。 ![opt](./images/dsandcs.svg) -# Aliceの概要(5) - CodeSegmentの依存関係 +# Aliceの概要(6) - CodeSegmentの依存関係 * データの依存関係にないCSは並列実行される * データの依存関係がある場合は依存を解決した順に実行される * 並列度あげるために、処理を細かく記述し、依存するDSを少なくする ![opt](./images/dsandcs2.svg) -# AliceのMeta Computation +# AliceのMeta Computation(1/2) * 並列指向プログラミング言語 Erlang では、分散環境の構築等の処理は全てプログラマが記述しなければいけない。 * Aliceではプログラマが記述する部分を *Computation*、Aliceが提供するComputationを支える部分を *Meta Computation* として分けて捉えている。 +* 分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。 -# AliceのMeta Computation +# AliceのMeta Computation(2/2) * AliceのComputation * keyによりData Segmentを待ち合わせてCode Segmentを実行する * AliceのMeta Computation * Javaで記述したAliceの実装システム -* Aliceの機能を追加するということはMeta Computationを追加すると言い換えられる -* Meta ComputationもCSとDSにより表現されており、それぞれMeta CSとMeta DSと呼ぶ。 +* Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる +* Meta Computation も CS と DS により表現されており、それぞれMeta CSとMeta DSと呼ぶ。 + +# AliceVNC +* 研究室では授業向け画面共有システム TreeVNC の開発を行っている。 +* 授業で VNC を使う場合、1つ のコンピュータに多人数が同時につながるため、性能が大幅に落ちる +* TreeVNCではノード同士を接続させ、木構造を構成することで負荷分散を行う +![opt](./images/treeVNC.svg) # Alice の新機能 -実用的なアプリケーションであるTreeVNCの実装で必要となった以下の機能をMeta Computation として実装した。 -* flip機能 … Input DS を Output DSとして転送する -* 圧縮機能 … DS Managerの指定によってDSの表現を切り替える +* Alice が実用的なアプリケーションを記述する能力をもつことを確認するために、TreeVNC を Alice を用いて実装した AliceVNC の作成を行った。 +* AliceVNCの実装で必要となった以下の機能をMeta Computation として実装した。 + * flip機能 … Input DS を Output DS として転送する + * 圧縮機能 … DS Manager の指定によってDSの表現を切り替える # flip機能 # 圧縮機能 +* AliceVNCは、ノードは受け取った画面データを描画すると同時に、子ノードの Remote DSM に送信する。 +* ノードは DS を受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。 +* 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。 -# API設計 -* put(String "compressed" + managerKey, String key, Object val) -* take(String "compressed" + managerKey, String key) +# 圧縮機能 - Data Segmentの表現の変更 +1つの Data Segment に対し以下の3種類の表現を同時に持たせ、必要に応じた形式で DS を扱う。 + 1. 一般的な Java のクラスオブジェクト + 2. MessagePack for Java でシリアライズ化され たバイナリオブジェクト + 3. 2 を圧縮したバイナリオブジェクト + +# 圧縮機能 - Data Segmentの表現の変更 +```java + public class ReceiveData { + private Object val = null; + private byte[] messagePack = null; + private byte[] zMessagePack = null; + } +``` + +# 圧縮機能 - DSMの追加 +* Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。 +* Compressed DSM にputする場合 + * DS が圧縮表現を持っていればそれをputする + * 持っていなければその時点で圧縮表現を作ってputする + +# 圧縮機能 - 任意の表現でDSを取得 +* ReceiveData内にあるDSのcastメソッドであるasClass()を用いる +```java + public T asClass(Class clazz) { + if (val != null) { return (T) val; } + + if (zMessagePack != null && messagePack == null) { + messagePack = unzip(zMessagePack, dataSize); + } + + return packer.read(messagePack, clazz); + } +``` + +# 圧縮機能 - API設計 +通常のデータを扱う場合 +* put(String managerKey, String key, Object val) +* take(String managerKey, String key) + +圧縮表現のデータを扱う場合 +* put(String **"compressed"** + managerKey, String key, Object val) +* take(String **"compressed"** + managerKey, String key) + +# 圧縮機能 - 通信プロトコルの変更 +Remote から put されたデータは必ずシリアライズ化されており byteArray で表現される。 +データの 表現に圧縮した byteArray を追加したため、Remote から put された byteArray が圧縮されているのかそ うでないのかを判断する必要がある。 + +# 圧縮機能の評価 +RingRelayTest + +# まとめ +* Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表 現を変える機能を実装した。 +* これによりユーザが記述する Computation 部分を大きく変えずに自由度の高い通信を行うことが可能になった。 +* 同様の手法により、暗号形式・JSON 形式など複数のデータ表現を扱えるように拡張できる。 +* 今後の課題としては、圧縮機能を AliceVNC で用 いることで有効性を測る必要がある。