# HG changeset patch # User sugi # Date 1421508202 -32400 # Node ID 8e0b26d962cc8d2012fd6d522a29d023d51db536 # Parent 930eae4e8aebfee5dcd070915687cbcf7c3eac67 modify conclusion diff -r 930eae4e8aeb -r 8e0b26d962cc paper/chapter5.tex --- a/paper/chapter5.tex Fri Jan 16 14:44:05 2015 +0900 +++ b/paper/chapter5.tex Sun Jan 18 00:23:22 2015 +0900 @@ -36,7 +36,7 @@ \hline & 改善前 & 改善後 \\ \hline - 実行時間 (ms)& 199.38 & 184.64 \\ + 実行時間 (ms)& 232.7 & 131.0 \\ \hline \end{tabular} \end{center} diff -r 930eae4e8aeb -r 8e0b26d962cc paper/conclusion.tex --- a/paper/conclusion.tex Fri Jan 16 14:44:05 2015 +0900 +++ b/paper/conclusion.tex Sun Jan 18 00:23:22 2015 +0900 @@ -1,12 +1,23 @@ \chapter{結論} \label{chapter:conclusion} \section{まとめ} +今回の研究では、さまざまなアプリケーションの作成を行い、Aliceの性能的問題や不足機能を洗い出した。 +性能的な問題に対しては、並列と分散の両方の観点から改善を行った。その結果、実行速度を最大24\%改善した。 +不足機能に関しては、洗いだした機能を実装することで、当研究室で開発しているTreeVNCをAlice上で実装できるまでになった。 + +しかし、性能も機能も十分であるとは言えない。性能に関しては、先行研究であるFederated Lindaに勝てていない。 +機能に関しては、versionの違うプロトコルに対応するなどまだ必要な機能も多い。 \section{今後の課題} +\subsection{データの永続性の確保} +現在のAliceは、On memoryであるためプロセスの終了とともにData Segmentは全て失われてしまう。 -\subsection{データの永続性の確保} +この問題を解決するためには、Data Segmentを他のKey Value Store等のシステムに保存し、永続性を確保する昼用がある。また、JungleのようにLogファイルとして出力することでも解決ができる。 \subsection{DataSegmentKeyの領域分け} +現在Meta Data SegmentとData Segmentは、同じKey Value Queueで管理されている。つまり、Data Segment APIを用いれば、誰でもMeta Data Segmentを変更することができてしまう。Meta Data SegmentにAliceの状態を表すものがあるため、ユーザーによる変更は望ましくない。また、ユーザーが意図せずMeta Data Segment Keyに対して、putすることも考えられる。そして、Meta Code Segmentがactiveになりエラーを起こす。Meta Code Segmentでエラーが起こった場合、ソースコードを見ることができないため解決しづらい。 + +このようなエラーを防ぐためにMeta Data SegmentとData Segmentの領域を分ける必要がある。Data Segmentを分けることによりKeyの重複によるエラーをアプリケーションレベルにすることができる。しかし、領域を分けるだけでは足りない。領域をわけることで解決することができるのはputまたはupdateの場合だけである。Meta Data Segmentを取得する際にtakeを使用した場合Meta Data SegmentがQueueから取り除かれてしまう。この問題に対処するためには権限をCode Segmentに対して設定する必要がある。その権限により、takeと記述しても実際にはpeekを行うようにすることができる。 \subsection{記述に関する注意点} \subsubsection{setKey のシンタックス問題} @@ -25,4 +36,11 @@ \begin{table}[html] \lstinputlisting[label=src:success,caption=NullPointerExceptionにならない記述]{source/ShowData.java} \end{table} -\subsubsection{singleton Code Segment} \ No newline at end of file + +\subsubsection{singleton Code Segment} +Javaには、クラスのインスタンスを1つに限定するSingletonパターンがある。Code SegmentにSingletonパターンを使用したい場合があり得る。その場合、setKeyを行なう前に{\tt ids.init()}を行なう必要がある。先ほどのsetKeyのシンタックス問題でも述べたが、Code Segmentは内部で実行に必要なData Segmentを示す値がある。一度実行された状態のCode Segmentと新しくインスタンスを作成した場合のCode Segmentでは、値が違うため{\tt ids.init()}を呼ばずにsetKeyを行なうとData Segmentが揃ったにもかかわらずCode Segmentが実行されない。そのためsetKeyを呼ぶ前に{\tt ids.init()}を呼び内部の値を初期化する必要がある。(ソースコード\ref{src:Singleton}) + + +\begin{table}[html] +\lstinputlisting[label=src:Singleton,caption=setKeyを呼ぶ前にinitを呼ぶ必要がある。]{source/Singleton.java} +\end{table} \ No newline at end of file diff -r 930eae4e8aeb -r 8e0b26d962cc paper/source/ShowDataFailed.java --- a/paper/source/ShowDataFailed.java Fri Jan 16 14:44:05 2015 +0900 +++ b/paper/source/ShowDataFailed.java Sun Jan 18 00:23:22 2015 +0900 @@ -6,7 +6,7 @@ for (int i= 0;i < cnt; i++) { info[i] = ids.create(CommandType.TAKE); info[i].setKey(SetInfo.array[i]); - } + } } @Override @@ -14,6 +14,7 @@ int size = 0; for (Receiver anInfo : info) { DataList dlist = anInfo.asClass(DataList.class); - dlist.showData(); + dlist.showData(); } - } \ No newline at end of file + } +} \ No newline at end of file diff -r 930eae4e8aeb -r 8e0b26d962cc paper/source/Singleton.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/source/Singleton.java Sun Jan 18 00:23:22 2015 +0900 @@ -0,0 +1,14 @@ +public class TaskExecuter extends CodeSegment { + private Receiver info = ids.create(CommandType.TAKE); + private static TaskExecuter instance = new TaskExecuter(); + + private TaskExecuter() {} + public static TaskExecuter getInstance() { + return instance; + } + + public void setKey() { + ids.init(); + info.setKey("_SCHEDULER"); + } +} \ No newline at end of file