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