Mercurial > hg > Papers > 2014 > toma-master
comparison paper/chapter4.tex @ 42:ff15fb78a3ae
fix
author | Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 04 Feb 2014 06:35:58 +0900 |
parents | ec3488a9ddd4 |
children | aa6de0f67a0a |
comparison
equal
deleted
inserted
replaced
41:5b69636936cc | 42:ff15fb78a3ae |
---|---|
1 \chapter{性能評価}\label{ch:bench} | 1 \chapter{性能評価}\label{ch:bench} |
2 本章では、非破壊的木構造データベース Jungle がマルチコアプロセッサで性能向上を果たせるのか確認する。 | 2 本章では、非破壊的木構造データベース Jungle がマルチコアプロセッサで性能向上を果たせるのか確認する。 |
3 まずはじめに、並列読み込みと並列書き込みの性能の計測を行う。 | 3 また、実用的なWebサービスが提供できるのか確認するために Web 掲示板サービスを開発し、Java との比較を行う。 |
4 また、掲示板ウェブアプリケーションを作成し、Java を用いた非破壊的木構造データベースとの性能比較を行う。 | |
5 | 4 |
6 \section{計測環境} | 5 \section{計測環境} |
7 マルチコアプロセッサでの性能を確認するためコア数の多いサーバを用いる。 | 6 マルチコアプロセッサでの性能を確認するためコア数の多いサーバを用いる。 |
8 本研究では、学科が提供するブレードサーバを用いて、計測環境を構築する。 | 7 本研究では、学科が提供するブレードサーバを用いて、計測環境を構築する。 |
9 ブレードサーバの仕様を表\ref{tab:server_spec}に示す。 | 8 ブレードサーバの仕様を表\ref{tab:server_spec}に示す。 |
10 | 9 |
11 \begin{table}[!htbp] | 10 論理コアは、Intel のハイパースレッディング機能のことであうr. |
12 \caption{学科が提供するブレードサーバの仕様} | 11 ハイパースレッディングは、1つのプロセッサをあたかも2つのプロセッサであるかのように扱う技術であり、 |
12 同時に演算器などを利用することはできないため性能が2倍になるわけではないが、概ね20 \%程度クロックあたりの性能が向上すると言われている。 | |
13 | |
14 \begin{table}[!htbp] | |
13 \label{tab:server_spec} | 15 \label{tab:server_spec} |
14 \begin{center} | 16 \begin{center} |
15 \begin{tabular}{|c||c|} \hline | 17 \begin{tabular}{|c||c|} \hline |
16 名前 & 概要 \\ \hline \hline | 18 名前 & 概要 \\ \hline \hline |
17 CPU & Intel(R) Xeon(R) CPU X5650@2.67GHz * 2\\ \hline | 19 CPU & Intel(R) Xeon(R) CPU X5650@2.67GHz * 2\\ \hline |
19 論理コア数 & 24 \\ \hline | 21 論理コア数 & 24 \\ \hline |
20 Memory & 126GB \\ \hline | 22 Memory & 126GB \\ \hline |
21 OS & Fedora 14 \\ \hline | 23 OS & Fedora 14 \\ \hline |
22 \end{tabular} | 24 \end{tabular} |
23 \end{center} | 25 \end{center} |
26 \caption{学科が提供するブレードサーバの仕様} | |
24 \end{table} | 27 \end{table} |
25 | 28 |
26 非破壊的木構造データベース Jungle の並列読み込みと並列書き込みの性能の計測には1台、 | 29 非破壊的木構造データベース Jungle の並列読み込みと並列書き込みの性能の計測には1台、 |
27 掲示板ウェブアプリケーションを用いた Java との性能比較には2台のブレードサーバを利用する。 | 30 Web 掲示板 サービスを用いた Java との性能比較には2台のブレードサーバを利用する。 |
28 2台使用するのは、サーバと負荷をかけるクライアントを別々に実行するためである。 | 31 2 台使用するのは、サーバと負荷をかけるクライアントを別々に実行するためである。 |
29 | 32 |
30 \subsubsection{Haskell および Java のバージョン} | 33 \subsubsection{Haskell および Java のバージョン} |
31 Haskell のコンパイラには The Glasgow Haskell Compiler(GHC)を使用する。 | 34 Haskell のコンパイラには The Glasgow Haskell Compiler(GHC)を使用する。 |
32 GHC は、Haskell で最も広く使われているコンパイラである。 | 35 GHC は、Haskell で最も広く使われているコンパイラである\cite{ghc}。 |
33 ソフトウェア・トランザクショナル・メモリをサポートするなど、並列プログラミングのためのHaskellの拡張が行われている。 | 36 ソフトウェア・トランザクショナル・メモリをサポートするなど、並列プログラミングのためのHaskellの拡張が行われている。 |
34 | 37 |
35 Haskell および Java のバージョンを表\ref{tab:compiler}に示す。 | 38 Haskell および Java のバージョンを表\ref{tab:compiler}に示す。 |
36 | 39 |
37 \begin{table}[!ht] | 40 \begin{table}[!ht] |
38 \caption{ベンチマークで利用したHaskellとJavaのバージョン} | |
39 \label{tab:compiler} | 41 \label{tab:compiler} |
40 \begin{center} | 42 \begin{center} |
41 \begin{tabular}{|c||c|} \hline | 43 \begin{tabular}{|c||c|} \hline |
42 言語 & バージョン \\ \hline \hline | 44 言語 & バージョン \\ \hline \hline |
43 Haskell & Glasgow Haskell Compiler, Version 7.6.3 \\ \hline | 45 Haskell & Glasgow Haskell Compiler, Version 7.6.3 \\ \hline |
44 Java & Java(TM) SE Runtime Environment (build 1.7.0\_51-b13) \\ \hline | 46 Java & Java(TM) SE Runtime Environment (build 1.7.0\_51-b13) \\ \hline |
45 \end{tabular} | 47 \end{tabular} |
46 \end{center} | 48 \end{center} |
49 \caption{ベンチマークで利用したHaskellとJavaのバージョン} | |
47 \end{table} | 50 \end{table} |
48 | 51 |
49 計測環境の構築方法については付録に記載する。 | 52 計測環境の構築方法については付録に記載する。 |
50 | 53 |
51 | 54 |
65 \subsubsection{計測結果} | 68 \subsubsection{計測結果} |
66 非破壊的木構造データベース Jungle の読み込みの計測結果を表\ref{tab:par_read}に示す。 | 69 非破壊的木構造データベース Jungle の読み込みの計測結果を表\ref{tab:par_read}に示す。 |
67 | 70 |
68 CPUコア数を増やしていくと、実行時間が短くなっていることが分かる。 | 71 CPUコア数を増やしていくと、実行時間が短くなっていることが分かる。 |
69 シングルスレッドで実行した場合と比較して、2 スレッドで 1.79 倍、12 スレッドで 10.77 倍の性能向上が見られる。 | 72 シングルスレッドで実行した場合と比較して、2 スレッドで 1.79 倍、12 スレッドで 10.77 倍の性能向上が見られる。 |
70 13 スレッド以上は、Intel のハイパースレッディング機能を利用して計測した。 | |
71 ハイパースレッディングは、1つのプロセッサをあたかも2つのプロセッサであるかのように扱う技術である。 | |
72 同時に演算器などを利用することはできないため性能が2倍になるわけではないが、概ね20 \%程度クロックあたりの性能が向上すると言われている。 | |
73 実際の計測では、13 スレッド以上は、12スレッドより速くなることもあるが、遅くなる場合もあるなど安定しない結果となっている。 | 73 実際の計測では、13 スレッド以上は、12スレッドより速くなることもあるが、遅くなる場合もあるなど安定しない結果となっている。 |
74 | 74 |
75 | 75 \begin{table}[!htbp] |
76 \begin{table}[!htbp] | |
77 \caption{読み込みの計測結果} | |
78 \label{tab:par_read} | 76 \label{tab:par_read} |
79 \begin{center} | 77 \begin{center} |
80 \begin{tabular}{|c||r|} \hline | 78 \begin{tabular}{|c||r|} \hline |
81 CPU数 & 実行時間 \\ \hline | 79 CPU数 & 実行時間 \\ \hline |
82 1 & 59.77 s\\ \hline | 80 1 & 59.77 s\\ \hline |
87 16 & 5.65 s\\ \hline | 85 16 & 5.65 s\\ \hline |
88 20 & 5.23 s\\ \hline | 86 20 & 5.23 s\\ \hline |
89 24 & 5.77 s\\ \hline | 87 24 & 5.77 s\\ \hline |
90 \end{tabular} | 88 \end{tabular} |
91 \end{center} | 89 \end{center} |
90 \caption{読み込みの計測結果} | |
92 \end{table} | 91 \end{table} |
93 | 92 |
94 性能向上率のグラフを図\ref{fig:benchmark_read}に示す。 | 93 性能向上率のグラフを図\ref{fig:benchmark_read}に示す。 |
95 線形に近い形で性能が向上していることが分かる。 | 94 線形に近い形で性能が向上していることが分かる。 |
96 12 スレッドで実行した場合の並列化率は 98.96 \%で、非破壊的木構造データベース Jungle は読み込みにおいてスケールするデータベースであることが分かる。 | 95 非破壊的木構造データベース Jungle は読み込みにおいてスケールするデータベースであることが分かる。 |
97 | 96 |
98 \begin{figure}[!htbp] | 97 \begin{figure}[!htbp] |
99 \caption{読み込みの性能向上率} | |
100 \begin{center} | 98 \begin{center} |
101 \includegraphics[width=90mm]{./images/read.pdf} | 99 \includegraphics[width=90mm]{./images/read.pdf} |
102 \end{center} | 100 \end{center} |
103 \label{fig:benchmark_read} | 101 \label{fig:benchmark_read} |
102 \caption{読み込みの性能向上率} | |
104 \end{figure} | 103 \end{figure} |
105 | 104 |
106 \clearpage | 105 \clearpage |
107 \section{書き込みの性能計測} | 106 \section{書き込みの性能計測} |
108 非破壊的木構造データベース Jungle を用いて、マルチコアプロセッサ上で並列に書き込みを行い、線形に性能向上ができるか調査する。 | 107 非破壊的木構造データベース Jungle を用いて、マルチコアプロセッサ上で並列に書き込みを行い、線形に性能向上ができるか調査する。 |
122 | 121 |
123 ハイパースレッディングは効果がなく、13 スレッド以上では実行時間が遅くなっている。 | 122 ハイパースレッディングは効果がなく、13 スレッド以上では実行時間が遅くなっている。 |
124 | 123 |
125 | 124 |
126 \begin{table}[!htbp] | 125 \begin{table}[!htbp] |
127 \caption{書き込みの計測結果} | |
128 \label{tab:par_write} | 126 \label{tab:par_write} |
129 \begin{center} | 127 \begin{center} |
130 \begin{tabular}{|c||r|} \hline | 128 \begin{tabular}{|c||r|} \hline |
131 CPU数 & 実行時間 \\ \hline | 129 CPU数 & 実行時間 \\ \hline |
132 1 & 52.68 s\\ \hline | 130 1 & 52.68 s\\ \hline |
137 16 & 14.92 s\\ \hline | 135 16 & 14.92 s\\ \hline |
138 20 & 18.62 s\\ \hline | 136 20 & 18.62 s\\ \hline |
139 24 & 16.63 s\\ \hline | 137 24 & 16.63 s\\ \hline |
140 \end{tabular} | 138 \end{tabular} |
141 \end{center} | 139 \end{center} |
140 \caption{書き込みの計測結果} | |
142 \end{table} | 141 \end{table} |
143 | 142 |
144 性能向上率のグラフを図\ref{fig:benchmark_write}に示す。 | 143 性能向上率のグラフを図\ref{fig:benchmark_write}に示す。 |
145 書き込みは並列化率が低く、性能向上が 4 倍程度で止まっている。 | 144 書き込みは並列化率が低く、性能向上が 4 倍程度で止まっている。 |
146 12 スレッドで実行した場合の並列化率は 80.8 \%である。 | |
147 | 145 |
148 \newpage | 146 \newpage |
149 \begin{figure}[!htbp] | 147 \begin{figure}[!htbp] |
150 \caption{書き込みの性能向上率} | |
151 \begin{center} | 148 \begin{center} |
152 \includegraphics[width=90mm]{./images/write.pdf} | 149 \includegraphics[width=90mm]{./images/write.pdf} |
153 \end{center} | 150 \end{center} |
154 \label{fig:benchmark_write} | 151 \label{fig:benchmark_write} |
152 \caption{書き込みの性能向上率} | |
155 \end{figure} | 153 \end{figure} |
156 | 154 |
157 Jungle へ登録する際に他のスレッドから登録があった場合に、ソフトウェア・トランザクショナル・メモリが処理をやり直すため、並列度が下がっていると思われるが、GHCの問題も考えられる。 | 155 Jungle へ木の登録する際に他のスレッドから登録があった場合、ソフトウェア・トランザクショナル・メモリが処理をやり直すため、並列度が下がっていると思われる。 |
156 また、GHC の問題も考えられる。 | |
158 GHC の IO マネージャーは、マルチスレッドでうまくスケールしないという問題があり、並列度が下がってしまう。 | 157 GHC の IO マネージャーは、マルチスレッドでうまくスケールしないという問題があり、並列度が下がってしまう。 |
159 GHCの次期バージョンではIO マネージャーが改善され、スケールするようになる見込みである\cite{iomanager}。 | 158 GHCの次期バージョンではIO マネージャーが改善され、スケールするようになる見込みである\cite{iomanager}。 |
160 | 159 |
161 非破壊的木構造データベース Jungle は、書き込みは並列化率が低くなってしまっている。 | 160 非破壊的木構造データベース Jungle は、書き込みは並列化率が低くなってしまっている。 |
162 読み込みが高速なため、書き込みより読み込みが多用されるシステムに向いているといえる。 | 161 読み込みが高速なため、書き込みより読み込みが多用されるシステムに向いているといえる。 |
163 | 162 |
164 \clearpage | 163 \clearpage |
165 | 164 |
166 \section{ウェブアプリケーションに組み込んでの性能評価} | 165 \section{Web サービスに組み込んでの性能評価} |
167 実用的なウェブアプリケーションに組み込んで、妥当な性能が出るか調査を行う。 | 166 並列データベース Jungle が実用的なWeb サービスを提供できるのか調査する。 |
168 | 167 Web掲示板サービスに組み込んで、性能測定を行った。 |
169 \subsection{掲示板ウェブアプリケーションの実装} | 168 |
170 木構造データベース Jungle と Haskell の HTTP サーバ Warp を用いて掲示板ウェブアプリケーションを開発する。 | 169 \subsection{Web 掲示板サービスの実装} |
171 Warp を用いたウェブアプリケーションの構築法については付録に記載する。 | 170 木構造データベース Jungle と Haskell の HTTP サーバ Warp\cite{warp} を用いて Web 掲示板サービスを開発する。 |
172 | 171 Warp を用いたWeb サービスの構築法については付録に記載する。 |
172 Warp は、ハイパースレッディングの効果がなくハイパースレッディング利用時に遅くなるため、12 スレッドまでの計測とする。 | |
173 | |
174 Warp は並列に実行可能であり、並列に実行している Warp に対して、Jungle を繋げるだけで Jungle を並列に動かすことができる。 | |
173 掲示板におけるデータベースへの書き込みは、板の作成と、板への書き込みがある。 | 175 掲示板におけるデータベースへの書き込みは、板の作成と、板への書き込みがある。 |
174 Jungle において、板の作成は新しい木構造の作成、板への書き込みは木構造へのノードの追加で表現する。 | 176 Jungle において、板の作成は新しい木構造の作成、板への書き込みは木構造へのノードの追加で表現する。 |
175 掲示板へ実装した機能を表\ref{tab:bbs_func}に示す。 | 177 掲示板へ実装した機能を表\ref{tab:bbs_func}に示す。 |
176 | 178 |
177 \begin{table}[!htbp] | 179 \begin{table}[!htbp] |
178 \caption{掲示板ウェブアプリケーションへ実装した機能一覧} | |
179 \label{tab:bbs_func} | 180 \label{tab:bbs_func} |
180 \begin{center} | 181 \begin{center} |
181 \begin{tabular}{|c||c|} \hline | 182 \begin{tabular}{|c||c|} \hline |
182 関数名 & 概要 \\ \hline \hline | 183 関数名 & 概要 \\ \hline \hline |
183 showBoard & 板の一覧を表示 \\ \hline | 184 showBoard & 板の一覧を表示 \\ \hline |
185 showBoardMessage & 板への書き込みの一覧を表示 \\ \hline | 186 showBoardMessage & 板への書き込みの一覧を表示 \\ \hline |
186 createBoardMessage & 板への書き込み \\ \hline | 187 createBoardMessage & 板への書き込み \\ \hline |
187 editMessage & 板への書き込みの編集 \\ \hline | 188 editMessage & 板への書き込みの編集 \\ \hline |
188 \end{tabular} | 189 \end{tabular} |
189 \end{center} | 190 \end{center} |
190 \end{table} | 191 \caption{Web掲示板サービスへ実装した機能一覧} |
192 \end{table} | |
193 | |
194 \begin{figure}[!htbp] | |
195 \begin{center} | |
196 \includegraphics[width=90mm]{./images/request.pdf} | |
197 \end{center} | |
198 \label{fig:request} | |
199 \caption{Warp を用いたWeb掲示板サービス} | |
200 \end{figure} | |
201 | |
191 | 202 |
192 \subsection{読み込み} | 203 \subsection{読み込み} |
193 \subsubsection{計測方法} | 204 \subsubsection{計測方法} |
194 掲示板に対して読み込みを行い、負荷をかける。 | 205 掲示板に対して読み込みを行い、負荷をかける。 |
195 掲示板を立ち上げるサーバと、性能測定ツール weighttp\cite{weighttp} を用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った。 | 206 掲示板を立ち上げるサーバと、性能測定ツール weighttp\cite{weighttp} を用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った。 |
196 | 207 |
197 weighttpの設定は、リクエストの総数 100 万、同時に接続するコネクションの数 1,000、実行時のスレッド数 10、HTTP Keep-Alivesを有効とする。 | 208 weighttpの設定は、リクエストの総数 100 万、同時に接続するコネクションの数 1,000、実行時のスレッド数 10、HTTP Keep-Alivesを有効とする。 |
198 | 209 |
199 HTTP サーバ Warp は、ハイパースレッディングの効果がなくハイパースレッディング利用時に遅くなるため、12 スレッドまでの計測とする。 | |
200 | |
201 \subsubsection{計測結果} | 210 \subsubsection{計測結果} |
202 | 211 |
203 掲示板の読み込みの計測結果を表\ref{tab:bbs_read}に示す。 | 212 掲示板の読み込みの計測結果を表\ref{tab:bbs_read}に示す。 |
204 | 213 |
205 並列で実行した場合、実行時間が短くなっているが性能向上率が低いことが分かる。 | 214 並列で実行した場合、実行時間が短くなっているが性能向上率が低いことが分かる。 |
206 これは HTTP サーバ Warp がボトルネックとなってしまっているためだと考えられる。 | 215 これは HTTP サーバ Warp がボトルネックとなってしまっているためだと考えられる。 |
207 | 216 |
208 Warp を用いてアクセスした際に、"hello, world"と返すだけのプログラムを作成し測定する。 | 217 Warp のボトルネックがどれぐらいあるのか調査するために、アクセスした際に "hello, world" と返すだけのプログラムを作成し測定する。 |
209 結果を表\ref{tab:warp}に示す。 | 218 結果を表\ref{tab:warp}に示す。 |
210 1 スレッドで実行した場合は、Jungle と組み合わせた掲示板より速い。 | 219 1 スレッドで実行した場合は、Jungle と組み合わせた掲示板より速い。 |
211 しかしながら、スレッド数が増えていくと掲示板の読み込みとあまり結果が変わらなくなってしまう。 | 220 しかしながら、スレッド数が増えていくと掲示板の読み込みとあまり結果が変わらなくなってしまう。 |
212 Warpは、HTTP サーバのため IO 処理を多用する。この問題は、GHC の IO マネージャーの改良で改善される可能性が高い。 | 221 Warp は現状あまり並列化効果がでていない。 |
213 | 222 |
214 \begin{table}[!htbp] | 223 \begin{table}[!htbp] |
215 \caption{掲示板を利用した読み込みの計測結果} | |
216 \label{tab:bbs_read} | 224 \label{tab:bbs_read} |
217 \begin{center} | 225 \begin{center} |
218 \begin{tabular}{|c||r|} \hline | 226 \begin{tabular}{|c||r|} \hline |
219 CPU数 & 実行時間 \\ \hline | 227 CPU数 & 実行時間 \\ \hline |
220 1 & 60.72 s\\ \hline | 228 1 & 60.72 s\\ \hline |
222 4 & 28.97 s\\ \hline | 230 4 & 28.97 s\\ \hline |
223 8 & 27.73 s\\ \hline | 231 8 & 27.73 s\\ \hline |
224 12 & 28.33 s\\ \hline | 232 12 & 28.33 s\\ \hline |
225 \end{tabular} | 233 \end{tabular} |
226 \end{center} | 234 \end{center} |
227 \end{table} | 235 \caption{掲示板を利用した読み込みの計測結果} |
228 | 236 \end{table} |
229 \begin{table}[!htbp] | 237 |
230 \caption{Warpの計測結果} | 238 \begin{table}[!htbp] |
231 \label{tab:warp} | 239 \label{tab:warp} |
232 \begin{center} | 240 \begin{center} |
233 \begin{tabular}{|c||r|} \hline | 241 \begin{tabular}{|c||r|} \hline |
234 CPU数 & 実行時間 \\ \hline | 242 CPU数 & 実行時間 \\ \hline |
235 1 & 49.28 s\\ \hline | 243 1 & 49.28 s\\ \hline |
237 4 & 25.70 s\\ \hline | 245 4 & 25.70 s\\ \hline |
238 8 & 27.90 s\\ \hline | 246 8 & 27.90 s\\ \hline |
239 12 & 29.23 s\\ \hline | 247 12 & 29.23 s\\ \hline |
240 \end{tabular} | 248 \end{tabular} |
241 \end{center} | 249 \end{center} |
242 \end{table} | 250 \caption{Warpの計測結果} |
243 | 251 \end{table} |
244 ウェブアプリケーションを用いて実験する場合、データベースだけがボトルネックとなるように負荷をかけるのは難しい。 | 252 |
253 Web サービスを用いて実験する場合、データベースだけがボトルネックとなるように負荷をかけるのは難しい。 | |
245 ただ単にデータを大きくするだけでは、文字列をHTMLに変換するコストが大きくなってしまうためである。 | 254 ただ単にデータを大きくするだけでは、文字列をHTMLに変換するコストが大きくなってしまうためである。 |
246 | 255 |
247 \subsection{書き込み} | 256 \subsection{書き込み} |
248 \subsubsection{計測方法} | 257 \subsubsection{計測方法} |
249 掲示板に対して書き込みを行い、負荷をかける。 | 258 掲示板に対して書き込みを行い、負荷をかける。 |
250 掲示板を立ち上げるサーバと、weighttpを用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った。 | 259 掲示板を立ち上げるサーバと、weighttpを用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った。 |
251 | 260 |
252 weighttpでは、GET しかできないためURLのクエリ文字列でデータを書き込めるように掲示板ウェブアプリケーションを変更した。 | 261 weighttpでは、GET しかできないためURLのクエリ文字列でデータを書き込めるようにWeb掲示板サービスを変更した。 |
253 weighttp起動時のオプションは、読み込みと同じである。 | 262 weighttp起動時のオプションは、読み込みと同じである。 |
254 \subsubsection{計測結果} | 263 \subsubsection{計測結果} |
255 | 264 |
256 掲示板の書き込みの計測結果を表\ref{tab:bbs_write}に示す。 | 265 掲示板の書き込みの計測結果を表\ref{tab:bbs_write}に示す。 |
257 並列で実行した場合、実行時間が短くなっているが性能向上率が低いことが分かる。 | 266 並列で実行した場合、実行時間が短くなっているが性能向上率が低いことが分かる。 |
258 これも HTTP サーバ Warp がボトルネックとなってしまっているためだと考えられる。 | 267 読み込みに比べて、書き込みのほうが全体的に遅くなっている。 |
259 | 268 |
260 \begin{table}[!htbp] | 269 \begin{table}[!htbp] |
261 \caption{掲示板を利用した書き込みの計測結果} | |
262 \label{tab:bbs_write} | 270 \label{tab:bbs_write} |
263 \begin{center} | 271 \begin{center} |
264 \begin{tabular}{|c||r|} \hline | 272 \begin{tabular}{|c||r|} \hline |
265 CPU数 & 実行時間 \\ \hline | 273 CPU数 & 実行時間 \\ \hline |
266 1 & 54.16 s\\ \hline | 274 1 & 54.16 s\\ \hline |
269 8 & 31.58 s\\ \hline | 277 8 & 31.58 s\\ \hline |
270 10 & 32.64 s\\ \hline | 278 10 & 32.64 s\\ \hline |
271 12 & 32.68 s\\ \hline | 279 12 & 32.68 s\\ \hline |
272 \end{tabular} | 280 \end{tabular} |
273 \end{center} | 281 \end{center} |
282 \caption{掲示板を利用した書き込みの計測結果} | |
274 \end{table} | 283 \end{table} |
275 | 284 |
276 \subsection{Javaを用いた非破壊的木構造データベースとの比較} | 285 \subsection{Javaを用いた非破壊的木構造データベースとの比較} |
277 非破壊的木構造データベースは、Haskell 版と Java 版の2つ存在する。 | 286 非破壊的木構造データベースは、Haskell 版と Java 版の2つ存在する。 |
278 掲示板ウェブアプリケーションを両方の言語で実装し、比較を行う。 | 287 Web 掲示板サービスを両方の言語で実装し、比較を行う。 |
279 Haskell ではフロントエンドとして Warp を利用したが、Java では Jetty を利用する。 | 288 Haskell ではフロントエンドとして Warp を利用したが、Java では Jetty を利用する。 |
280 Jetty のバージョンは 6.1.26 を用いる。 | 289 Jetty のバージョンは 6.1.26 を用いる。 |
281 | 290 |
282 Haskell 版と Java 版の掲示板ウェブアプリケーションをブレードサーバ上で実行し、 | 291 Haskell 版と Java 版の Web 掲示板サービスをブレードサーバ上で実行し、 |
283 weightttpで負荷をかけ100万リクエストを処理するのにかかる時間を計測する。 | 292 weightttpで負荷をかけ100万リクエストを処理するのにかかる時間を計測する。 |
284 Haskell と Java の測定結果を表\ref{tab:compare}に示す。 | 293 Haskell と Java の測定結果を表\ref{tab:compare}に示す。 |
285 | 294 |
286 \begin{table}[!htbp] | 295 \begin{table}[!htbp] |
287 \caption{HaskellとJavaの比較} | |
288 \label{tab:compare} | 296 \label{tab:compare} |
289 \begin{center} | 297 \begin{center} |
290 \begin{tabular}{|c||r|r|} \hline | 298 \begin{tabular}{|c||r|r|} \hline |
291 測定 & Haskell & Java \\ \hline \hline | 299 測定 & Haskell & Java \\ \hline \hline |
292 読み込み & 28.33 s & 53.13 s \\ \hline | 300 読み込み & 28.33 s & 53.13 s \\ \hline |
293 書き込み & 32.68 s & 76.4 s \\ \hline | 301 書き込み & 32.68 s & 76.4 s \\ \hline |
294 \end{tabular} | 302 \end{tabular} |
295 \end{center} | 303 \end{center} |
304 \caption{HaskellとJavaの比較} | |
296 \end{table} | 305 \end{table} |
297 | 306 |
298 Haskell 版は、Java 版と比較して読み込みで 1.87 倍、書き込みで 2.3 倍の性能が出ている。 | 307 Haskell 版は、Java 版と比較して読み込みで 1.87 倍、書き込みで 2.3 倍の性能が出ている。 |
299 | 308 |
300 書き込みが読み込みより性能差が出ている理由として遅延評価が考えられる。 | 309 書き込みが読み込みより性能差が出ている理由として遅延評価が考えられる。 |