annotate paper/main.tex @ 10:90aaf305aed6 default tip

add presen
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Thu, 18 Feb 2016 09:06:13 +0900
parents ef17e4dc6216
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[a4j,12pt]{jreport}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
2 \usepackage[dvipdfmx,hiresbb]{graphicx}
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \usepackage{mythesis}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage{multirow}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
5 \usepackage{listings}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
6 \usepackage{url}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
7 \lstset{%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
8 language={Java},%使用言語
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
9 basicstyle={\small},%書体
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
10 commentstyle={\small\itshape},%コメントの書体
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
11 keywordstyle={\small\bfseries},%キーワードの書体
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
12 %identifierstyle={\small},%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
13 %ndkeywordstyle={\small},%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
14 stringstyle={\small},%文字列の書体
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
15 frame={trlb},%外枠
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
16 breaklines=true,%改行
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
17 columns=[l]{fullflexible},%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
18 xrightmargin=0zw,%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
19 xleftmargin=3zw,%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
20 numbers=left,%行番号の表示
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
21 numberstyle={\scriptsize},%行番号の書体
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
22 numbersep=1zw,%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
23 stepnumber=1,
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
24 lineskip=-0.5ex,%
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
25 captionpos=b,%キャプションの位置
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
26 }
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
27 \renewcommand{\lstlistingname}{Code}
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 \usepackage{here}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \setlength{\itemsep}{-1zh}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
30 \title{分散フレームワークAliceのMeta Data Segment}
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 \icon{
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
32 \includegraphics[width=50mm,bb=0 0 595 842]{fig/ryukyu.pdf}
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
34 \year{平成27年度 卒業論文}
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \belongto{琉球大学工学部情報工学科}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
36 \author{e125769 照屋 のぞみ \\ 指導教員 {河野 真治} }
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 %%
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 %% プリアンブルに記述
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 %% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 %%
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 \makeatletter
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 \newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 \newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 \makeatother
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 \setlength\abovecaptionskip{0pt}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \begin{document}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 % タイトル
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \maketitle
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \baselineskip 17pt plus 1pt minus 1pt
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 \setcounter{page}{0}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 \tableofcontents % 目次
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
56 %\listoffigures % 図目次
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
57 %\listoftables % 表目次
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 %以下のように、章ごとに個別の tex ファイルを作成して、
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 % main.tex をコンパイルして確認する。
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 %章分けは個人で違うので下のフォーマットを参考にして下さい。
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 % はじめに
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
64 \chapter{Meta Computation による分散プ ログラミングの信頼性向上}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
65 \pagenumbering{arabic}
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
66 スマートフォンやタブレット端末の普及率が増加している。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
67 それに伴いインターネット利用者数も増加しており、ネットワーク上のサービスには、信頼性とスケーラビリティーが要求される。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
68 ここでいう信頼性とは、定められた環境下で安定して仕様に従った動作を行うことをさす。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
69 またスケーラビリティーとは、サービスの利用者が増大した場合、メモリ等のリソースを追加するだけでサービスを維持できる性能をさす。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
70 しかし、これらをもつ分散プログラムをユーザーが一から記述することは容易ではない。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
71
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
72 これらの問題の解決のために、データをData Segment、タスクをCode Segmentという単位で記述するプログラミング手法を導入した分散フレームワークAlice\cite{senkokenkyu}\cite{senkokenkyu2} の開発を実現した。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
73 Data Segmentは整数や文字列や構造体などの基本的なデータの集まりである。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
74 Code Segmentは入力となるData Segmentが全て揃ったら処理を開始し計算結果のData Segmentを出力するタスクである。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
75
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
76 さらにAliceでは、計算の本質的な処理をComputation、Computationとは直接関係ないが別のレベルでそれを支える処理をMeta Computationとして分けて考える。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
77 分散アプリケーションにおいて、分散環境の構築や通信処理部分はMeta Computationと言える。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
78 それらの処理をAliceがMeta Computationとして提供することで、プログラマは目的の処理の記述だけで分散処理が実現できる。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
79 また、Meta Computationを指定するだけでComputationを大きく変更せずにプログラムの細かな挙動が変えられるため、変更前の信頼性を破壊せずに拡張ができる。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
80
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
81 本研究では、Alice上に実用的な分散アプリケーションの例題である画面共有システムTreeVNC \cite{treeVNC} を構築した。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
82 構築するにあたって、配信される画面データはAliceのData Segementに対応するため、AliceのMeta Data Segmentとして圧縮機能が必要となった。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
83 これらの機能はTreeVNCではad-hocに実装されているが、AliceではこれをMeta Computationとして実装した。
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
84 そして、性能・コード量の観点からTreeVNCとの比較を行い、Aliceの実用性を示すと共にAliceのMeta Computationの役割と有効性の評価を行った。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
85
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 % 基礎概念
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
88 \chapter{分散フレームワークAliceの概要}
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
89 \section{Code Segment と Data Segment}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
90 AliceではCode Segment(以下CS)とData Segment(以下DS)の依存関係を記述することでプログラミングを行う。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
91
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
92 CSは実行に必要なDSが全て揃うと実行される。CSを実行するために必要な入力されるDSのことをInputDS、CSが計算を行った後に出力されるDSのことをOutput DSと呼ぶ。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
93
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
94 データの依存関係にないCSは並列実行が可能である(図 \ref{fig:CS} )。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
95 CSの実行においてDSが他のCSから変更を受けることはない。そのためAliceではデータが他から変更され整合性がとれなくなることはない。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
96
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
97 \begin{figure}[htbp]
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
98 \begin{center}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
99 \includegraphics{images/dsandcs2.pdf}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
100 \end{center}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
101 \caption{CodeSegmentの依存関係 }
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
102 \label{fig:CS}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
103 \end{figure}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
104
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
105 AliceはJavaで実装されており、DSはJava Objectに相当する。CSはRunnableなObject(void run()を持つObject)に相当する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
106 プログラマがCSを記述する際は、CodeSegmentクラスを継承する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
107
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
108 DSは数値や文字列などの基本的なデータの集まりを指し、Aliceが内部にもつデータベースによって管理されている。このデータベースをAliceではDS Managerと呼ぶ。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
109
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
110 CSは複数のDS Managerを持っている。DSには対になるString型のkeyが存在し、それぞれのManagerにkeyを指定してDSにアクセスする。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
111 一つのkeyに対して複数のDSをputするとFIFO的に処理される。なのでData Segment Managerは通常のデータベースとは異なる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
112
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
113
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
114 \section{Data Segment Manager}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
115 DS Manager(以下DSM)にはLocal DSMとRemote DSMが存在する。Local DSMは各ノード固有のデータベースである。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
116
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
117 Remote DSMは他ノードのLocal DSMに対応するproxyであり、接続しているノードの数だけ存在する(図 \ref{fig:Remote DSM} )。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
118 他ノードのLocal DSMに書き込みたい場合はRemote DSMに対して書き込めば良い。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
119
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
120 Remote DSMを立ち上げるには、DataSegmentクラスが提供するconnectメソッドを用いる。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
121 接続したいノードのipアドレスとport番号、そして任意のManager名を指定することで立ちあげられる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
122 その後はManager名を指定してData Segment APIを用いてDSのやり取りを行うため、プログラマはManager名さえ意識すればLocalへの操作もRemoteへの操作も同じ様に扱える。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
123
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
124 \begin{figure}[h]
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
125 \begin{center}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
126 \includegraphics[width=150mm]{images/remote_datasegment.pdf}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
127 \end{center}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
128 \caption{Remote DSMは他のノードのLocal DSMのproxy }
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
129 \label{fig:Remote DSM}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
130 \end{figure}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
131
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
132 \newpage
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
133
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
134 \section{Data Segment API}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
135 DSの保存・取得にはAliceが提供するAPIを用いる。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
136
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
137 putとupdate、flipはOutput DS APIと呼ばれ、DSをDSMに保存する際に用いる。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
138
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
139 peekとtakeはInput DS APIと呼ばれ、DSをDSMから取得する際に使用する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
140
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
141 \begin{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
142 \item {\ttfamily void put(String managerKey, String key, Object val)}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
143 \end{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
144 DSをDSMに追加するためのAPIである。第一引数はLocal DSMかRemote DSMかといったManager名を指定する。そして第二引数で指定されたkeyに対応するDSとして第三引数の値を追加する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
145
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
146 \begin{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
147 \item {\ttfamily void update(String managerKey, String key, Object val)}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
148 \end{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
149 updateもDSをDSMに追加するためのAPIである。putとの違いは、queueの先頭のDSを削除してからDSを追加することである。そのためAPI実行前後でqueueの中にあるDSの個数は変わらない。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
150
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
151 \begin{itemize}
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
152 \item{\ttfamily void flip(String managerKey, String key, Receiver val)}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
153 \end{itemize}
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
154 flipはDSの転送用のAPIである。取得したDSに対して何もせずに別のKeyに対し保存を行いたい場合、一旦値を取り出すのは無駄である。flipはDSを受け取った形式のまま転送するため無駄なコピーなくDSの保存ができる。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
155
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
156 \begin{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
157 \item {\ttfamily void take(String managerKey, String key)}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
158 \end{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
159 takeはDSを読み込むためのAPIである。読み込まれたDSは削除される。要求したDSが存在しなければ、CSの待ち合わせ (Blocking)が起こる。putやupdateによりDSに更新があった場合、takeが直ちに実行される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
160
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
161 \begin{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
162 \item {\ttfamily void peek(String managerKey, String key)}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
163 \end{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
164 peekもDSを読み込むAPIである。takeとの違いは読み込まれたDSが削除されないことである。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
165
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
166 \newpage
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
167
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
168 \section{Code Segmentの記述方法}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
169 CSをユーザーが記述する際にはCodeSegmentクラスを継承して記述する(ソースコード \ref{src:StartCodeSegment} , \ref{src:CodeSegment})。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
170
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
171 継承することによりCode Segmentで使用するData Segment APIを利用する事ができる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
172
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
173 Alice には、Start CS (ソースコード \ref{src:StartCodeSegment} )というC の main に相当するような最初に実行される CS がある。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
174 Start CSはどのDSにも依存しない。つまりInput DSを持たない。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
175 このCSをmainメソッド内でnewし、executeメソッドを呼ぶことで実行を開始させることができる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
176
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
177 \begin{table}[html]
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
178 \lstinputlisting[label=src:StartCodeSegment, caption=StartCodeSegmentの例]{source/StartCodeSegment.java}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
179 \lstinputlisting[label=src:CodeSegment, caption=CodeSegmentの例]{source/TestCodeSegment.java}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
180 \end{table}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
181
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
182 \newpage
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
183
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
184 ソースコード \ref{src:StartCodeSegment} は、5行目で次に実行させたいCS(ソースコード \ref{src:CodeSegment} )を作成している。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
185 8行目でOutput DS APIを通してLocal DSMに対してDSをputしている。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
186 Output DS APIはCSの{\tt ods}というフィールドを用いてアクセスする。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
187 {\tt ods}は{\tt put}と{\tt update}と{\tt flip}を実行することができる。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
188 TestCodeSegmentはこの"cnt"というkeyに対して依存関係があり、8行目でputが行われるとTestCodeSegmentは実行される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
189
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
190
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
191 CSのInput DSは、CSの作成時に指定する必要がある。指定はCommandType(PEEKかTAKE)、DSM名、そしてkey よって行われる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
192 Input DS API はCSの{\tt ids}というフィールドを用いてアクセスする。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
193 Output DSは、{\tt ods}が提供するput/update/flipメソッドをそのまま呼べばよかったが、Input DSの場合{\tt ids}にpeek/takeメソッドはなく、create/setKeyメソッド内でCommandTypeを指定して実行する。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
194
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
195 ソースコード\ref{src:CodeSegment}は、0から9までインクリメントする例題である。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
196 2行目では、Input DS APIがもつcreateメソッドでInput DSを格納する受け皿(Receiver)を作っている。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
197 引数には{\tt PEEK}または{\tt TAKE}を指定する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
198 \begin{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
199 \item {\ttfamily Receiver create(CommandType type)}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
200 \end{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
201
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
202 4行目から6行目はコンストラクタである。コンストラクタはオブジェクト指向のプログラミング言語で新たなオブジェクトを生成する際に呼び出されて内容の初期化を行う関数である。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
203
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
204 % TestCodeSegmentのコンストラクタが呼ばれた際には、
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
205 % \begin{enumerate}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
206 % \item CSが持つフィールド変数 {\tt Receiver input}に{\tt ids.create(CommandType.TAKE)}が行われ、{\tt input}が初期化される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
207 % \item 5行目にあるTestCodeSegmentのコンストラクタのTAKEが実行される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
208 % \end{enumerate}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
209
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
210 5行目は、2行目のcreateで作られたReceiverが提供するsetKeyメソッドを用いてLocal DSMからDSを取得している。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
211 \begin{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
212 \item \verb+void setKey(String managerKey, String key)+
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
213 \end{itemize}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
214 setKeyメソッドはpeek/takeの実行を行う。どのDSMのどのkeyに対してpeekまたはtakeコマンドを実行させるかを指定できる。コマンドの結果がレスポンスとして届き次第CSは実行される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
215
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
216 実行されるrunメソッドの内容は
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
217 \begin{enumerate}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
218 \item 10行目で取得されたDSをInteger型に変換してcountに代入する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
219 \item 12行目でcountをインクリメントする。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
220 \item 16行目で次に実行されるCSが作られる。(この時点で次のCSはInput DSの待ち状態に入る)
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
221 \item 17行目でcountをLocal DSMにputする。Input DSが揃い待ち状態が解決されたため、次のCSが実行される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
222 \item 13行目が終了条件であり、countの値が10になれば終了する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
223 \end{enumerate}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
224 となっている。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
225
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
226
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
227 \chapter{AliceのMeta Computation}
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
228 \section{Computetion と Meta Computation}
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
229 Aliceでは、処理をComputationとMeta Computationに階層化し、コアな仕様と複雑な例外処理に分離する。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
230 AliceのComputationは、keyによりDSを待ち合わせ、DSが揃ったCSを並列に実行する処理と捉えられる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
231 それに対して、AliceのMeta Computation は、Remoteノードとの通信時のトポロジーの構成や切断・再接続の処理と言える。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
232 つまりトポロジーの構成はAliceのComputationを支えているComputationとみなすことができる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
233
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
234 Aliceの機能を追加するということはプログラマ側が使うMeta Computationを追加すると言い換えられる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
235 AliceではMeta Computationとして分散環境の構築等の機能を提供するため、プログラマはCSを記述する際にトポロジー構成や切断、再接続という状況を予め想定した処理にする必要はない。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
236 プログラマは目的の処理だけ記述し、切断や再接続が起こった場合の処理をMeta Computationとして指定する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
237 このようにプログラムすることで、通常処理と例外処理を分離することができるため、仕様の変更を抑えたシンプルなプログラムを記述できる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
238
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
239 現在Aliceには、トポロジーの構成・管理機能、ノードの生存確認機能、ノードの切断・再接続時の処理管理機能などのMeta Computationが用意されている。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
240
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
241 \newpage
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
242
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
243 \section{Meta Code Segment と Meta Data Segment}
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
244 Alice提供するMeta ComputationもCS/DSにより実現される。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
245 CSの処理を支える処理をMeta CS、Meta CSに管理されるMeta DSとして考える。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
246
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
247 図\ref{fig:metaCS}は、AliceのMeta CS/Meta DSの接続関係の例である。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
248 プログラマ側はCSとDSの依存関係を記述するが、その裏ではMeta CSやMeta DSが間に接続されて処理を行っている。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
249
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
250 \begin{figure}[h]
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
251 \begin{center}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
252 \includegraphics[width=120mm]{images/MetaCSDS.pdf}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
253 \end{center}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
254 \caption{CS/DSの間にMetaCS/MetaDSが接続される}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
255 \label{fig:metaCS}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
256 \end{figure}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
257
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
258 Meta DSは基本的にAliceを構成するCSによってのみ管理され、プログラマは認識できない。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
259 しかし一部のMeta DSはプログラマがアプリケーションに利用することもできる。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
260 例えば、トポロジー管理のMeta Computationなどで使われる"\_CLIST"というMeta DSには、利用可能なRemote DSMの情報が管理されている。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
261 プログラマはこのMeta DSを取得しRemote DSM名を指定することで、動的にDSの伝搬などを行うことができる。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
262
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
263
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
264 \newpage
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
265
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
266 \section{Topology Manager}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
267 Aliceでは、ノード間の接続管理やトポロジーの構成管理を、Topology ManagerというMeta Computationが提供している。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
268 プログラマはトポロジーファイルを用意し、Topology Managerに読み込ませるだけでトポロジーを構成することができる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
269 トポロジーファイルはDOT Language\cite{dot}という言語で記述される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
270 DOT Languageとは、プレーンテキストを用いてデータ構造としてのグラフを表現するためのデータ記述言語の一つである。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
271 ソースコード\ref{src:topologyfile}は3台のノードでリングトポロジーを組むときのトポロジーファイルの例である。
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
272
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
273 \begin{table}[html]
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
274 \lstinputlisting[label=src:topologyfile, caption=トポロジーファイルの例]{source/TopologyFile.dot}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
275 \end{table}
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
276 DOT Languageファイルはdotコマンドを用いてグラフの画像ファイルを生成することができる。そのため、記述したトポロジーが正しいか可視化することが可能である。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
277
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
278 \newpage
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
279
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
280 Topology Managerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきクライアントのIPアドレスやポート番号、接続名を送る(図\ref{fig:topologymanager})。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
281 また、トポロジーファイルでlavelとして指定した名前はRemote DSMの名前としてTopology Nodeに渡される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
282 そのため、Topology NodeはTopology ManagerのIPアドレスさえ知っていれば自分の接続すべきノードのデータを受け取り、ノード間での正しい接続を実現できる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
283 \begin{figure}[h]
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
284 \begin{center}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
285 \includegraphics{images/topologymanager.pdf}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
286 \end{center}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
287 \caption{Topology Managerが記述に従いトポロジーを構成}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
288 \label{fig:topologymanager}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
289 \end{figure}
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
290
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
291 また、実際の分散アプリケーションでは参加するノードの数が予め決まっているとは限らない。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
292 そのためTopology Managerは動的トポロジーにも対応している。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
293 トポロジーの種類を選択してTopology Managerを立ち上げれば、あとは新しいTopology Nodeが参加表明するたびに、Topology ManagerからTopology Nodeに対して接続すべきTopology Nodeの情報がput
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
294 され接続処理が順次行われる。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
295 そしてTopology Managerが持つトポロジー情報が更新される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
296 現在Topology Managerでは動的なトポロジータイプとして二分木に対応している。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
297
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
298 \newpage
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
299
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
300 \section{Keep Alice}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
301 ノード間通信はRemote DSMに対してputやtakeを行うことでのみ発生する。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
302 アプリケーション次第では長時間通信が行われない可能性があり、その間にノード間接続が切れた場合、次の通信が行われるまで切断を発見することができない。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
303 また、接続状態ではあるが応答に時間がかかる場合もある。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
304
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
305 これらの問題を検知するために、KeepAliveという定期的にheart beatを送信し生存確認を行うMeta Computationがある。この機能もCS/DSを用いて実装されている。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
306 一定時間内にノードからの応答がない場合、KeepAliveにより、そのノードのRemote DSMが切断される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
307
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
308 また、トポロジーからノードが切断された際にトポロジーを再構成する機能もTopology Managerに用意した。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
309 例えばツリートポロジーでノードが切断された場合、そのノードの子ノードは全体のトポロジーから分断されてしまう。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
310 ノードは切断を検知するとただちにTopology Managerに再接続すべきノード情報を要求し、木を構成し直す。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
311
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
312
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
313 \section{切断・再接続時の処理}
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
314 MMORPGでは、試合の最中にサーバーからユーザーが切断された場合、自動的にユーザーが操作するキャラクターをゲームの開始時の位置に戻すという処理が実行される。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
315 同様に、Aliceを用いたアプリケーションでもノードの切断時に対する処理を用意したい場合がある。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
316 そこで、Aliceが切断を検知した際に任意のCSを実行できる機能(ClosedEventManager)を追加した。
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
317 プログラマは切断の際に実行したいCSを書き、ClosedEventManagerに登録しておけば良い。
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
318 また、再接続してきたノードに対し通常の処理とは別の処理を行わせたい場合がある。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
319 そのため、切断時と同様に再接続してきたノードに任意のCSを実行できるMeta Computationも用意した。
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
320
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
321
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
322 % AliceVNC
3
a97aa059242f add images & sources
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
323 \chapter{AliceのTreeVNCへの応用}
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
324 AliceのMeta Computationが実用的なアプリケーションの記述において有用であることを確認する。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
325 そのために、TreeVNCをAliceを用いて実装したAliceVNCの作成を行った\cite{sigOS}。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
326
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
327 \section{TreeVNC}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
328 TreeVNCとは、当研究室で開発を行っている授業向け画面共有システムである。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
329 オープンソースのVNCであるTightVNC \cite{tightVNC} をもとに作られている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
330 授業でVNCを使う場合、1つのコンピュータに多人数が同時につながるため、性能が大幅に落ちてしまう(図 \ref{fig:vncstructure})。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
331 この問題をノード同士を接続させ、木構造を構成することで負荷分散を行い解決したものがTreeVNCである(図 \ref{fig:treestructure})。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
332 \begin{figure}[htbp]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
333 \begin{tabular}{cc}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
334 \begin{minipage}{0.5\hsize}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
335 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
336 \includegraphics[width=80mm]{images/vnc.pdf}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
337 \caption{通常のVNCの構造}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
338 \label{fig:vncstructure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
339 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
340 \end{minipage}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
341 \begin{minipage}{0.5\hsize}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
342 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
343 \includegraphics[width=80mm]{images/treestructure.pdf}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
344 \caption{TreeVNCの構造}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
345 \label{fig:treestructure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
346 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
347 \end{minipage}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
348 \end{tabular}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
349 \end{figure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
350
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
351 \newpage
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
352
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
353 \section{AliceVNC}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
354 図 \ref{fig:TreeVNC}はAliceVNCを実現するための構成である。leftとrightのRemote DSMを用意し子ノードと接続することで木構造を実現する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
355
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
356 \begin{figure}[h]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
357 \begin{center}
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
358 \includegraphics[width=120mm]{images/AliceVNCstracture.pdf}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
359 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
360 \caption{AliceVNC の構造}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
361 \label{fig:TreeVNC}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
362 \end{figure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
363
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
364 TreeVNCは通信処理部分や画面データの処理部分が1つのコード内で記述され、大変複雑になっている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
365 しかし、Aliceで記述すればMeta Computationにより本質的な処理とそれを支える通信処理部分で分離できる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
366 TreeVNCでは3章で述べた動的なトポロジーの構成、切断ノードの発見、再接続・トポロジーの再構成といった通信処理のMeta Computationが活用できる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
367 そのため、TightVNCからの修正の少ない、見通しの良い記述で構成可能と期待される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
368
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
369 \newpage
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
370
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
371 \chapter{圧縮のMeta Computationの追加}
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
372 \section{圧縮のMeta Data Segment}
8
ef17e4dc6216 after check
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
373 TreeVNCは画面変更の差分を木構造にそって配信する際、差分は数MByteに達するため圧縮を行っている。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
374 そのため、AliceVNCにも圧縮されたデータ形式を扱える機能が必要だと考えた。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
375 しかし、ただデータを圧縮する機構を追加すればいいわけではない。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
376
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
377 AliceVNCでは、ノードは受け取った画面データを描画すると同時に、子ノードのRemote DSMに送信する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
378 ノードはDSを受信するとそれを一度解凍して画面を表示し、再圧縮して子ノードに送信する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
379 しかし、受け取ったデータを自分の子ノードに対して送信する際には、解凍する必要はない。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
380 圧縮状態のまま子ノードに送信ができれば、解凍・再圧縮するオーバーヘッドを無くすことができる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
381
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
382 そこで、DSを複数作るのではなく1つのDS内で複数の表現を持たせ、必要に応じた形式でDSを扱うことを可能にした。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
383 Meta DSに相当するReceiveData.classに、次の3種類の表現を同時に持つことができるようにしたことで、データの多態性を実現した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
384
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
385 \begin{enumerate}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
386 \item 一般的なJavaのクラスオブジェクト
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
387 \item MessagePack for Java\cite{MessagePack}でシリアライズ化されたバイナリオブジェクト
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
388 \item 2を圧縮したバイナリオブジェクト
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
389 \end{enumerate}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
390
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
391 Local DSMにputされた場合は、(1)の一般的なJavaクラスオブジェクトとして追加される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
392 Remote DSMにputされた場合は、通信時に(2)のbyteArrayに変換されたバイナリオブジェクトに変換されたDSが追加される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
393 この2つの形式は従来のAliceが持っていた表現である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
394 今回、Remote DSMに圧縮形式での通信を行いたいため、(3)の圧縮表現を追加した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
395
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
396 \newpage
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
397
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
398 ソースコード \ref{src:ReceiveData1} は変更前のReceiveData.classである。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
399 変更前はDSの表現は1つでフラグによって、Local DSM にputする(1)の形式とRemote DSMにputする(2)の形式を判別していた。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
400 しかしこの実装では圧縮形式と非圧縮形式を同時に持つことができないため、AliceVNCでは解凍・再圧縮が必要になってしまう。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
401
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
402 変更後の実装ではソースコード \ref{src:ReceiveData1} のようになっている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
403 {\tt val}に(1) 一般的なJavaのクラスオブジェクト の表現でデータ本体が保存される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
404 {\tt messagePack}には(2) シリアライズ化されたバイナリオブジェクトが保存される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
405 そして、{\tt zMessagePack}には(3) 圧縮されたバイナリオブジェクトが保存される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
406 このようにDSが複数の表現を同時に保持することで、DSが圧縮表現を持っている場合に再圧縮する必要がなくなる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
407 プログラマ側がから見れば1つのDSであり直接これら3つの表現を操作することはないため、これらはAliceのMeta Data Segmentと言える。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
408
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
409 \begin{table}[html]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
410 \lstinputlisting[label=src:ReceiveData1, caption=変更前のデータ表現]{source/beforeReceiveData.java}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
411 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
412
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
413 \begin{table}[html]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
414 \lstinputlisting[label=src:ReceiveData2, caption=変更後のデータ表現]{source/ReceiveData.java}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
415 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
416
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
417
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
418 \newpage
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
419
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
420 \section{圧縮のMeta Code Segment}
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
421 圧縮表現を持つDSを扱うDSMとしてLocalとRemoteそれぞれにCompressed Data Segment Managerを追加した。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
422 Compressed DSMの内部では、put/updateが呼ばれた際にReceiveData.classが圧縮表現を持っていればそれを使用し、持っていなければその時点で圧縮表現を作ってput/updateを行う。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
423 Local Compressed DSM は表現の判別や変換を行うだけで、操作する対象は Local DSM と同じDSを指すため、DSの管理が別々になるわけではない。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
424
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
425
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
426 ソースコード \ref{src:before} はRemote DSMに対しInt型のデータをputする記述である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
427 この通信を圧縮形式のDSで行いたい場合、ソースコード \ref{src:after} のように指定するDSM名の先頭に"compressed"をつければCompressed DSM内部の圧縮Meta Computationが走り圧縮形式に変換さ
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
428 れたDSとなって通信が行われる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
429
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
430 \begin{table}[html]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
431 \lstinputlisting[label=src:before, caption=通常のDSを扱うCSの例]{source/beforeCompress.java}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
432 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
433
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
434 \begin{table}[html]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
435 \lstinputlisting[label=src:after,caption=圧縮したDSを扱うCSの例]{source/afterCompress.java}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
436 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
437
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
438 この機能は先述のMeta Data Segmentを扱うMeta Code Segmentと言える。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
439 これによりユーザは指定するDSMを変えるだけで、他の計算部分を変えずに圧縮表現をDS内で持つことができる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
440 ノードは圧縮されたDSを受け取った後、そのまま子ノードにflipメソッドで転送すれば圧縮状態のまま送信されるので、送信の際の再圧縮がなくなる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
441
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
442
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
443 画面表示の際はReceiveData.class内のasClassメソッドを使うことで適切な形式でデータを取得できる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
444 asClassメソッドはDSを目的の型にcastするためのメソッドである。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
445 AliceVNCで圧縮形式を指定してDSを送信すると、それを受け取るDSMは圧縮形式のみを持ったDSとして保存する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
446 そしてasClassメソッドが呼ばれて初めて、メソッド内で解凍してcastが行われDSが複数の表現を同時に持つようになる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
447 これによりDSの表現を必要になったときに作成できるため、プログラマはどんな形式でDSを受け取ってもDSを編集可能な形式として扱うことができる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
448 また、複数表現は必要なときにしか作成されないため、メモリ使用量も必要最低限に抑えることができる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
449
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
450 \newpage
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
451
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
452 \section{Aliceの通信プロトコルの変更}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
453 4.2で述べたように、Remoteからputされたデータは必ずシリアライズ化されておりbyteArrayで表現される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
454 しかし、データの表現に圧縮したbyteArrayを追加したため、RemoteからputされたbyteArrayが圧縮されているのかそうでないのかを判別がつかなくなった。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
455
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
456 そこで、Aliceの通信におけるヘッダにあたるCommandMessage.class(ソースコード\ref {src:CommandMessage} 表 \ref{tb:variable})に圧縮状態を表すフラグを追加した。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
457 これによってputされたDSMはフラグに応じた適切な形式でReceiveData.class内にDSを格納できる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
458 また、CommandMessage.classに圧縮前のデータサイズも追加したことで、適切な解凍が可能になった。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
459
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
460 \begin{table}[html]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
461 \lstinputlisting[label=src:CommandMessage, caption=CommandMessage]{source/CommandMessage.java}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
462 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
463
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
464
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
465 \begin{table}[htbp]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
466 \caption{CommandMessageの変数名の説明}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
467 \label{tb:variable}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
468 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
469 \begin{tabular} {|l|l|}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
470 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
471 変数名&説明\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
472 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
473 type&CommandType {\tt PEEK, PUT}などを表す\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
474 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
475 seq&\shortstack{Data Segmentの待ち合わせを行っている\\Code Segmentを表すunique number }\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
476 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
477 key&どのKeyに対して操作を行うか指定する\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
478 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
479
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
480 quickFlag&SEDAを挟まずCommandを処理を行うかを示す\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
481 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
482
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
483 compressed&データ本体の圧縮状態を示す\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
484 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
485
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
486 dataSize&圧縮前のデータサイズを表す\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
487 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
488
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
489 \end{tabular}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
490 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
491 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
492
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
493 \newpage
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
494
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
495 \chapter{DSとMetaDSのKeyの領域分け}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
496 DSとMeta DSは同じData Segment Managerで管理されており、同じAPIを利用してアクセスされる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
497 そのため誰でもMeta DSの変更が可能になってしまっている。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
498 プログラマが定義しようとしたKeyが偶然AliceのMeta DSのKeyと衝突してしまった場合、ユーザーが意図した動作にならずエラーとなる状況は充分にありえる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
499 しかもMeta DSはプログラマ側からは認識できないため衝突の認識やエラーの解決がしづらくなっている。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
500 このような事態を避けるためにも、DSの領域分けが必要である。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
501
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
502 いままではLocalDataSegmentManager.classは1つだけだったが、もう1つ追加してMeta Local DSMとして登録した(ソースコード \ref{src:DSManagers})。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
503 これでmanagerKey="local"ならばLocal DSMに、managerKey="metaLocal"ならばMeta Local DSMに対して操作できる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
504
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
505 \begin{table}[html]
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
506 \lstinputlisting[label=src:DSManagers, caption=LocalDSMの追加]{source/DataSegmentManagers.java}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
507 \end{table}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
508
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
509 \newpage
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
510
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
511 CodeSegment.classを継承したMetaCodeSegment.classを追加した(ソースコード \ref{src:MetaCS})。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
512 MetaCodeSegmentは、idsとodsに対してCSかMeta CSかのフラグをセットする。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
513 これを継承したクラスはDS Managerを指定せずにAPIを呼び出すと自動的にMetaDSMに対して操作したことになる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
514
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
515 \begin{table}[html]
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
516 \lstinputlisting[label=src:MetaCS , caption=MetaCodeSegment.class]{source/MetaCodeSegment.java}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
517 \end{table}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
518
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
519 AliceのMeta CSは今までCS同様CodeSegment.classを継承して作られていたが、
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
520 継承元をMetaCodeSegment.classに変更する(ソースコード \ref{src:extendMeta} 1行目)だけでそれ以外は変更せずにDSの領域分けができる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
521
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
522 \begin{table}[html]
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
523 \lstinputlisting[label=src:extendMeta ,caption=MetaCodeSegmentを継承]{source/BeforTopologyManager.java}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
524 \end{table}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
525
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
526
7
5fa2e97fe3c6 rename abstract to prepaper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
527 managerKey="metaLocal"を指定すれば通常のCSからもMeta DSの操作ができるが、Meta DSにtakeをした場合、そのDSをInputDSとして指定しているMeta CSが想定どおりに動作しないことが考えられる。
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
528 そのため、takeを行っても内部でpeekしか行わないようにした。
7
5fa2e97fe3c6 rename abstract to prepaper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
529 これにより通常のCSがtakeでDSを取得してもDSが削除されることはないため、Meta Computationに干渉することはない。
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
530
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
531
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
532
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
533
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
534 \newpage
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
535
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
536
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 % 実験
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
538 \chapter{評価と考察}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
539 \section{圧縮のMeta Computationの評価}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
540 圧縮のMeta Computationが正しく機能しているかを確認するために通信時間の計測を行った。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
541 2台のPC間でお互いにデータを100回転送し合う。圧縮を指定したコードとしていないコードで5回計測した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
542
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
543 結果が表\ref{tb:compressmesure}である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
544 データサイズから見ても圧縮に成功していることがわかる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
545 通信においても、所要時間が1/3以下に抑えられていることから圧縮が効果的に作用している。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
546 TreeVNCと同等の性能をだすために有用なMeta Computationが実装できたと言える。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
547
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
548 \begin{table}[htbp]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
549 \caption{圧縮機能の測定結果}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
550 \label{tb:compressmesure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
551 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
552 \begin{tabular} {|l|l|l|}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
553 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
554   &圧縮なし&圧縮あり\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
555 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
556 データサイズ&300KB&91KB\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
557 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
558 平均通信時間&6014ms&1764ms\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
559 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
560 \end{tabular}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
561 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
562 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
563
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
564
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
565 \section{TreeVNCとAliceVNCのメッセージ伝達速度の比較}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
566 TreeVNCをAlice上で構築するために必要な機能をAliceのMeta Computationとして実装した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
567 これにより、AliceVNCが簡潔な記述でTreeVNCと同等の性能を出せれば、実用的な分散アプリケーションの実装においてAliceのMeta Computationは有用であるといえる。
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
568 そこで、TreeVNCとAliceVNCの性能評価としてメッセージ伝達速度の比較を、コードの評価としてコード量とその複雑度の比較を行った\cite{prosym}。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
569
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
570
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
571 まず、木の段数ごとにメッセージの到達にどれぐらい時間がかかっているかを計測した。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
572 講義内で学生に協力してもらい、最大17名の接続がある中でTreeVNC、AliceVNCの木の段数1〜3の測定を行った。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
573
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
574  
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
575
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
576 \textbf{実験内容}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
577
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
578 ルートノードから画面データを子ノードに伝搬する際に、計測用のヘッダをつけたパケットを子ノードに送信する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
579 各子ノードはパケットを受け取り自身のViewerに画面データを表示すると同時に、計測用ヘッダ部分のみのDSを作成し、親ノードに送り返す。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
580 計測用DSは木を伝ってルートノードまで送り返され、ルートノードは受け取った計測用DSから到達時間を計算する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
581
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
582 計測用のヘッダは以下の要素で構成されている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
583 \begin{table}[htbp]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
584 \caption{計測用ヘッダの変数名の説明}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
585 \label{tb:mesure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
586 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
587 \begin{tabular} {|l|l|}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
588 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
589 変数名&説明\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
590 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
591 time&ルートノードがパケットを送信した時刻\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
592 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
593 depth&木の段数。初期値=1。\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
594 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
595 dataSize&送信時の形式に変換済みの画面データのサイズ\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
596 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
597 \end{tabular}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
598 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
599 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
600
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
601 timeにはパケットの送信時刻を、dataSizeには圧縮された画面データのサイズを付けて送信する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
602 depthは各ノードに到達するごとにインクリメントされる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
603
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
604 到達時間の計算方法は、計測用DSを受け取った時刻とDSのtime(送信した時刻)の差をとる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
605 この到達時間は画面データがノードまで到達した時間と計測DSをルートまで送り返す時間を含めているが、送り返す時間は誤差として考える。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
606 また、depthは各ノードに到達するごとにインクリメントされるため、送り返す際もインクリメントされる。そのため、木の段数を計算するにはdepthを1/2した値となる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
607
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
608
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
609
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
610 \textbf{実験結果}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
611
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
612
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
613 3段目の測定結果の散布図を示す(図\ref{fig:TreeVNC_delay} 〜 \ref{fig:AliceVNC_compress_delay})。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
614 X軸が画面データのサイズ(byte)、Y軸が計算した到達時間(ms)である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
615 実験時間の都合上、AliceVNCの計測時間が他より短くなってしまったためプロットされた点の数が少なくなっている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
616 また、それぞれの図で処理に10000ms以上かかっている点の集合が見られるが、これは今回の実験において3段目にPCのスペック上処理が遅いノードが1台あったためである。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
617 そのため比較においてこの点集合は無視する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
618
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
619 図から同様の傾向があり、画面データのサイズが小さいうちは処理時間も5ms程度だが、50000byte以上から比例して処理時間も遅くなっている。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
620 このことからAliceはTreeVNCと同等の処理性能を持つアプリケーションを実装するに十分な能力があることがわかる。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
621
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
622
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
623 \begin{figure}[htbp]
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
624 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
625 \includegraphics[width=100mm]{images/TreeVNC_depth3.pdf}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
626 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
627 \caption{TreeVNCの測定結果}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
628 \label{fig:TreeVNC_delay}
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
629
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
630 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
631 \includegraphics[width=100mm]{images/AliceVNC_compress_depth3.pdf}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
632 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
633 \caption{AliceVNC(圧縮・転送機能あり)の測定結果}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
634 \label{fig:AliceVNC_compress_delay}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
635 \end{figure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
636
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
637 \newpage 
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
638
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
639 \section{TreeVNCとAliceVNCのコード量比較}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
640
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
641 TreeVNCとAliceVNCのコード量を比較した表が表\ref{tb:code}である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
642 TightVNCを含むコード全体にwcを行い、行数と単語数を比較した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
643 また、hg diffでTightVNCからの変更行数を調べ変更量を比較した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
644
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
645 表からわかるように、Aliceを用いればコードの行数が25\%削減できる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
646 また、TreeVNCではTightVNCに大幅に修正を加えながら作成したため仕様の変更が多かった。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
647 しかし、AliceVNCではTightVNCにほとんど修正を加えることなくトポロジー構成等のAliceのMeta Computationを使うために新しいクラスを作成したのみであった。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
648 そのためTreeVNCに比べ75\%も仕様の変更が抑えられている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
649 \begin{table}[htbp]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
650 \label{tb:code}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
651 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
652 \begin{tabular} {|l|l|l|l|}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
653 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
654 &行数&単語数&変更行数\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
655 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
656 TreeVNC&19502&73646&7351\\%11369+8133=19502,47010+26636,2094+5257
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
657 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
658 AliceVNC&14647&59217&1129\\%689+7094+6864=14647,23035+34610+1572,689+395+45
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
659 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
660 減少率(\%)&25&20&75\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
661 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
662 \end{tabular}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
663 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
664 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
665
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
666
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
667 \section{TreeVNCとAliceVNCのコードの複雑度比較}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
668 コード量の比較で述べたように、TreeVNCはTightVNCからの変更が多い。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
669 その理由の一つがトポロジーの構成や通信処理がコアな仕様と分離できておらず、
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
670 そのためTreeVNCは大変複雑な記述になってしまっている。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
671
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
672 そこでTreeVNCとAliceVNCにおいてコードの複雑度を比較した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
673 今回、複雑度の指標としてThomas McCabeが提案した循環的複雑度\cite{complaxy}を用いた。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
674 循環的複雑度とはコード内の線形独立な経路の数であり、if文やfor文が多ければ複雑度も高くなりバグ混入率も高まる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
675 一般的に、循環的複雑度が10以下であればバグ混入率の少ない非常に良いコードとされる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
676 計測にはIntelliJのCodeMetrics計測プラグインであるMetricsReloadedを使用した。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
677
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
678 \newpage
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
679
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
680 表\ref{tb:complex}はTightVNC、TreeVNC、AliceVNCにおける循環的複雑度の比較である。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
681
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
682 \begin{table}[htbp]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
683 \caption{複雑度の比較}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
684 \label{tb:complex}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
685 \begin{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
686 \begin{tabular} {|l|l|l|}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
687 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
688 &平均値&最高値\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
689 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
690 TightVNC&13.63&97\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
691 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
692 TreeVNC&15.33&141\\
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
693 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
694 AliceVNC&10.95&99\\%(4.12+13.64)/2 (4.12+9.16+19.59)/3
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
695 \hline
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
696 \end{tabular}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
697 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
698 \end{table}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
699
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
700 プロジェクト全体でのクラスの複雑度の平均値と最高値をとった。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
701 平均値・最高値ともにAliceVNCのほうが複雑度が低いことから、Aliceではシンプルな記述が可能だということがわかる。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
702
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
703 TreeVNCで最高値を出したTreeRFBProto.classは全てプログラマが記述したコードであり、データの待ち合わせのためのタイマー処理や通信処理、画面データの圧縮処理などの複数のスレッド処理が集中した複雑なコードになっている。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
704 これをAliceで記述した場合、データの待ち合わせはCSが行うためプログラマがデータの不整合を気にする必要はなく、また通信処理や圧縮処理もMeta Computationが提供するためコードが複雑になることはない。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
705
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
706 AliceVNCで複雑度の最高値を出したSwingViewerWindow.classはTightVNCで最高値を出したクラスと同じであり、コード量の比較でも示したようにAliceVNCで変更を加えた点がほとんどない。つまりこの複雑度は元来TightVNCが持っている複雑度と言える。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
707
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
708 AliceVNCとTreeVNCの性能比較・コード比較から、AliceVNCはTreeVNCと同等の性能を持つ分散アプリケーションの記述ができ、かつコードの修正量・複雑度共に低く抑える能力を有することがわかった
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
709
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
710
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
711 \newpage
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
712
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
713 \chapter{他言語等との比較}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
714
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
715 \section{MPICH}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
716 メッセージパッシング方式の標準規格であるMPIのC++/FORTRANの実装系がMPICHである。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
717 メッセージパッシングとは、並列分散処理におけるプロセス間通信の一形態で、分散メモリ同士の書き込みをメールのようにメッセージの送受信で行う方式である。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
718
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
719 プロセスごとにランクというidが付与され、プロセスはコミュニケーターという通信単位でグループ化できる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
720 コミュニケーターとランクをそれを指定してメッセージを送受信する。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
721 APIはSender/Receiverメソッドが用意されており、宛先情報、データの種類・サイズ、そしてプログラマがメッセージに対し任意に命名できるタグを指定して送受信を行う。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
722 Sender/ReceiverはAliceのput/takeに対応しており、コミュニケーターはDSM名、タグはKeyに対応している点が類似している。
7
5fa2e97fe3c6 rename abstract to prepaper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
723 しかし、Sender/Receiverは同期型と非同期型の2種類あり、プログラマはそれらを組み合わせて同期を意識しながらプログラミングしなければならない。
5fa2e97fe3c6 rename abstract to prepaper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
724 一方、AliceではDSの待ち合わせ処理をCSが自動で行うためそのような負担が少ない。
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
725
7
5fa2e97fe3c6 rename abstract to prepaper
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
726 また、MPICHはAliceのMeta Computationに対応するものはない。そのため分散環境の構築やデータの圧縮は全てプログラマ側が記述しなければならない。
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
727 一方、Aliceでは分散環境の構築はTopology ManagerなどのMeta Computationが行うためプログラマはトポロジーを指定するだけで良い。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
728
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
729 \section{Erlang}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
730 アクターモデルの並列指向プログラミング言語Erlang\cite{Erlang}は、プロセスと呼ばれるid付きの独立したタスクに対して、idを指定してデータをメッセージでやりとりする。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
731 タスクをプロセスという細かい単位に分割して並列に動かす点や、メモリロックの仕組みを必要としない点はAliceと同様である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
732
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
733 Erlangもプロセス/アクターに直接データをやりとりする。MPICHにはメッセージにタグが付けられたが、Erlangにはデータには名前がない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
734 そのため、メッセージを受け取ったあとにその内容を確認した上で次にどう振る舞うかを判断する記述が必要となる。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
735 一方Aliceでは、DSをCSに直接やりとりはせず、keyを指定してDSMにputする。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
736 また、DSをtakeするときもkeyを指定して取り出すためどんなデータが入っているかを確認する必要がなく、扱い易い。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
737
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
738 そして、Erlangでは静的な複数のデータの待ち合わせのための再帰処理も自分で書かなければならない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
739 一方、Aliceのプログラミング手法はCSが必要なデータが全て揃うまで待ち合わせを行うためその必要はない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
740
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
741 また、MPICH同様ErlangにもMeta Computationに対応する部分がないため、分散環境の構築等はすべてプログラマ自身が記述しなければならない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
742
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
743 \section{Akka}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
744
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
745 Akka\cite{Akka}はScala・Java向けの並列分散処理フレームワークである。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
746 アクターモデルを採用しており、アクターと呼ばれるアドレスを持ったタスクに、データをメッセージでやりとりする点がErlangと似ている。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
747
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
748 Akkaの特徴として、メッセージを送りたいプロセスのアドレスを知っていればアクターがどのマシン上にあるかを意識せずにプログラミングできるという点がある。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
749 逆にAliceはどのRemote DSMに対してやり取りをするかを考慮するが、CSがOutputしたDSを次にどのCSに渡すかを意識する必要がない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
750 この点はアクターモデルとCS/DSモデルのパラダイムの違いと言える。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
751 一方AliceとAkkaは提供されるAPIという点で類似している。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
752
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
753 また、AkkaのメッセージAPIでは、メッセージを送るtellメソッドと、メッセージを送って返信を待つaskメソッドが用意されている。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
754 これはAliceのDataSegment APIのput/takeメソッドに対応している。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
755
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
756 Akkaのもう一つの特徴として、アクターで親子関係を構成できる点がある。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
757 分散通信部分を子アクターに分離し、親アクターは子アクターのExceptionが発生した時に再起動や終了といった処理を指定できる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
758 さらにRouterという子アクターへのメッセージの流れを制御するアクターや、Dispatcherというアクターへのスレッドの割当を管理する機能をAkkaが提供している。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
759 このように処理を階層化し複雑な処理をフレームワーク側が提供する仕組みはAliceのMeta Computationと共通している。
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
760 相違点としては、AliceのMeta DSのようにデータを分離し多態性を実現する機能はAkkaにはない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
761 例えば、データを圧縮して通信した場合は、用意されているcompress/uncompressメソッドを使い圧縮・伸長のコードをプログラマが挟まなければならない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
762 そのためコードを圧縮通信に変更したいときはメッセージの送信側と受信側を両方書き換えが必要になり、どちらか一方を書き忘れるとエラーとなる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
763 一方Aliceでは送信側がDSM名に"compress"をつけるだけで他を変更しなくとも圧縮通信に切り替えられるので、コードの変更量が抑えられ、変更前の信頼性が保存される。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
764
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
765
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 % 今後の課題
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
767 \chapter{まとめ}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
768 並列分散フレームワークAliceでは、スケーラブルかつ信頼性の高いプログラムを記述する環境を実現するため、CS / DSの計算モデルとMeta Computationによる実装の階層化を採用している。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
769 Meta ComputationはMeta CS / Meta DS に分けられ、それらが通常の処理の間に挟まれることでプログラマ側の記述するComputationの変更を抑えた挙動変更を可能にする。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
770
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
771 Aliceが実用的な分散アプリケーションを記述するために必要なMeta Computationとして、Meta DSに複数の形式を同時に持たせ、DSMを切り替えることで多態性を持つデータを扱う機能を実装した。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
772 これにより、必要に応じた形式を扱うことができ、ユーザが記述するComputation部分を大きく変えずに自由度の高い通信を行うことが可能になった。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
773 同様の手法を用いれば、圧縮形式以外にも暗号形式・JSON 形式などの複数のデータ表現をユーザに扱いやすい形で拡張することができる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
774
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
775 また、Data Segment のKeyの管理領域を分けたことで、DSとMeta DSのKeyの衝突を避け、CS / DSのプログラミングスタイルにおける信頼性向上を図った。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
776
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
777 そしてMeta Computationを用いて分散アプリケーションTreeVNCをAlice上で実装し性能評価を行った。
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
778 その結果、TreeVNCで使用される基本機能はAliceでも実現でき、同等の性能を出すことに成功した。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
779 また、コードの観点からTreeVNCとAliceVNCを比較した結果、Aliceが仕様の変更を抑えたシンプルな記述を実現できていた。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
780 このことからAliceのMeta Computationが信頼性・拡張性の高い実用的な分散アプリケーションを構築するに有用であることが確認された。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
781
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
782 \chapter{今後の課題}
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
783 \section{AliceVNCのNAT超え通信の実装}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
784 今後の課題としては、TreeVNCで実装が困難であったNATを超えたノード間通信をAliceVNCで実現し、その性能とコード修正量を比較することが挙げられる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
785 図\ref{fig:overNAT}は2つの違うプライベートネットワークを超えた接続の設計例である。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
786
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
787 \begin{figure}[h]
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
788 \begin{center}
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
789 \includegraphics[width=120mm]{images/overNAT.pdf}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
790 \end{center}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
791 \caption{複数のTopology ManagerでNAT超えを実現}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
792 \label{fig:overNAT}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
793 \end{figure}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
794
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
795 各ネットワークごとにTopoogy Managerを立ち上げることでネットワークを超えたノード間接続を実現する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
796 プライベートネットワークのTopoogy Managerは今までどおりネットワーク内に木を構築・管理する。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
797 他のネットワークにあるノードBがノードAに接続したい場合は、グローバルアドレスを持ったTopology Managerに参加表明をすればノードAの情報が提供され、ノードAの子ノードとして接続される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
798 つまり、Topology Managerを複数用意するだけで、Topology Manager自体の「参加表明のあったノードで木を構成する」という仕様は全く変更しないで良い。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
799 TreeVNCでは500行以上の変更が必要とされたが、Aliceでは複数のTopology Managerに接続するためのconfigファイルを変更するだけなので、AliceVNCの仕様の変更を抑えられると期待される。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
800 この機能も実現できれば、AliceのMeta Computationが拡張性の高い環境を提供できると言える。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
801
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
802
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
803 \section{APIの再設計}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
804 2.4で示したように、DSを取得するときのAPIはpeek/takeが直接扱えず、create/setKeyを組み合わせてプログラミングしなければならない。
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
805 この設計だとプログラマにとってわかりづらく、コンストラクタ内でtakeを行いたい場合はsetKeyを必ず最後に呼ばなければならない等の注意点がある。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
806 put/update/flipと同様に、peek/takeをそのまま呼べるように再設計する必要がある。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
807
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
808 また、動的に複数のDSを取得する場合は、プログラマが末尾再帰処理を書かなければならない。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
809 MPICHのReceiverメソッドは引数でタグと個数を指定することで複数のメッセージの待ち合わせができる。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
810 複数DSを待ち合わせしたい場面は多いため、個数指定のできるAPIの追加も望ましい。
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
811
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
812 \section{DSの型情報のマネジメント}
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
813 Aliceでは型情報がないので、peek/takeする際にどんな型のデータが入っているのかがわからない。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
814 takeしたDSの型を確認したい場合には、そのDSをputしている部分を確認しなくてはならない。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
815 そのため、型情報をサポートする機能が必要である。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
816
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
817 \section{データの永続性の確保}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
818 現在のAliceは、On memoryであるためプロセスの終了とともにData Segmentは全て失われてしまう。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
819
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
820 この問題を解決するためには、Data Segmentを他のKey Value Store等のシステムに保存し、永続性を確保する昼用がある。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
821 また、当研究室で開発しているJungle Database\cite{Jungle}のようにLogファイルとして出力することでも解決ができる。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
822
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
823 \section{Java以外での実装}
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
824 Alice に Garbage Collection は必要ない。Alice では、すべての Data Segment は Key Value に格納され、実行時の Data Segment は Code Segment が active な時のみにメモリ上にある。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
825 この最大値を見積ることは、Active Task の量を見積もれば良い。したがって、Alice にはGarbage Collection は必要ない。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
826 一方で、Key Value Store 上のデータは決して Garbage Collection の対象にならない。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
827 しかし、それは Garbage Collector には負荷をかけてしまう。
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
828 つまり、Alice 自体は Java で実装するのには向いていない。
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
829
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
830 当研究室ではCode Segment/Data Segmentのプログラミング形式で記述する言語CbC
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
831
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
832 (Continuation based C)\cite{CbC}と、CbCを用いて記述されるGears OS\cite{Gears}の開発を行っている。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
833 そのため、CbCを用いてGears OSの分散機構の一部としてAliceを再設計することが望ましい。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
834
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 % 参考文献
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 \input{bibliography.tex}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
837
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 % 謝辞
2
09b689ba5d70 add index
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
839 \chapter{謝辞}
10
90aaf305aed6 add presen
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
840 \hspace{1zw}本研究の遂行、また本論文の作成にあたり、ご多忙にも関わらず終始懇切なる御指導と御教授を賜わりました河野真治准教授に深く感謝したします。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
841
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
842 そして、数々の貴重な御助言と技術的指導を戴いた杉本優さん、比嘉健太さん、伊波立樹さん、並びに並列信頼研究室の皆様に感謝いたします。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
843
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
844 また、東京大学の横山大作教授をはじめ、OS研究会、プログラミング・シンポジウムにおいて多くのフィードバックを頂いた先生方に感謝いたします。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
845
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
846 本研究を遂行するにあたり参考にさせていただいた先行研究のFederated Linda, Cerium, TreeVNC の設計・実装に関わった全ての先輩方に感謝いたします。
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
847
5
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
848 最後に、日々の研究生活を支えてくださった米須智子さん、情報工学科の方々、そして家族に心より感謝いたします。
1f36a64a3868 fix fig position
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
849
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
850
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
851 \begin{flushright}
6
edc72425caab add abstract
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
852 2016年 2月 \\ 照屋のぞみ
4
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
853 \end{flushright}
f148e6addeaf add ring result
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
854
0
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
855
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 % 付録
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 %\input{appendix.tex}
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
858
4dc056cecb6c Add templete
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
859 \end{document}