diff 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
line wrap: on
line diff
--- a/paper/chapter4.tex	Tue Feb 04 05:14:26 2014 +0900
+++ b/paper/chapter4.tex	Tue Feb 04 06:35:58 2014 +0900
@@ -1,15 +1,17 @@
 \chapter{性能評価}\label{ch:bench}
 本章では、非破壊的木構造データベース Jungle がマルチコアプロセッサで性能向上を果たせるのか確認する。
-まずはじめに、並列読み込みと並列書き込みの性能の計測を行う。
-また、掲示板ウェブアプリケーションを作成し、Java を用いた非破壊的木構造データベースとの性能比較を行う。
+また、実用的なWebサービスが提供できるのか確認するために Web 掲示板サービスを開発し、Java との比較を行う。
 
 \section{計測環境}
 マルチコアプロセッサでの性能を確認するためコア数の多いサーバを用いる。
 本研究では、学科が提供するブレードサーバを用いて、計測環境を構築する。
 ブレードサーバの仕様を表\ref{tab:server_spec}に示す。
 
+論理コアは、Intel のハイパースレッディング機能のことであうr.
+ハイパースレッディングは、1つのプロセッサをあたかも2つのプロセッサであるかのように扱う技術であり、
+同時に演算器などを利用することはできないため性能が2倍になるわけではないが、概ね20 \%程度クロックあたりの性能が向上すると言われている。
+
 \begin{table}[!htbp]
-\caption{学科が提供するブレードサーバの仕様}
 \label{tab:server_spec}
 \begin{center}
 \begin{tabular}{|c||c|} \hline
@@ -21,21 +23,21 @@
 OS & Fedora 14 \\ \hline
 \end{tabular}
 \end{center}
+\caption{学科が提供するブレードサーバの仕様}
 \end{table}
 
 非破壊的木構造データベース Jungle の並列読み込みと並列書き込みの性能の計測には1台、
-掲示板ウェブアプリケーションを用いた Java との性能比較には2台のブレードサーバを利用する。
-2台使用するのは、サーバと負荷をかけるクライアントを別々に実行するためである。
+Web 掲示板 サービスを用いた Java との性能比較には2台のブレードサーバを利用する。
+2 台使用するのは、サーバと負荷をかけるクライアントを別々に実行するためである。
 
 \subsubsection{Haskell および Java のバージョン}
 Haskell のコンパイラには The Glasgow Haskell Compiler(GHC)を使用する。
-GHC は、Haskell で最も広く使われているコンパイラである。
+GHC は、Haskell で最も広く使われているコンパイラである\cite{ghc}。
 ソフトウェア・トランザクショナル・メモリをサポートするなど、並列プログラミングのためのHaskellの拡張が行われている。
 
 Haskell および Java のバージョンを表\ref{tab:compiler}に示す。
 
 \begin{table}[!ht]
-\caption{ベンチマークで利用したHaskellとJavaのバージョン}
 \label{tab:compiler}
 \begin{center}
 \begin{tabular}{|c||c|} \hline
@@ -44,6 +46,7 @@
 Java & Java(TM) SE Runtime Environment (build 1.7.0\_51-b13) \\ \hline
 \end{tabular}
 \end{center}
+\caption{ベンチマークで利用したHaskellとJavaのバージョン}
 \end{table}
 
 計測環境の構築方法については付録に記載する。
@@ -67,14 +70,9 @@
 
 CPUコア数を増やしていくと、実行時間が短くなっていることが分かる。
 シングルスレッドで実行した場合と比較して、2 スレッドで 1.79 倍、12 スレッドで 10.77 倍の性能向上が見られる。
-13 スレッド以上は、Intel のハイパースレッディング機能を利用して計測した。
-ハイパースレッディングは、1つのプロセッサをあたかも2つのプロセッサであるかのように扱う技術である。
-同時に演算器などを利用することはできないため性能が2倍になるわけではないが、概ね20 \%程度クロックあたりの性能が向上すると言われている。
 実際の計測では、13 スレッド以上は、12スレッドより速くなることもあるが、遅くなる場合もあるなど安定しない結果となっている。
 
-
 \begin{table}[!htbp]
-\caption{読み込みの計測結果}
 \label{tab:par_read}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
@@ -89,18 +87,19 @@
 24 & 5.77 s\\ \hline
 \end{tabular}
 \end{center}
+\caption{読み込みの計測結果}
 \end{table}
 
 性能向上率のグラフを図\ref{fig:benchmark_read}に示す。
 線形に近い形で性能が向上していることが分かる。
-12 スレッドで実行した場合の並列化率は 98.96 \%で、非破壊的木構造データベース Jungle は読み込みにおいてスケールするデータベースであることが分かる。
+非破壊的木構造データベース Jungle は読み込みにおいてスケールするデータベースであることが分かる。
 
 \begin{figure}[!htbp]
- \caption{読み込みの性能向上率}
  \begin{center}
   \includegraphics[width=90mm]{./images/read.pdf}
  \end{center}
  \label{fig:benchmark_read}
+ \caption{読み込みの性能向上率}
 \end{figure}
 
 \clearpage
@@ -124,7 +123,6 @@
 
 
 \begin{table}[!htbp]
-\caption{書き込みの計測結果}
 \label{tab:par_write}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
@@ -139,22 +137,23 @@
 24 & 16.63 s\\ \hline
 \end{tabular}
 \end{center}
+\caption{書き込みの計測結果}
 \end{table}
 
 性能向上率のグラフを図\ref{fig:benchmark_write}に示す。
 書き込みは並列化率が低く、性能向上が 4 倍程度で止まっている。
-12 スレッドで実行した場合の並列化率は 80.8 \%である。
 
 \newpage
 \begin{figure}[!htbp]
- \caption{書き込みの性能向上率}
  \begin{center}
   \includegraphics[width=90mm]{./images/write.pdf}
  \end{center}
  \label{fig:benchmark_write}
+ \caption{書き込みの性能向上率}
 \end{figure}
 
-Jungle へ登録する際に他のスレッドから登録があった場合に、ソフトウェア・トランザクショナル・メモリが処理をやり直すため、並列度が下がっていると思われるが、GHCの問題も考えられる。
+Jungle へ木の登録する際に他のスレッドから登録があった場合、ソフトウェア・トランザクショナル・メモリが処理をやり直すため、並列度が下がっていると思われる。
+また、GHC の問題も考えられる。
 GHC の IO マネージャーは、マルチスレッドでうまくスケールしないという問題があり、並列度が下がってしまう。
 GHCの次期バージョンではIO マネージャーが改善され、スケールするようになる見込みである\cite{iomanager}。
 
@@ -163,19 +162,21 @@
 
 \clearpage
 
-\section{ウェブアプリケーションに組み込んでの性能評価}
-実用的なウェブアプリケーションに組み込んで、妥当な性能が出るか調査を行う。
+\section{Web サービスに組み込んでの性能評価}
+並列データベース Jungle が実用的なWeb サービスを提供できるのか調査する。
+Web掲示板サービスに組み込んで、性能測定を行った。
 
-\subsection{掲示板ウェブアプリケーションの実装}
-木構造データベース Jungle と Haskell の HTTP サーバ Warp を用いて掲示板ウェブアプリケーションを開発する。
-Warp を用いたウェブアプリケーションの構築法については付録に記載する。
+\subsection{Web 掲示板サービスの実装}
+木構造データベース Jungle と Haskell の HTTP サーバ Warp\cite{warp} を用いて Web 掲示板サービスを開発する。
+Warp を用いたWeb サービスの構築法については付録に記載する。
+Warp は、ハイパースレッディングの効果がなくハイパースレッディング利用時に遅くなるため、12 スレッドまでの計測とする。
 
+Warp は並列に実行可能であり、並列に実行している Warp に対して、Jungle を繋げるだけで Jungle を並列に動かすことができる。
 掲示板におけるデータベースへの書き込みは、板の作成と、板への書き込みがある。
 Jungle において、板の作成は新しい木構造の作成、板への書き込みは木構造へのノードの追加で表現する。
 掲示板へ実装した機能を表\ref{tab:bbs_func}に示す。
 
 \begin{table}[!htbp]
-\caption{掲示板ウェブアプリケーションへ実装した機能一覧}
 \label{tab:bbs_func}
 \begin{center}
 \begin{tabular}{|c||c|} \hline
@@ -187,8 +188,18 @@
   editMessage & 板への書き込みの編集 \\ \hline
 \end{tabular}
 \end{center}
+\caption{Web掲示板サービスへ実装した機能一覧}
 \end{table}
 
+\begin{figure}[!htbp]
+ \begin{center}
+  \includegraphics[width=90mm]{./images/request.pdf}
+ \end{center}
+ \label{fig:request}
+ \caption{Warp を用いたWeb掲示板サービス}
+\end{figure}
+
+
 \subsection{読み込み}
 \subsubsection{計測方法}
 掲示板に対して読み込みを行い、負荷をかける。
@@ -196,8 +207,6 @@
 
 weighttpの設定は、リクエストの総数 100 万、同時に接続するコネクションの数 1,000、実行時のスレッド数 10、HTTP Keep-Alivesを有効とする。
 
-HTTP サーバ Warp は、ハイパースレッディングの効果がなくハイパースレッディング利用時に遅くなるため、12 スレッドまでの計測とする。
-
 \subsubsection{計測結果}
 
 掲示板の読み込みの計測結果を表\ref{tab:bbs_read}に示す。
@@ -205,14 +214,13 @@
 並列で実行した場合、実行時間が短くなっているが性能向上率が低いことが分かる。
 これは HTTP サーバ Warp がボトルネックとなってしまっているためだと考えられる。
 
-Warp を用いてアクセスした際に、"hello, world"と返すだけのプログラムを作成し測定する。
+Warp のボトルネックがどれぐらいあるのか調査するために、アクセスした際に "hello, world" と返すだけのプログラムを作成し測定する。
 結果を表\ref{tab:warp}に示す。
 1 スレッドで実行した場合は、Jungle と組み合わせた掲示板より速い。
 しかしながら、スレッド数が増えていくと掲示板の読み込みとあまり結果が変わらなくなってしまう。
-Warpは、HTTP サーバのため IO 処理を多用する。この問題は、GHC の IO マネージャーの改良で改善される可能性が高い。
+Warp は現状あまり並列化効果がでていない。
 
 \begin{table}[!htbp]
-\caption{掲示板を利用した読み込みの計測結果}
 \label{tab:bbs_read}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
@@ -224,10 +232,10 @@
 12 & 28.33 s\\ \hline
 \end{tabular}
 \end{center}
+\caption{掲示板を利用した読み込みの計測結果}
 \end{table}
 
 \begin{table}[!htbp]
-\caption{Warpの計測結果}
 \label{tab:warp}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
@@ -239,9 +247,10 @@
 12 & 29.23 s\\ \hline
 \end{tabular}
 \end{center}
+\caption{Warpの計測結果}
 \end{table}
 
-ウェブアプリケーションを用いて実験する場合、データベースだけがボトルネックとなるように負荷をかけるのは難しい。
+Web サービスを用いて実験する場合、データベースだけがボトルネックとなるように負荷をかけるのは難しい。
 ただ単にデータを大きくするだけでは、文字列をHTMLに変換するコストが大きくなってしまうためである。
 
 \subsection{書き込み}
@@ -249,16 +258,15 @@
 掲示板に対して書き込みを行い、負荷をかける。
 掲示板を立ち上げるサーバと、weighttpを用いて負荷をかけるサーバの 2 台ブレードサーバを用いて測定を行った。
 
-weighttpでは、GET しかできないためURLのクエリ文字列でデータを書き込めるように掲示板ウェブアプリケーションを変更した。
+weighttpでは、GET しかできないためURLのクエリ文字列でデータを書き込めるようにWeb掲示板サービスを変更した。
 weighttp起動時のオプションは、読み込みと同じである。
 \subsubsection{計測結果}
 
 掲示板の書き込みの計測結果を表\ref{tab:bbs_write}に示す。
 並列で実行した場合、実行時間が短くなっているが性能向上率が低いことが分かる。
-これも HTTP サーバ Warp がボトルネックとなってしまっているためだと考えられる。
+読み込みに比べて、書き込みのほうが全体的に遅くなっている。
 
 \begin{table}[!htbp]
-\caption{掲示板を利用した書き込みの計測結果}
 \label{tab:bbs_write}
 \begin{center}
 \begin{tabular}{|c||r|} \hline
@@ -271,20 +279,20 @@
 12 & 32.68 s\\ \hline
 \end{tabular}
 \end{center}
+\caption{掲示板を利用した書き込みの計測結果}
 \end{table}
 
 \subsection{Javaを用いた非破壊的木構造データベースとの比較}
 非破壊的木構造データベースは、Haskell 版と Java 版の2つ存在する。
-掲示板ウェブアプリケーションを両方の言語で実装し、比較を行う。
+Web 掲示板サービスを両方の言語で実装し、比較を行う。
 Haskell ではフロントエンドとして Warp を利用したが、Java では Jetty を利用する。
 Jetty のバージョンは 6.1.26 を用いる。
 
-Haskell 版と Java 版の掲示板ウェブアプリケーションをブレードサーバ上で実行し、
+Haskell 版と Java 版の Web 掲示板サービスをブレードサーバ上で実行し、
 weightttpで負荷をかけ100万リクエストを処理するのにかかる時間を計測する。
 Haskell と Java の測定結果を表\ref{tab:compare}に示す。
 
 \begin{table}[!htbp]
-\caption{HaskellとJavaの比較}
 \label{tab:compare}
 \begin{center}
 \begin{tabular}{|c||r|r|} \hline
@@ -293,6 +301,7 @@
   書き込み & 32.68 s & 76.4 s \\ \hline
 \end{tabular}
 \end{center}
+\caption{HaskellとJavaの比較}
 \end{table}
 
 Haskell 版は、Java 版と比較して読み込みで 1.87 倍、書き込みで 2.3 倍の性能が出ている。