# HG changeset patch # User Shinji KONO # Date 1357634276 -32400 # Node ID b7fb46ffac370706664e5057ed9b26053af8d159 # Parent 5f961785fb0c1d07f4b3d12c0360851bc456fb38 add ui directory to o2s5 directory diff -r 5f961785fb0c -r b7fb46ffac37 presen/alice-presen.ind --- a/presen/alice-presen.ind Tue Jan 08 17:17:09 2013 +0900 +++ b/presen/alice-presen.ind Tue Jan 08 17:37:56 2013 +0900 @@ -1,551 +1,414 @@ - - - - - - - Presentation +--研究背景 - - - - - - - +本研究室では分散プログラミングに置いて、タスクをCode Segment、データをData Segmentという単位に分割して記述する方法を提唱している。

+

しかし、前述したプログラムをプログラマーが一から記述していくことは大変である。

+

そこで、本研究室の卒業生である赤嶺一樹氏が分散ネットフレームワークAliceのプロトタイプを作成した。

+

本研究では実際にAliceを利用して、水族館の例題を作成した。また、Federated Lindaとの性能比較を行った。そして、Aliceの問題点の洗い出し、APIの見直しを行った。

+ +--発表内容 + -
- - - -
-

- CodeSegmentとDataSegmentによるプログラミング手法 - -

-

- 河野 真治
- 杉本 優 -

- 琉球大学 並列信頼研究室 -
+--Alice + -
-

Data Segment API - peek

-
  • データを取得する
-
-
-
-
    +--Data Segment API - peek +
    • データを取得する
    +
    +
    +
    +
      peekはデータを取得しreceiverに渡す。 -
    -
+ -
-

Data Segment API - peek

-
-
-
-
    -

    要求したデータがない場合にはwaitListに登録する。

    +--Data Segment API - peek +
    +
    +
    +
      +

      要求したデータがない場合にはwaitListに登録する。

      データがput、updateされる際に要求したデータがあるかどうかを再びチェックする。 -
    -
+ + +--Data Segment API - take + +
+
+
+ -
-

Data Segment API - take

-
  • データを取得して取得されたデータはdequeueされる
-
-
-
-
    -

    基本的な動作はpeekと同じである。

    -

    peekと異なる点は取得されたデータがdequeueされる。

    -
-
- -
-

Data Segmentの実装

-
    +--Data Segmentの実装 +
      Data Segmentのデータ表現はMessagePackを使用。 -
    -

      JavaにおけるMessagePackのデータ表現

      -
    • 一般的なJavaのクラスオブジェクト
    • -
    • MessagePack for JavaのValueオブジェクト
    • -
    • byte[]で表現されたバイナリ
    • -
    -
      -

      Data Segment APIでは

      +
    +

      JavaにおけるMessagePackのデータ表現

      +
    • 一般的なJavaのクラスオブジェクト
    • +
    • MessagePack for JavaのValueオブジェクト
    • +
    • byte[]で表現されたバイナリ
    • +
    +
      +

      Data Segment APIでは

      MessagePack for javaのValueオブジェクトを使用

      MessagePackのバイナリにシリアライズできる型のみで 構成されているため自己記述式のデータ形式 -
    -
+ -
-

Data Segmentの実装

-
    -

    Valueオブジェクトは通信に関わる際には、シリアライズ、デシリアライズを高速に行うことができる

    -
    +--Data Segmentの実装 +
      +

      Valueオブジェクトは通信に関わる際には、シリアライズ、デシリアライズを高速に行うことができる

      +
      ユーザーが一般的なクラスをIDL(Interface Definition Language)のように用いてデータを記述することが可能 -
    -
+ -
-

CodeSegment

-
    -
  • Code Segmentはタスクのこと
  • -
  • ユーザーが記述する際にCode Segment内で使用する
    Data Segmentの作成を記述
  • -
  • Input Data SegmentとOutput Data Segmentを作るAPI
  • -
  • 必要なInput Data Segmentが揃った時に実行される
  • -
-
+--CodeSegment + -
-

Input Data SegmentとOutput Data Segment

-
    -
  • localかremoteを指定
  • -
  • Data Segmentに関連付けされているKEYを指定
  • -
-
+--Input Data SegmentとOutput Data Segment + -
-
    -

    Data Segmentの例

    - -
-
+ -
-

Input Data Segmentの例

-
    -
    +--Input Data Segmentの例 +
      +
      Receiverの作成
      PEEK,TAKEのどちらかを選択 -
    -
      -
      +
    +
      +
      第1引数 マシン名
      第2引数 Data Segmentに関連付けられているKEY
      第3引数 index(指定しない場合は先頭データが取得される)
      -
    -
+ -
-

Output Data Segmentの例

-
    -
    +--Output Data Segmentの例 +
      +
      putかupdateのどちらかを選択 -
    -
      +
    +
      第1引数 マシン名
      第2引数 Data Segmentに関連付けるKEY
      第3引数 Data Segment
      -
    -
+ -
-

Code Segmentの実行方法

-
    -
    -
-
    +--Code Segmentの実行方法 +
      +
      +
    +
      AliceにはCのmainに相当するStart Code SegmentというCode Segmentが存在する。
      Start Code SegmentはInput Data Segmentが存在しない。 -
    -
+ -
-

Code Segmentの実行方法

-
    -
    -
-
    +--Code Segmentの実行方法 +
      +
      +
    +
      このStart Code Segmentをnewし、executeメソッドを呼ぶことでCode Segmentを実行することができる。 -
    -
+ -
-

Code Segmentの記述方法

-
    -
    -
+--Code Segmentの記述方法 +
    +
    +
ユーザがCode Segmentを記述する際にはCode Segmentを継承する。
runの中に実際にさせたい処理を記述する。 -
-
-

Topology Manager

-
    +--Topology Manager +
      Alice同士の接続トポロジーを管理する。
      トポロジーファイルを読み込み、参加を表明したクライアントに接続すべきクライアントのIPアドレスやポート番号、接続名を送る。 -
      - -
      -
    -
+
+ +
+ -
-

Topology Manager

-
    +--Topology Manager +
      Topology Manager関連の通信は全て、Code Segmentで実装されている。 -
    -
+ -
-

トポロジーファイル

-
    -

    トポロジーファイルはDOT Languageと言う言語で記述される。

    +--トポロジーファイル +
      +

      トポロジーファイルはDOT Languageと言う言語で記述される。

      DOT Languageはプレーンテキストを用いてデータ構造としてのグラフを表現するデータ記述言語の一つ。
      DOT Languageのグラフ構造を用いてTopology Node間の接続を表現する。
      -
    -
+ -
-

トポロジーファイルの記述方法

-
    - -

    dotコマンドを用いて、グラフの画像ファイルを生成することができるのでトポロジーが正しいか確認することができる。

    +--トポロジーファイルの記述方法 +
      + +

      dotコマンドを用いて、グラフの画像ファイルを生成することができるのでトポロジーが正しいか確認することができる。

      -
    -
+ -
-

トポロジーファイルの確認方法

-
    -

    dot -T png ring.dot -o ring.png

    -
    - -
    -
-
+--トポロジーファイルの確認方法 + -
-

水族館の例題

-
    -

    複数の魚が複数のディスプレイ上を移動する。

    -

    魚のうち一匹はクライアントが操作することができる。

    -

    トポロジーはツリー状に構成してある。

    -
-
- -
-
+--水族館の例題 + +
+ +
-
-
- -
-
+
+ +
-
-

性能比較 - 実験概要

-
    +--性能比較 - 実験概要 +
      AliceとFederated Linda で性能比較を行った。
      Ring型のトポロジーを構成、メッセージが100周する時間を計測。 1周あたりの平均時間を求めた。 -
      - -
      +
      + +
      パケットのサイズは10byte,10Kbyte,100kbtyeで実験 -
    -
+ -
-

実験環境

-
    +--実験環境 +
      ブレードサーバー上の仮想マシンによる仮想クラスタ環境を用いて実験した。
      -

      ブレードサーバー詳細

      - - - - - - - - - - - - - - - - - - - - - - - - -
      マシン台数8台
      CPUIntel(R) Xeon(R) X5650 @ 2.67GHz
      物理コア数12
      論理コア数24
      CPU キャッシュ12MB
      Memory132GB
      +

      ブレードサーバー詳細

      + + + + + + + + + + + + + + + + + + + + + + + + +
      マシン台数8台
      CPUIntel(R) Xeon(R) X5650 @ 2.67GHz
      物理コア数12
      論理コア数24
      CPU キャッシュ12MB
      Memory132GB
      -
    -
-
-

実験環境

-
    -

    仮想クラスタ詳細

    - - - - - - - - - - - - - - - - - - - - - - - - -
    マシン台数48台
    CPUIntel(R) Xeon(R) X5650 @ 2.67GHz
    物理コア数2
    論理コア数4
    CPU キャッシュ12MB
    Memory8GB
    -
-
+ +--実験環境 + -
-

実験結果

-
    - 10byte
    - -
-
+--実験結果 + -
-

実験結果

-
    - 10kbyte
    - -
-
+--実験結果 + -
-

実験結果

-
    - 100kbyte -
    +--実験結果 +
      +100kbyte +
      データ量が増えると差が縮まっている。これはここの通信の手間の影響が大きことを示している。 -
    -
+ -
-

評価と考察

-
    +--評価と考察 +
      今回の実装はJavaによりCode SegmentとData Segmentに必要なAPIを洗い出すものだった。この実装でも問題をいくつか発見した。
      -

      API

      -
    • Class継承したりData Segmentの作成にFactory objectを使うのはJavaを使う際の技術的な問題
    • -
    • JavaのObject指向な記述が全体を煩雑にしている部分がある
    • -
    • updateはData Segmentの競合的な更新に使われるべきだと思われる
    • -
    -
+

API

+
  • Class継承したりData Segmentの作成にFactory objectを使うのはJavaを使う際の技術的な問題
  • +
  • JavaのObject指向な記述が全体を煩雑にしている部分がある
  • +
  • updateはData Segmentの競合的な更新に使われるべきだと思われる
  • + -
    -

    評価と考察

    -

    SEDA

    -
      -
    • Federated Lindaに比べ遅い原因の一つはSEDA architectureのせいと思われる
    • -
    • SEDAはスループット重視の実装であり、多段パイプラインのせいでレスポンスが遅れてしまう
    • +--評価と考察 +

      SEDA

      +
        +
      • Federated Lindaに比べ遅い原因の一つはSEDA architectureのせいと思われる
      • +
      • SEDAはスループット重視の実装であり、多段パイプラインのせいでレスポンスが遅れてしまう
      • -
      -
    + -
    -

    評価と考察

    -
      -
    • スレッドプールを使わないほうが、Ringの結果は良い
    • -
      -
    -
    +--評価と考察 + -
    -

    評価と考察

    -

    MessagePack

    -
      -
    • 今回の実装では単純なMessageの転送時にもMessagePackのdecode/encodeをしているが、overheadになってしまうため、decode/encode抜きに直接操作できるほうが望ましい
    • -
    • Data Segmentの一部の修正をするたびにData Segmentが再構成されているがこれは望ましくない
    • -
    • AliceもCeriumのようにInput Data SegmentとOutput Data SegmentをswapするAPIがあるとよいと思われる
    • -
    -
    +--評価と考察 +

    MessagePack

    + -
    -

    評価と考察

    -

    Key

    -
      -
    • 分散実装においてはData Segmentの相互参照はKey経由が打倒であるが、並列実装では全てのData SegmentをKey Value Storeに格納するのは、性能的な問題を引き起こす
    • -
    • 分散記述と並列記述を分ければ解決するが、2つの記述がかけ離れるのは好ましくない
    • -
    • 本来Key Value storeは持続性を持たせる必要がある
    • -
    -
    +--評価と考察 +

    Key

    + -
    -

    評価と考察

    -

    Java

    -
      -
    • Data SegmentはCode Segmentがactiveの時のみメモリ上にあり、その最大値はActive Taskの量を見積もればよいのでAliceにGarbage Collectionの機能は必要ない
    • -
    • key Value Store 上のデータは決してGarbage Collectionの対象にはならないが、それがGarbage Collectionに負荷をかける結果となるためAliceとJavaの相性は悪い
    • -
    -
    +--評価と考察 +

    Java

    + -
    -

    評価と考察

    -

    拡張性

    -
      -
    • 分散アプリケーションのプロトコルは常に変更されるため、Aliceもそれに対応する必要がある
    • -
    • Keyとトポロジーマネージャーをプロトコル毎に別に用意すれば複数のプロトコルを同時に走らせることが可能
    • -
    • Data SegmentとCode Segmentの結びつきは弱いため、Data Segmentに余計な値がある場合、値が足りない場合に適切な値を設定することで古いCode Segmentを変更するとこなしにプロトコルを拡張できる
    • -
    -
    +--評価と考察 +

    拡張性

    + -
    -

    まとめと課題

    -
      -

      今回Code SegmentとData Segmentによる並列分散フレームワークのJavaによる実装を示した。実装でしかえられない知見を得ることができた。

      -

      今回Javaによる実装を行ったがJavaがAliceの実装に不向きであるということもわかった。

      -

      -

    • Code Segment/Data Segmentを見たコンパイラ的アプローチ
    • -
    • 実行時最適化
    • -
    • CbCによる実装
    • +--まとめと課題 +
        +

        今回Code SegmentとData Segmentによる並列分散フレームワークのJavaによる実装を示した。実装でしかえられない知見を得ることができた。

        +

        今回Javaによる実装を行ったがJavaがAliceの実装に不向きであるということもわかった。

        +

        +

      • Code Segment/Data Segmentを見たコンパイラ的アプローチ
      • +
      • 実行時最適化
      • +
      • CbCによる実装
      • などが有効、効果的だと思われる。

        -

        今回はノード内の並列実行やGPGPUによる並列実行などは考慮していない。将来的にそれを含め実装をしていきたい。

        -
      -
    - -
    - - +

    今回はノード内の並列実行やGPGPUによる並列実行などは考慮していない。将来的にそれを含め実装をしていきたい。

    + diff -r 5f961785fb0c -r b7fb46ffac37 presen/index.html --- a/presen/index.html Tue Jan 08 17:17:09 2013 +0900 +++ b/presen/index.html Tue Jan 08 17:37:56 2013 +0900 @@ -18,7 +18,7 @@ + src='ui/google/slides.js'>