Mercurial > hg > Papers > 2015 > sugi-master
comparison paper/chapter2.tex @ 12:ddab34e04068
add pdf and modify chapter2
author | sugi |
---|---|
date | Sun, 11 Jan 2015 23:00:07 +0900 |
parents | 0b3e5436fa48 |
children | ef47dab5764f |
comparison
equal
deleted
inserted
replaced
11:0b3e5436fa48 | 12:ddab34e04068 |
---|---|
1 \chapter{Aliceを使った例題} \label{chapter:chapter2} | 1 \chapter{Aliceを使った例題} \label{chapter:chapter2} |
2 この章ではAliceを用いて作成されたアプリケーションを紹介する。これらのアプリケーションでAliceの性能テスト、必要な機能の洗い出しを行っている。 | |
2 \section{AliceVNC} \label{section:AliceVNC} | 3 \section{AliceVNC} \label{section:AliceVNC} |
4 AliceVNCは、当研究室で開発を行っているTreeVNCをAliceを用いて実装された、授業向け画面共有システムである。 | |
5 | |
6 授業でVNCを使う場合、1つのコンピュータに多人数が同時につながるため、性能が大幅に落ちるという問題がある(図\ref{fig:vnc})。この問題をノード同士を接続させ、木構造を構成することで負荷分散を行い解決したものがTreeVNCである(図\ref{fig:treestructure})。TreeVNCは、TightVNCのソースコードを利用して開発されている。 | |
7 | |
8 \begin{figure}[htbp] | |
9 \begin{minipage}{0.5\hsize} | |
10 \begin{center} | |
11 \includegraphics[width=80mm]{images/vnc.pdf} | |
12 \end{center} | |
13 \caption{VNCの構造} | |
14 \label{fig:vnc} | |
15 \end{minipage} | |
16 \begin{minipage}{0.5\hsize} | |
17 \begin{center} | |
18 \includegraphics[width=80mm]{images/treestructure.pdf} | |
19 \end{center} | |
20 \caption{TreeVNC, AliceVNCの構造} | |
21 \label{fig:treestructure} | |
22 \end{minipage} | |
23 \end{figure} | |
24 | |
25 しかし、TreeVNCにも問題が存在する。ノードを木構造にするためアプリケーション内で管理する必要があるが、不特定多数のノードを管理することは容易ではない。また、通信プロトコルは、TightVNCのプロトコルを拡張して利用している。アプリケーション層でプロトコルを拡張する場合、サーバとクライントの両方のプログラムコードを変更する必要があり、プロトコル処理部の保守性を維持していくことが難しい。 | |
26 | |
27 実際に、プロトコルを拡張したことにより予想外のエラーでTreeVNCが強制終了することがある。 | |
28 | |
29 さらに、TighVNCのアップデートに対応する必要がある。だが、アップデートによってはパッケージ構成が変更され、元のコードが残っていないことも考えられる。この場合、新しいTightVNCに作成した機能を1つずつ移行するしなければならないためコストが高い。 | |
30 | |
31 %分散アプリケーションは、デバックが行い難くエラーを再現することですら難しい。 | |
32 | |
33 これらの問題は、分散フレームワークAliceを使うことで解決することができる。ノードの管理は全てAliceが行なうため、プログラマーは画面共有の処理のみ記述すれば良い。プロトコルはAlice上で構築することでTightVNCのプロトコルと干渉することがないため、エラーが起こった場合はAliceで記述したコードのみを確認すればよい。 | |
34 アップデートの問題に関しては、TightVNCに必要なデータをputする処理さえ追加すれば良いため、問題なく対応できるはずである。 | |
35 | |
36 Aliceが以上の問題に対応できることを証明するため、また実用的なアプリケーションの記述が可能であるかを検証するためAliceVNCの開発を行った。 | |
37 | |
38 \subsection{AliceVNCの原理} | |
39 従来のVNCとTreeVNCの構造を比較した図を(図\ref{fig:comparenormalandtree})に示す。 | |
40 | |
41 \begin{figure}[!htbp] | |
42 \begin{center} | |
43 \includegraphics[width=130mm]{./images/comparenormalandtree.pdf} | |
44 \end{center} | |
45 \caption{AliceVNCの構造} | |
46 \label{fig:comparenormalandtree} | |
47 \end{figure} | |
48 | |
49 | |
50 表\ref{tb:oneporttraffic}はポート一本あたりの通信量である。従来のVNCの場合、ポート一本あたりの負荷はノード数に比例して増える。しかし、AliceVNCの場合はTreeの子供の数が一定なので、Node数に関係なく一定である。通信量が増えるほど、CPUに負荷がかかり性能が低下する。AliceVNCの場合、通信量は一定なので性能が低下せず使用することができる。 | |
51 | |
52 \begin{table}[htbp] | |
53 \caption{ポート一本あたりの通信量(NはNode数、MはTreeの子供の数)} | |
54 \label{tb:oneporttraffic} | |
55 \begin{center} | |
56 \begin{tabular}{|c|c|c|} \hline | |
57 & 従来のVNC & AliceVNC \\ \hline | |
58 通信量 & N * データ量 & (M + 1) * データ量 \\ \hline | |
59 \end{tabular} | |
60 \end{center} | |
61 \end{table} | |
62 | |
63 \subsection{表示画面の切り替え} | |
64 ゼミなど発表者が多数いる場合、発表者が変わるたびにアプリケーションを立ち上げ直すのは手間である。 | |
65 そのため、アプリケーションに切り替えの機能を実装するのが望ましい。そこで、AliceVNCに切り替えの機能を実装した。 | |
66 | |
67 TreeVNCにも同様に切り替え機能が存在するが、AliceVNCの切り替え機能と挙動が異なる(図\ref{fig:changeTree} \ref{fig:changeAlice})。 | |
68 | |
69 \begin{figure}[htbp] | |
70 \begin{minipage}{0.5\hsize} | |
71 \begin{center} | |
72 \includegraphics[width=80mm]{images/changeTreeVNC.pdf} | |
73 \end{center} | |
74 \caption{TreeVNCにおける切り替え} | |
75 \label{fig:changeTree} | |
76 \end{minipage} | |
77 \begin{minipage}{0.4\hsize} | |
78 \begin{center} | |
79 \includegraphics[width=80mm]{images/changeAliceVNC.pdf} | |
80 \end{center} | |
81 \caption{AliceVNCにおける切り替え} | |
82 \label{fig:changeAlice} | |
83 \end{minipage} | |
84 \end{figure} | |
85 | |
86 | |
87 %図の変更 | |
88 TreeVNCの場合、Root Nodeが切り替えを要求したノードに対して接続を行う。AliceVNCの場合、切り替えを要求したノードが自分自身に対して接続を行う。そのため、AliceVNCは、VNC Serverとノード間の通信が速いという利点がある。しかし、図 \ref{fig:changeAlice}のように底辺にいるノードが配信を行った場合、全体に行き渡るまでにルートノードが配信する場合の2倍の時間がかかるという欠点も存在する。 | |
89 | |
3 \section{水族館の例題(JavaFx)} | 90 \section{水族館の例題(JavaFx)} |
91 | |
92 | |
4 \section{Jungle} | 93 \section{Jungle} |
94 | |
5 \section{bitonic sort} | 95 \section{bitonic sort} |
96 bitnic sortは並列ソートであり、Aliceがマルチコアに対応していることを確認するため実装した。 | |
97 | |
98 \begin{figure}[htbp] | |
99 \begin{center} | |
100 \includegraphics{images/sortflow.pdf} | |
101 \end{center} | |
102 \caption[width=100mm]{sort flow} | |
103 \label{fig:sortflow} | |
104 \end{figure} | |
105 | |
106 \subsection{処理の流れ} | |
107 指定された数の乱数を生成し、Sortを行う例題である。 | |
108 また、図\ref{fig:bitonicSort}はSortされるまでの流れをコラボレーションダイアグラムで示したものである。 | |
109 \begin{enumerate} | |
110 \item SetTask (Code Segment)が乱数列を分割してarray1とarray2にputする。 | |
111 \item \label {fig:start}replyされたData SegmentをSort (Code Segment)で昇順に整列させる。 | |
112 \item \label {fig:end}整列された配列を分割する。上半分をarray1-F、下半分をarray1-Bにputする。 | |
113 \item 分割した各数列(array2)に対しても同様に \ref{fig:start}と\ref{fig:end}を行う。 | |
114 \item \label {fig:start2}replyされた2つのData Segment(array1-B、array2-F)を合体させ、整列させる。 | |
115 \item 整列された配列の上半分をarray1-B、下半分をarray2-Fにputする。 | |
116 \item \label {fig:start1}replyされた2つのData Segment(array1-F、array1-B)を合体させ、整列させる。 | |
117 \item \label {fig:end1}整列された配列の上半分をarray1-F、下半分をarray1-Bにputする。 | |
118 \item \label {fig:end2}array2に対しても操作 \ref {fig:start1} と\ref {fig:end1} を行う。 | |
119 \item \ref {fig:start2} - \ref {fig:end2} を繰り返し行うことで全体がSortされる。 | |
120 \end{enumerate} | |
121 | |
122 \begin{figure}[htbp] | |
123 \begin{center} | |
124 \includegraphics{images/bitonicsort.pdf} | |
125 \end{center} | |
126 \caption{Aliceにおけるbitonic sortの動き} | |
127 \label{fig:bitonicSort} | |
128 \end{figure} |