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 書き込みが読み込みより性能差が出ている理由として遅延評価が考えられる。