Mercurial > hg > Papers > 2015 > nozomi-sigos
diff presen/sigOS/sample.markdown @ 18:20c9082b212d
change2
author | Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2015 18:03:58 +0900 |
parents | a26eacfb4922 |
children |
line wrap: on
line diff
--- a/presen/sigOS/sample.markdown Mon May 25 03:29:25 2015 +0900 +++ b/presen/sigOS/sample.markdown Mon May 25 18:03:58 2015 +0900 @@ -3,82 +3,96 @@ profile:琉球大学 工学部 情報工学科 4年 # 研究目的 -* 並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。 -* Aliceのメタ計算として通信が切断した際の処理やデータを圧縮する処理等を提供することで、プログラマがコードを大きく変更することなくプログラムの振る舞いを変えることを可能にする。 +* 当研究室が開発している並列分散フレームワークAliceではスケーラブルな分散プログラムを信頼性高く記述できる環境を実現する。 +* Aliceのメタ計算として、通信が切断した際の処理やデータを圧縮する処理等を提供することで、プログラマがコードを大きく変更することなくプログラムの振る舞いを変えることを可能にする。 -# Aliceの概要(1) - Data Segment と Code Segment +# Data Segment と Code Segment * Aliceではデータを **Data Segment(DS)** 、タスクを **Code Segment(CS)** という単位に分割してプログラミングを行う。 * AliceはJavaで実装されており、CS をユーザーが記述する際には CodeSegment.class を継承することで CS で使用する API を利用する事ができる。 * DSはAliceが内部にもつデータベースにより管理されており、CSはDSに対応する一意のkeyを使ってDSを操作する。 -# Aliceの概要(2) - Data Segment と Code Segment -* CSはInput DS(入力されるDS)とOutput DS(出力されるDS)と呼ぶ。 +# Data Segment と Code Segment +* CSはInput DS(入力されるDS)とOutput DS(出力されるDS)を持つ。 * CSはkeyで指定されたDSが揃うと実行されるという性質を持つ。 ![opt](./images/dsandcs.svg) -# Aliceの概要(3) - CodeSegmentの依存関係 +# CodeSegmentの依存関係 * データの依存関係にないCSは並列実行される * データの依存関係がある場合は Input DS が揃うと順に実行される ![opt](./images/dsandcs2.svg) -# Aliceの概要(4) - Data Segment +# Data Segment * 整数や文字列などの基本的なデータの集まり * Aliceの場合はJavaオブジェクトに対応 -# Aliceの概要(5) - Data Segment Manager +# Data Segment Manager * DS の集合体であるデータベースを Alice では DS Manager(DSM) と呼ぶ。 -* DSM 内の DS には対になる String型のkey が存在し、 key を指定しすることで DS の保存、取得を行う。 -![opt](./pictures/dsm.svg) +* DSM 内の DS には対になる String型のkey が存在し、 DSM 名と key を指定しすることで DS の保存、取得を行う。 +* DS の追加 + put(String managerKey, String key, Object val) +* DS の取得 + take(String managerKey, String key) -# Aliceの概要(6) - Data Segment Manager +<!--![opt](./images/dsm.svg)--> + +# Data Segment Manager * Local DSM … 各ノード固有のデータベース。 * Remote DSM … 他のノードの Local DSM の proxy。接続しているノードの数だけ存在する。 - ![opt](./images/remote_datasegment.svg){:width="450px"} + ![opt](./images/remote_datasegment.svg){:width="450px"} + -# Aliceの概要(7) - Data Segment API -DSM に対して DSM の名前と DS を指し示すkey を指定することで操作を行う -* DS の追加 - put(String managerKey, String key, Object val) -* DS の取得 - take(String managerKey, String key) - -# Aliceの概要(8) - Data Segment の表現 -DSは複数の表現(多態性)を同時に持つ -1. 一般的な Java のクラスオブジェクト -2. MessagePack for Java でシリアライズ化されたバイナリオブジェクト。Remoteとの通信の際に用いる。 -3. 2 を圧縮したバイナリオブジェクト。圧縮機能の一部として今回追加。 +# Data Segment の表現 +* DSは複数の表現を同時に持っており、現在は3種類の表現がある。 + 1. 一般的な Java のクラスオブジェクト + 2. MessagePack for Java でシリアライズ化されたバイナリオブジェクト。Remoteとの通信の際に用いる。 + 3. 2 を圧縮したバイナリオブジェクト。圧縮機能の一部として今回追加。 # MessagePackとは -シリアライズのための機能をまとめたライブラリであり、プログラミング言語に依存しないデータの表現形式として使用できる。 +* Sadayuki Furuhashiが開発したシリアライズのための機能をまとめたオープンソースライブラリ。 +* シリアライズ/デシリアライズを高速に行うことができ、整数、浮動小数点数、Boolean、文字列、配列、連想配列、nilをバイト列にシリアライズできる。 +* JSONのようにプログラミング言語に依存しないデータの表現形式として使用できる。 -# Aliceの概要(9) - Code Segment +# CS と Input DS の対応付け * setKey()にtakeコマンドをセットすることで Input DS を指定する -* 実際にtakeしたデータを参照するときには、asClass()を用いて任意のJavaのオブジェクトとして扱えるようにする +* 実際にtakeしたデータを参照するときには、asClass()を用いて任意のJavaのオブジェクトとして扱えるようにする -# Computation と Meta Computation -* Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして考える -* これにより通常処理と例外処理を分離できるためシンプルなプログラムが記述可能 +# CS の 例 +RemoteDSM から DSをtakeし、LocalDSM に put を10回繰り返す +```java +public class RemoteIncrement extends CodeSegment { -# Alice の Computation -* keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する -* VNCの場合、VNCサーバからデータを受け取って表示する処理 + public Receiver num = ids.create(CommandType.TAKE); + + @Override + public void run() { + int num = this.num.asClass(Integer.class); + if (num == 10) System.exit(0); -# Alice の Meta Computation -* 通信の切断・再接続時の処理や分散トポロジーの構成、データの表現形式の選択など、Computationを支えている処理。 -* VNCの場合、VNCサーバのデータを各VNCノードにコピーする処理。 -* Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる + RemoteIncrement cs = new RemoteIncrement(); + cs.num.setKey("remote", "num"); + ods.put("local", "num", num); + } -# AliceのMeta Computation(1/2) -* Aliceではプログラマが記述する部分を *Computation*、Aliceが提供するComputationを支える部分を *Meta Computation* として分けて捉えている。 -* 分散環境の構築等の処理等は全てMeta Computationが行うためプログラマがシンプルに分散プログラムを記述できる環境を提供している。 +} +``` # TreeVNC -* AliceのMeta Computationを用いて実装する実用的な分散プログラムの例題 -* 本研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム -* TightVNCがもとになっており、この部分がComputationと言える +* Aliceを用いて実装する実用的な分散プログラムの例題 +* 当研究室で開発したノードを木構造に配置して負荷分散を行う授業向け画面共有システム +* TightVNCがもとになっている ![opt](./images/treeVNC.svg) +# Computation +* Aliceでは、計算の本質的な処理をComputatin、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。 +* Alice の Computationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理。 +* TreeVNC の Computationは、VNCサーバからデータを受け取って表示する処理。 + +# Meta Computation +* 通信の切断・再接続時の処理や分散トポロジーの構成、データの表現形式の選択など、Computationを支えている処理。 +* TreeVNCの場合、VNCサーバのデータを各VNCノードにコピーする処理。 +* Aliceの機能を追加するということは Meta Computation を追加すると言い換えられる + # TreeVNCで用いるAliceのMeta Computation * TreeTopologyの構成 * ノード間通信の切断時・再接続時の処理 @@ -86,12 +100,11 @@ * 子ノードへのデータの複製 -# TreeVNCでの圧縮 Meta Computation # データの転送 - DSMとAPIの追加 -* Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加した。 -* 指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる - put(String **"compressed"** + managerKey, String key, Object val) - take(String **"compressed"** + managerKey, String key) +* Local と Remote それぞれに圧縮表現を扱う Compressed DSM を追加。 +* 指定する DSM を Compressed DSM に変えるだけで扱うデータ表現を変更できる + put(String **"compressed"** + managerKey, String key, Object val) + take(String **"compressed"** + managerKey, String key) # データの転送 - データ表現の自動生成 * DS が圧縮表現を持っていれはそれをそのまま子ノードにputする @@ -101,11 +114,12 @@ # データの受け取り - 任意の形式での取得 * 圧縮表現で画面データ受け取り、Compressed DSM 内に格納。 * TightVNCが画面表示のためにデータを必要としたときに、 asClass() を用いて任意の形式でデータを取り出す。 -* asClass() は DS のcastメソッドであり、伸長と MessagePack での変換を行う。 +* asClass() は DS のcastメソッドであり、内部で伸長と MessagePack での変換を行う。 -# データの受け取り - Aliceの通信パケットの変更 +# データの受け取り - Aliceの通信パケット変更 * 通信ヘッダにデータの状態を表すフラグを追加したことで、受け取ったデータを適切な形式でDSM内に格納できる。 * 圧縮前と圧縮後のデータサイズを入れたことにより、受け取ったデータの適切な伸長が可能。 + <table style="border-collapse: collapse;border:1px solid #000000;"> <td style="border:1px solid #000000;"> serialized </td> <td style="border:1px solid #000000;">データ本体のシリアライズ状態を示す</td> @@ -124,7 +138,63 @@ </tr> </table> -# Aliceと他言語等との比較 +# Aliceと他言語等との比較(1) - Erlang +* ネットワークに依存しない通信が可能 + +* Topologyは自分で管理 + +# Aliceと他言語等との比較(1) - Linda +* keyでタプルというデータの集合を管理している +* in/outでAliceのput/takeに対応する操作を行う + +* タスクはinで単一のタプルを待つ +* MetaComputationがない + +# Aliceと他言語等との比較(1) - Corba +* オブジェクト間のRPC + +* DSがない。keyという概念がない。 +* データの待ち合わせがない + +# Aliceと他言語等との比較(1) - HTTP +* get/putで通信を行う +* URLがデータベースのkeyとなる + +* MIME形式で送信。複数の表現を持つMeta Computationがない。 +* セッション管理はクライアント自身がやる +* 並列処理できない +* get/putをRPC的に扱わない + + +# TreeVNCとAliceを用いたTreeVNCの比較 +* TreeVNC + 通信プロトコルを定義や圧縮を自前で行う + 通信スレッドを複数作成 + 様々な部分で通信APIを呼び出す + +* Aliceを用いたTreeVNC + Aliceと接続する最小限の変更 + 木の構成部分や圧縮形式での通信はMeta Computation + +# TreeVNCとAliceを用いたTreeVNCの比較 +* TightVNCからのコードの増加量 +* Aliceを用いれば通常の TreeVNC の 20% の行数で記述できる。 + +<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;"> Aliceを用いたTreeVNC </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> # まとめ * Alice が実用的なアプリケーションを記述するための Meta Computation として、データに多態性を持たせ、指定するDSMによってデータ表現を変える機能を実装した。