annotate paper/chapter4.tex @ 56:3f7d249ee38f

fix
author Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
date Mon, 10 Feb 2014 08:50:24 +0900
parents 4675d3e5fee3
children 3193a35f7874
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}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
2 本章では, 非破壊的木構造データベース Jungle がマルチコアプロセッサで性能向上を果たせるのか確認する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
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{計測環境}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
6 マルチコアプロセッサでの性能を確認するためコア数の多いサーバを用いる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
7 本研究では, 学科が提供するブレードサーバを用いて, 計測環境を構築する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
8 ブレードサーバの仕様を表\ref{tab:server_spec}に示す.
12
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
9
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
10 論理コアは, Intel のハイパースレッディング機能のことである.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
11 ハイパースレッディングは, 1つのプロセッサをあたかも2つのプロセッサであるかのように扱う技術であり,
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
12 同時に演算器などを利用することはできないため性能が2倍になるわけではないが, 概ね20 \%程度クロックあたりの性能が向上すると言われている.
42
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 \begin{center}
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
16 \begin{tabular}{|c||c|} \hline
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
17 名前 & 概要 \\ \hline \hline
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
18 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
19 物理コア数 & 12 \\ \hline
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
20 論理コア数 & 24 \\ \hline
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
21 Memory & 126GB \\ \hline
51
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
22 OS & Fedora 19 \\ \hline
12
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
23 \end{tabular}
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
24 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
25 \caption{学科が提供するブレードサーバの仕様}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
26 \label{tab:server_spec}
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
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
29 非破壊的木構造データベース Jungle の並列読み込みと並列書き込みの性能の計測には1台,
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
30 Web 掲示板 サービスを用いた Java との性能比較には2台のブレードサーバを利用する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
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 のバージョン}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
34 Haskell のコンパイラには The Glasgow Haskell Compiler(GHC)を使用する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
35 GHC は, Haskell で最も広く使われているコンパイラである\cite{ghc}.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
36 ソフトウェア・トランザクショナル・メモリをサポートするなど, 並列プログラミングのためのHaskellの拡張が行われている.
53
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
37 GHC は, 並列実行時のIOマネージャーが改良されているため, Release candidate versionである7.8を用いる\cite{iomanager}.
12
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
38
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
39 Haskell および Java のバージョンを表\ref{tab:compiler}に示す.
12
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
40
35
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 34
diff changeset
41 \begin{table}[!ht]
12
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
51
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
45 Haskell & Glasgow Haskell Compiler, Version 7.8 RC1 \\ \hline
12
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のバージョン}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
50 \label{tab:compiler}
12
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
51 \end{table}
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
52
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
53 計測環境の構築方法については付録に記載する.
12
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
54
500bcb11d251 add server setting
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
55
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
56 \section{読み込みの性能計測}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
57 非破壊的木構造データベース Jungle を用いて, マルチコアプロセッサ上で並列に読み込みを行い, 線形に性能向上ができるか調査する.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
58
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
59 \subsubsection{計測方法}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
60 ブレードサーバ上で, Jungle で作成した木構造を並列に読み込んで性能計測を行う.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
61 まず, Jungle を利用して木構造を作成する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
62 並列に実行する際に, 読み込みに負荷がかかるように木構造はある程度の大きさとする.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
63 今回は木の深さが 8, ノードの数が約 80 万の大きさの木構造を使用する.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
64
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
65 木構造を読み込み, ノードの数を数えるタスクを 1,000 個作成し並列実行する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
66 非破壊的木構造は, 木構造に変更を加えても他の読み込みのタスクに影響を与えない.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
67 そのことを確認するために, 木構造は各タスクに渡す前に無作為にノードを追加する.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
68
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
69 \subsubsection{計測結果}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
70 非破壊的木構造データベース Jungle の読み込みの計測結果を表\ref{tab:par_read}に示す.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
71
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
72 CPUコア数を増やしていくと, 実行時間が短くなっていることが分かる.
51
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
73 シングルスレッドで実行した場合と比較して, 2 スレッドで 1.97 倍, 12 スレッドで 7.17 倍の性能向上が見られる.
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
74 13スレッド以上のハイパースレッディングを用いた計測は, 16スレッド実行時に実行時間が最も短くなる.
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
75 しかし, それ以降遅くなったりするなど安定しない結果となっている.
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
76
52
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
77 Haskell では並列実行時にOSのaffinity(親和性)機能を使ってOSスレッドをCPUコアに固定することができる.
51
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
78 OSスレッドをCPUコアに固定するには, 実行時に-qaオプションを付けてプログラムを起動する.
52
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
79 OSの親和性機能を使った場合, 2 スレッドで 1.80 倍, 12 スレッドで 10.37 倍の性能向上が見られ, 12スレッド時の性能向上率が大幅に伸びている.
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
80 並列に読み込む場合, スレッドを同じプロセッサ上で実行させると性能が向上することがわかる.
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
81 しかし, 24 スレッドで実行する場合, 実行時間が大幅に伸びている.
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
82 スレッドがCPUに固定されるため, 性能計測以外のプログラムがうまくスケジューリングされないためだと考えられる.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
83
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
84 \begin{table}[!htbp]
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
85 \begin{center}
51
20f33c43722d add benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 49
diff changeset
86 \begin{tabular}{|c||r|r|} \hline
53
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
87 CPU数 & 通常実行 & 親和性機能利用\\ \hline
52
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
88 1 & 60.95 s & 61.00 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
89 2 & 30.83 s & 33.95 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
90 4 & 15.49 s & 16.10 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
91 8 & 10.31 s & 8.79 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
92 12 & 8.49 s & 5.88 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
93 16 & 5.82 s & 5.81 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
94 20 & 6.54 s & 5.48 s \\\hline
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
95 24 & 8.21 s & 125.09 s \\\hline
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
96 \end{tabular}
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
97 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
98 \caption{読み込みの計測結果}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
99 \label{tab:par_read}
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
100 \end{table}
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
101
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
102 性能向上率のグラフを図\ref{fig:benchmark_read}に示す.
52
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
103 親和性機能を使わない場合は, 6スレッドまではほぼ線形に性能が向上する.
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
104 親和性機能を使った場合は, 12スレッドまではほぼ線形に性能が向上する.
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
105 ハイパースレッディング機能を用いた13 スレッド以上では性能向上率が落ちる.
9a75333cc202 add read benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 51
diff changeset
106
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
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 \begin{figure}[!htbp]
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
110 \begin{center}
56
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
111 \includegraphics[width=100mm]{./images/read.pdf}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
112 \end{center}
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
113 \caption{読み込みの性能向上率}
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
114 \label{fig:benchmark_read}
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
115 \end{figure}
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
116
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
117 \section{書き込みの性能計測}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
118 非破壊的木構造データベース Jungle を用いて, マルチコアプロセッサ上で並列に書き込みを行い, 線形に性能向上ができるか調査する.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
119
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
120 \subsubsection{計測方法}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
121 ブレードサーバ上で, Jungle に木構造を並列に書き込んで性能計測を行う.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
122 木の深さが 6, ノードの数が約 1 万の大きさの木構造を作成しJungle に登録するタスクを 1,000 個作成し, 並列に実行する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
123 書き込んだ木構造はノードの数が整合しているかどうか確認する. その後正確に書き込まれてるタスクの数を出力する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
124 Haskell は遅延評価のため, 出力などを挟むことで評価が行われるようにしなければならない.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
125
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
126 \subsubsection{計測結果}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
127 非破壊的木構造データベース Jungle の書き込みの計測結果を表\ref{tab:par_write}に示す.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
128
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
129 CPUコア数を増やしていくと, 実行時間が短くなっていることが分かる.
53
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
130 シングルスレッドで実行した場合と比較して, 2 スレッドで 1.79 倍, 12 スレッドで 3.18 倍の性能向上が見られる.
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
131 OSの親和性機能を使った場合, 2 スレッドで 1.61 倍, 12 スレッドで 3.82 倍の性能向上が見られ, 4 スレッド以上では親和性機能を使ったほうが実行時間が短くなる.
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
132 書き込みは, 読み込みと比べるとJungleへの木構造の登録作業があるため並列化率が下がり, 12スレッド時に3.82倍程度の性能向上率となる.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
133
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
134 \begin{table}[!htbp]
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
135 \begin{center}
53
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
136 \begin{tabular}{|c||r|r|} \hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
137 CPU数 & 通常実行 & 親和性機能利用\\ \hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
138 1 & 49.70 s & 49.61 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
139 2 & 27.77 s & 30.76 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
140 4 & 18.06 s & 18.05 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
141 8 & 16.66 s & 12.50 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
142 12 & 15.62 s & 12.96 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
143 16 & 14.91 s & 13.11 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
144 20 & 15.31 s & 13.84 s \\\hline
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
145 24 & 18.11 s & 71.66 s \\\hline
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
146 \end{tabular}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
147 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
148 \caption{書き込みの計測結果}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
149 \label{tab:par_write}
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
150 \end{table}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
151
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
152 性能向上率のグラフを図\ref{fig:benchmark_write}に示す.
53
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
153 Jungle へ木の登録する際に他のスレッドから登録があった場合, ソフトウェア・トランザクショナル・メモリが処理をやり直すため, 並列度が下がっていると考えられる.
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
154 速度向上が親和性機能を使った8スレッド実行時の 3.96 倍で頭打ちになっている.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
155
53
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
156 非破壊的木構造データベース Jungle は, 書き込みは並列化率が低くなってしまう.
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
157 読み込みが高速なため, 書き込みより読み込みが多用されるシステムに向いているといえる.
4675d3e5fee3 add write benchmark
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 52
diff changeset
158
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
159 \begin{figure}[!htbp]
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
160 \begin{center}
56
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 53
diff changeset
161 \includegraphics[width=100mm]{./images/write.pdf}
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
162 \end{center}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
163 \caption{書き込みの性能向上率}
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
164 \label{fig:benchmark_write}
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
165 \end{figure}
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
166
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
167 \clearpage
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
168 \section{Web サービスに組み込んでの性能評価}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
169 並列データベース Jungle が実用的なWeb サービスを提供できるのか調査する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
170 Web掲示板サービスに組み込んで, 性能測定を行った.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
171
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
172 \subsection{Web 掲示板サービスの実装}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
173 木構造データベース Jungle と Haskell の HTTP サーバ Warp\cite{warp} を用いて Web 掲示板サービスを開発する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
174 Warp を用いたWeb サービスの構築法については付録に記載する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
175 Warp は, ハイパースレッディングの効果がなくハイパースレッディング利用時に遅くなるため, 12 スレッドまでの計測とする.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
176
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
177 Warp は並列に実行可能であり, 並列に実行している Warp に対して, Jungle を繋げるだけで Jungle を並列に動かすことができる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
178 掲示板におけるデータベースへの書き込みは, 板の作成と, 板への書き込みがある.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
179 Jungle において, 板の作成は新しい木構造の作成, 板への書き込みは木構造へのノードの追加で表現する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
180 掲示板へ実装した機能を表\ref{tab:bbs_func}に示す.
5
658281be77ec describe the abstract
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
182 \begin{table}[!htbp]
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
183 \begin{center}
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
184 \begin{tabular}{|c||c|} \hline
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
185 関数名 & 概要 \\ \hline \hline
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
186 showBoard & 板の一覧を表示 \\ \hline
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
187 createBoard & 板の作成 \\ \hline
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
188 showBoardMessage & 板への書き込みの一覧を表示 \\ \hline
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
189 createBoardMessage & 板への書き込み \\ \hline
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
190 editMessage & 板への書き込みの編集 \\ \hline
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
191 \end{tabular}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
192 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
193 \caption{Web掲示板サービスへ実装した機能一覧}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
194 \label{tab:bbs_func}
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
195 \end{table}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
196
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
197 \begin{figure}[!htbp]
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
198 \begin{center}
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
199 \includegraphics[width=90mm]{./images/request.pdf}
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
200 \end{center}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
201 \caption{Warp を用いたWeb掲示板サービス}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
202 \label{fig:request}
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
203 \end{figure}
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
204
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
205
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
206 \subsection{読み込み}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
207 \subsubsection{計測方法}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
208 掲示板に対して読み込みを行い, 負荷をかける.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
209 掲示板を立ち上げるサーバと, 性能測定ツール weighttp\cite{weighttp} を用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った.
13
17676e245515 add warp
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
210
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
211 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
212
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
213 \subsubsection{計測結果}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
214
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
215 掲示板の読み込みの計測結果を表\ref{tab:bbs_read}に示す.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
216
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
217 並列で実行した場合, 実行時間が短くなっているが性能向上率が低いことが分かる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
218 シングルスレッドで実行した場合と比較して, 12 スレッドで 2.14 倍の性能向上が見られる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
219 これは HTTP サーバ Warp がボトルネックとなってしまっているためだと考えられる.
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
220
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
221 Warp のボトルネックがどれぐらいあるのか調査するために, アクセスした際に "hello, world" という文字列を返すだけのプログラムを作成し測定する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
222 結果を表\ref{tab:warp}に示す.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
223 1 スレッドで実行した場合は, Jungle と組み合わせた掲示板より速い.
49
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
224 しかし, スレッド数が増えていくと掲示板の読み込みとあまり結果が変わらなくなってしまう.
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
225 Warp は現状あまり並列化効果がでていない.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
226
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
227 \begin{table}[!htbp]
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
228 \begin{center}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
229 \begin{tabular}{|c||r|} \hline
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
230 CPU数 & 実行時間 \\ \hline
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
231 1 & 60.72 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
232 2 & 37.74 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
233 4 & 28.97 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
234 8 & 27.73 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
235 12 & 28.33 s\\ \hline
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
236 \end{tabular}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
237 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
238 \caption{掲示板を利用した読み込みの計測結果}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
239 \label{tab:bbs_read}
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
240 \end{table}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
241
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
242 \begin{table}[!htbp]
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
243 \begin{center}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
244 \begin{tabular}{|c||r|} \hline
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
245 CPU数 & 実行時間 \\ \hline
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
246 1 & 49.28 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
247 2 & 35.45 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
248 4 & 25.70 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
249 8 & 27.90 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
250 12 & 29.23 s\\ \hline
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
251 \end{tabular}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
252 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
253 \caption{Warpの計測結果}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
254 \label{tab:warp}
11
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
255 \end{table}
31df2d4d0e9c add ch04
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
256
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
257 Web サービスを用いて実験する場合, データベースだけがボトルネックとなるように負荷をかけるのは難しい.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
258 ただ単にデータを大きくするだけでは, 文字列をHTMLに変換するコストが大きくなってしまうためである.
21
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 18
diff changeset
259
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
260 \subsection{書き込み}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
261 \subsubsection{計測方法}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
262 掲示板に対して書き込みを行い, 負荷をかける.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
263 掲示板を立ち上げるサーバと, weighttpを用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
264
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
265 weighttpでは, GET しかできないためURLのクエリ文字列でデータを書き込めるようにWeb掲示板サービスを変更した.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
266 weighttp起動時のオプションは, 読み込みと同じである.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
267 \subsubsection{計測結果}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
268
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
269 掲示板の書き込みの計測結果を表\ref{tab:bbs_write}に示す.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
270 並列で実行した場合, 実行時間が短くなっているが性能向上率が低いことが分かる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
271 シングルスレッドで実行した場合と比較して, 12 スレッドで 1.65 倍の性能向上が見られる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
272 読み込みに比べて, 書き込みのほうが全体的に遅くなっている.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
273
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
274 \begin{table}[!htbp]
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
275 \begin{center}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
276 \begin{tabular}{|c||r|} \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
277 CPU数 & 実行時間 \\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
278 1 & 54.16 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
279 2 & 36.71 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
280 4 & 31.74 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
281 8 & 31.58 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
282 10 & 32.64 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
283 12 & 32.68 s\\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
284 \end{tabular}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
285 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
286 \caption{掲示板を利用した書き込みの計測結果}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
287 \label{tab:bbs_write}
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
288 \end{table}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
289
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
290 \subsection{Javaを用いた非破壊的木構造データベースとの比較}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
291 非破壊的木構造データベースは, Haskell 版と Java 版の2つ存在する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
292 Web 掲示板サービスを両方の言語で実装し, 比較を行う.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
293 Haskell ではフロントエンドとして Warp を利用したが, Java では Jetty を利用する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
294 Jetty のバージョンは 6.1.26 を用いる.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
295
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
296 Haskell 版と Java 版の Web 掲示板サービスをブレードサーバ上で実行し,
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
297 weightttpで負荷をかけ100万リクエストを処理するのにかかる時間を計測する.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
298 Haskell と Java の測定結果を表\ref{tab:compare}に示す.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
299
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
300 \begin{table}[!htbp]
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
301 \begin{center}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
302 \begin{tabular}{|c||r|r|} \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
303 測定 & Haskell & Java \\ \hline \hline
15
a551888363cb describe type
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
304 読み込み & 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
305 書き込み & 32.68 s & 76.4 s \\ \hline
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
306 \end{tabular}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
307 \end{center}
42
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 35
diff changeset
308 \caption{HaskellとJavaの比較}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
309 \label{tab:compare}
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
310 \end{table}
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
311
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
312 Haskell 版は, Java 版と比較して読み込みで 1.87 倍, 書き込みで 2.3 倍の性能差が出ている.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
313
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
314 書き込みが読み込みより性能差が出ている理由として遅延評価が考えられる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
315 Haskell では書き込みを行う際, 完全に評価せず thunk として積み上げていく.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
316 thunkとは, 未評価の式を追跡するのに使われるものである.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
317 遅延評価は, グラフ簡約があるため先行評価より簡約ステップ数が増えることはない.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
318 また, 不要な計算が省かれるので簡約ステップ数が少なくなることもある.
49
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
319 しかし, 計算の所用領域が増えてしまうのが難点で,
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
320 ハードウェアが効率的に利用できるメモリの範囲内に収まらなければ即時評価より実行時間が遅くなってしまうことがあるので注意が必要である.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
321 本実験では, 潤沢にメモリを割り当てているためそういった問題は起きない.
14
729ec8d5a16d finish benchmark chapter
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
322
43
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
323 \subsection{書き込みごとに読み込みを行った場合}
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
324 書き込みごとに毎回読み込みを挟むことで, 遅延評価ではなく即時評価させる.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
325 計測結果を表\ref{tab:write_read}に示す.
43
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
326
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
327 \begin{table}[!htbp]
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
328 \begin{center}
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
329 \begin{tabular}{|c||r|} \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
330 CPU数 & 実行時間 \\ \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
331 1 & 141.40 s\\ \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
332 2 & 70.87 s\\ \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
333 4 & 54.32 s\\ \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
334 8 & 55.13 s\\ \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
335 12 & 58.60 s\\ \hline
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
336 \end{tabular}
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
337 \end{center}
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
338 \caption{書き込みを行うたびに読み込みを挟んだ場合の計測結果}
44
7ce8abcf0316 fix label
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 43
diff changeset
339 \label{tab:write_read}
43
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
340 \end{table}
aa6de0f67a0a add files
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
341
47
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
342 結果が明らかに遅くなっている.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
343 12 スレッドで実行した際, Java との書き込みの性能差は, 1.30 倍である.
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 44
diff changeset
344 シングルスレッドで実行した場合と比較した場合, 12 スレッドで 2.40 倍の性能向上が見られる.
49
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
345
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
346 \section{Haskell の生産性}
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
347 Java を用いた Jungle の実装と比較して, コード行数が約 3000 行から約 300 行へと短くなった.
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
348
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
349 Haskell では, 独自のデータ型を作成することができる.
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
350 再帰的なデータ構造の定義も容易である.
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
351 また, Haskellは参照透過性を持つため, コードの再利用が行い易く, 関数同士の結合も簡単である.
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
352
0a8d66c9ccd1 describe the impl
Daichi TOMA <toma@cr.ie.u-ryukyu.ac.jp>
parents: 47
diff changeset
353 同じ機能を実装する場合でも, Java と比較してコード行数が短くなり生産性が向上する.