# HG changeset patch # User kazz # Date 1328829724 -32400 # Node ID 0548eea96c28d9f34b357e87822bb3eba719aca9 # Parent 2f67ebce9b2f2750ca11b81ff0ce9cf1d9c763e2 add introduction diff -r 2f67ebce9b2f -r 0548eea96c28 paper/chapter1.tex --- a/paper/chapter1.tex Fri Feb 10 06:59:21 2012 +0900 +++ b/paper/chapter1.tex Fri Feb 10 08:22:04 2012 +0900 @@ -1,7 +1,7 @@ \chapter{Federated Linda の実装により得られた知見} \section{Federated Linda} -本研究室では、自然に分散プログラミングが書けるようなプログラミングモデルとして、グローバルな ID を持たない連邦型タプルスペース(以下 Federated Linda と記す)を提案してきた。 +本研究室では、自然に分散プログラミングが書けるようなプログラミングモデルとして、グローバルな ID を持たない連邦型タプルスペース(以下 Federated Linda \cite{linda, globalid, dinamicrouting, dinamicrouting2, dinamicrouting_compact, akamine:2010a} と記す)を提案してきた。 \subsection{Linda} Linda は、タプルという ID で番号づけられたデータの集合を、以下の API (表\ref{tb:lindaApi}) を用いて共有されたタプルスペースに出し入れすることにより、外部との通信を行うプログラミングモデルである。(図\ref{fig:lindaServer}) @@ -162,7 +162,7 @@ この方法では、大きな容量のデータを送受信した際に、 CPU がそのデータの送受信にかかりっきりになってしまい、その処理が終わるまで他の小さな処理が全て待ち状態になってしまうといった問題が発生していた。 -しかし、近年では、シングルコア CPU の性能向上が発熱量等の問題により頭打ちとなり、マルチコアのマシンが主流となっている。将来的にはメニーコアのマシンが主流になっていくと考えられる。そのような背景を踏まえて、 Apache の Cassandra プロジェクトではデーモンの実装に SEDA アーキテクチャを採用している。これは、マルチスレッドを用いて大量の接続を管理し、受け取ったデータを、処理ごとに分けられたステージと呼ばれるスレッドに投げ、処理が終わると次のステージにデータを伝搬させる。これを用いることによってマルチコア性能を生かし、パイプライン的に効率よく処理することが可能となっている。 +しかし、近年では、シングルコア CPU の性能向上が発熱量等の問題により頭打ちとなり、マルチコアのマシンが主流となっている。将来的にはメニーコアのマシンが主流になっていくと考えられる。そのような背景を踏まえて、 Apache の Cassandra プロジェクト\cite{cassandra}ではデーモンの実装に SEDA アーキテクチャ \cite{seda} を採用している。これは、マルチスレッドを用いて大量の接続を管理し、受け取ったデータを、処理ごとに分けられたステージと呼ばれるスレッドに投げ、処理が終わると次のステージにデータを伝搬させる。これを用いることによってマルチコア性能を生かし、パイプライン的に効率よく処理することが可能となっている。 分散アプリケーションを作成する上で、マルチスレッドをどのように活用するかといったことが、重要な課題となっている。 diff -r 2f67ebce9b2f -r 0548eea96c28 paper/chapter2.tex --- a/paper/chapter2.tex Fri Feb 10 06:59:21 2012 +0900 +++ b/paper/chapter2.tex Fri Feb 10 08:22:04 2012 +0900 @@ -32,7 +32,7 @@ \section{Data Segment と Code Segment} -本研究室では、並列タスク管理フレームワーク Cerium (以下、 Cerium) の開発を行なっているが、その設計と実装を行うにあたり、並列プログラミングと分散プログラミングは本質的には同じことを行なっていることが分かった。特に、ヘテロジニアスマルチコアであり、ローカルストアをそれぞれのコアが持っているという Cell の特異な環境は、分散プログラミングの環境と酷似している。それらを踏まえて、 Cerium のタスク管理手法を分散に応用できないかと考えた。 +本研究室では、並列タスク管理フレームワーク Cerium\cite{yutaka:2010a, yutaka:2011a, yutaka:2011b} (以下、 Cerium) の開発を行なっているが、その設計と実装を行うにあたり、並列プログラミングと分散プログラミングは本質的には同じことを行なっていることが分かった。特に、ヘテロジニアスマルチコアであり、ローカルストアをそれぞれのコアが持っているという Cell の特異な環境は、分散プログラミングの環境と酷似している。それらを踏まえて、 Cerium のタスク管理手法を分散に応用できないかと考えた。 Cerium においても、タスクとそれの入出力データの取り扱いは難しい課題である。データを操作する API を考えて、タスクを自然に記述し、効率よく実行する方法を考えてきた。 diff -r 2f67ebce9b2f -r 0548eea96c28 paper/chapter3.tex --- a/paper/chapter3.tex Fri Feb 10 06:59:21 2012 +0900 +++ b/paper/chapter3.tex Fri Feb 10 08:22:04 2012 +0900 @@ -500,7 +500,7 @@ \end{figure} \subsection{Topology Manager の設定ファイル} -まず、 Topology Manager は、トポロジーファイルを読み込む。トポロジーファイルは、 DOT Language という言語で記述される。 +まず、 Topology Manager は、トポロジーファイルを読み込む。トポロジーファイルは、 DOT Language (\url{http://www.graphviz.org/}) という言語で記述される。 DOT Language とは、プレーンテキストを用いて、データ構造としてのグラフを表現するための、データ記述言語の一種である。 この DOT Language のグラフ構造を利用して、 Topology Node 間の接続を表現する。(ソースコード \ref{src:dotlang1}) diff -r 2f67ebce9b2f -r 0548eea96c28 paper/introduciton.tex --- a/paper/introduciton.tex Fri Feb 10 06:59:21 2012 +0900 +++ b/paper/introduciton.tex Fri Feb 10 08:22:04 2012 +0900 @@ -2,21 +2,26 @@ \pagenumbering{arabic} \section{研究背景と目的} -多数の計算機をインターネットなどの比較的遠いネットワークにより接続し実現される分散システムは、接続されたそれぞれの - ブロード環境やモバイル端末の普及により、ネットワーク上におけるサービスに参加するユーザー数の巨大化は必至である。 しかし、フレームワークやデバッグ等を含めてスケーラビリティーに優れた分散プログラムを記述する事は極めて難しい。 -ここでいうスケーラビリティーとは、サービスの大きさが増えても、リソースの追加のみでサービスの質を維持できることを示す性能基準のことである。 +ここでいうスケーラビリティーとは、サービスの大きさが増えても、リソースの追加のみでサービスの質を直線的に維持できることを示す性能基準のことである。 そのスケーラビリティーを備えた分散プログラムを作成するためには、いろいろなプロトコルを提案し、実装し、検証していく必要がある。 +分散プログラムの開発は単純に離れたホスト間で通信して動作するだけならば、プログラム自体は難しくない。ただ、逐次プログラムに通信処理を導入すればよいだけである。分散プログラム開発において困難とされるのは、ネットワークの動的な変化、故障、性能の多様性を吸収し、その上でスケーラビリティーを確保することである。 + +スケーラビリティ等を確保したまま、分散プログラムを正しく記述することやデバッグを行うために、これまで数多くの分散プログラミングモデルが開発されてきたが、それらは逐次プログラムのプログラミングモデルの延長であったり、アプリケーション開発者が複雑で理解しにくい記述を熟知しなければならなかった。それらは真の分散プログラミングモデルとは言えない。 + そこで本研究室では、シンプルにスケーラブルな分散プログラムを書くことができるフレームワークとして、 "分散ネットワークアプリケーションフレームワーク Alice" を提案し、実装した。 - -Alice は本研究の先行研究である Federated Linda の開発を通して得られた知見が大いに生かされている。また、それと同時に本研究室で開発している並列タスク管理フレームワーク Cerium の新設計から得られたアイディアも生きている。 - -Alice は Data Segment と Code Segment という単位でデータと処理を細かく分割し、それぞれの依存関係をシンプルに記述して分散プログラムを作成することができる。また、他のマシンとの接続トポロジーの構築等の機能も盛り込まれており、ユーザーはトポロジー構築後の処理を記述することに集中できる。 - -最後に、先行研究である Federated Linda との性能比較を行う。 +本研究の目標は、スケーラブルな分散プログラムを自然に記述できる道標をフレームワークという形で分散プログラマーに提供することである。 \section{論文の構成} -論文の構成 +第2章では、先行研究である Federated Linda の開発を通して得られた知見について説明する。分散プログラムに重要な事は何であるのかについてまとめ、新しいフレームワークの設計に活かす。 + +第3章では、前章で得られた知見と、同じく本研究室で開発している並列タスク管理フレームワーク Cerium の新設計から得られたアイディアを生かした、新しいフレームワークの設計の概観を示す。 +第4章では、前章で示した概観を、 Java の便利なライブラリの紹介と、具体的に Java でどのように実装したかについてまとめている。 + +第5章では、新設計のフレームワークである Alice の実験方法を交えながら、 Federated Linda の性能比較、考察を行う。 + +第6章においては、まとめと今後の課題となっている。 + diff -r 2f67ebce9b2f -r 0548eea96c28 paper/master_paper.bib --- a/paper/master_paper.bib Fri Feb 10 06:59:21 2012 +0900 +++ b/paper/master_paper.bib Fri Feb 10 08:22:04 2012 +0900 @@ -38,6 +38,14 @@ year = 2007 } +@article{akamine:2010a, + author = "赤嶺 一樹 and 河野 真治", + title = "Meta Engine を用いた Federated Linda の実験", + journal = "日本ソフトウェア科学会第 27 会大会", + month = "Sep", + year = 2010 +} + @article{SuciSnap, author = "上里 献一 and 河野 真治", title = "SuciライブラリのスナップショットAPIを利用した並列デバッグツールの設計", @@ -46,14 +54,6 @@ year = 2003 } -@article{akamine:2010a, - author = "赤嶺 一樹 and 河野 真治", - title = "Meta Engine を用いた Federated Linda の実験", - journal = "日本ソフトウェア科学会第 27 会大会(2010 年度)", - month = "Sep", - year = 2010 -} - @article{yutaka:2010a, author = "金城 裕 and 河野 真治", title = "Fine Grain Task Manager Cerium のチューニング", diff -r 2f67ebce9b2f -r 0548eea96c28 paper/master_paper.tex --- a/paper/master_paper.tex Fri Feb 10 06:59:21 2012 +0900 +++ b/paper/master_paper.tex Fri Feb 10 08:22:04 2012 +0900 @@ -4,6 +4,7 @@ \usepackage[dvipdfm]{graphicx} \usepackage{comment} \usepackage{listings,jlisting} +\usepackage{url} \input{dummy.tex} %% font \jtitle{分散ネットワークフレームワーク Alice の提案と実装}