view paper/appendix1.tex @ 28:46a09e9020a3

modify chapter1
author sugi
date Thu, 05 Feb 2015 04:23:37 +0900
parents a27c97e0bb15
children 9d3fadcc379d
line wrap: on
line source

\clearpage
\addcontentsline{toc}{chapter}{付録}
\appendix
\def\thesection{付録\Alph{section}}


\section[ TORQUE Resource Manager を用いた実験方法]{TORQUE Resource Manager を用いた実験方法}
分散環境の実験する際に、学科にある共用のブレードサーバーを用いた。

TORQUE Resource Manager (\url{http://www.adaptivecomputing.com/products/torque.php})というジョブスケジューラーによって、他の利用者とのリソースが競合しないように管理されている。

\subsubsection {TORQUE Resource Manager}
TORQUE は、1台のマスターと複数台のスレーブで構成される。(図 \ref{fig:torque})
スレーブは、マスターへ現在の自身のリソースの利用状況を報告する。

\begin{figure}[htbp]
  \begin{center}
    \includegraphics[width=80mm]{images/torque.pdf}
  \end{center}
  \caption{TORQUE の構成}
  \label{fig:torque}
\end{figure}

ユーザーはマスターを用いてTORQUEを利用する。ジョブを記述したシェルスクリプトを用意し、スケジューラーに投入する。投入するタイミングで、利用したいマシン台数、CPUコア数を指定することができる。
TORQUE は、ジョブに必要なマシンが揃い次第、受け取ったジョブを実行する。

\subsubsection {TORQUE のジョブの書き方}
TORQUEのジョブは、シェルスクリプトにより記述する。
TORQUEのジョブは実行される際に、環境変数が与えられる。
これらの環境変数は、ジョブを投入する際にオプションでも変更することができる。

\begin{itemize}
\item {\ttfamily PBS\_NODEFILE}\\
すべての参加マシンが列挙されているファイルへのパス
\item {\ttfamily PBS\_NUM\_NODES}\\
全ての参加マシン数
\item{\ttfamily PBS\_NUM\_PPN}\\
参加マシン一台あたりのコア数
\item{\ttfamily PBS\_JOBNAME}\\
ジョブの名前
\end{itemize}

ソースコード \ref{src:torque1}はスレーブに、{\ttfamily PBS\_NODEFILE} に記述されているマシン名の順番にログインさせ、hostnameコマンドを実行させる例題である。
\begin{lstlisting}[label=src:torque1, caption=指定されたマシンにログインして hostname コマンドを走らせる例]
function run() {
    while read node
    do
        ssh $node hostname < /dev/null
    done
    wait
}
run < $PBS_NODEFILE
\end{lstlisting}

{\ttfamily PBS\_NODEFILE} の中に含まれるマシン名はコア数分重複しているので扱う際に注意が必要である。

ジョブを投入するには、 qsub コマンドを用いる。(ソースコード \ref{src:torque2})
\begin{table}[html]
\lstinputlisting[label=src:torque2, caption=10台(1台あたり4コア)で走らせる例]{source/Torque.sh}
\end{table}

実際にAliceのリングトポロジーによる実験を行うタスクはソースコード \ref{src:torque5}である

\begin{lstlisting}[label=src:torque5, caption=Alice でリングトポロジーの実験に使ったジョブ]
#!/bin/bash
#
# Alice Ring Topology
#
#PBS -q dque
#PBS -N AliceRingTopology
#PBS -l walltime=00:05:00

alicepath=/home/mass/share/student/k138563
node_num=`expr $PBS_NUM_NODES - 1` # TopologyManager の分を1引く
port=10000    # 利用するポート番号
count=100     # リングを回る回数
size=4096     # リングを回すメッセージのサイズ

function run() {
    read serv
    ssh $serv "ruby $alicepath/ring.rb $node_num > /tmp/ring.dot" < /dev/null
    ssh $serv killall java < /dev/null
    # トポロジーマネージャーの起動
    ssh $serv java -cp $alicepath/Alice.jar alice.topology.manager.TopologyManager -p $port -conf /tmp/ring.dot < /dev/null &
    cnt=0
    while read node # 用意されたスレーブがなくなるまで繰り返す
    do
      ssh $node killall java < /dev/null
      # トポロジーマネージャーに対して参加表明を行う
      ssh $node java -cp $alicepath/Alice.jar alice.test.topology.ring.RingTopology -host $serv -port $port -p $port  -count $count -size $size -nodeNum $node_num < /dev/null &
      cnt=`expr $cnt + 1`
    done
    wait
}

uniq $PBS_NODEFILE /tmp/nodes #重複しているノード名の削除
run < /tmp/nodes
\end{lstlisting}

\newpage
\def\thesection{付録\Alph{section}}
\section[ Topology Manager]{Topology Manager}
Aliceは複数のノードで構成され、相互に接続される。通信するノードはURLにより直接指定するのではなくTopology Managerで管理する。
Topology Managerはトポロジーファイルを読み込み、参加を表明したクライアント(以下、Topology Node)に接続するべきTopology NodeのIPアドレス、ポート番号、接続名を送りトポロジーファイルに記述されたとおりにトポロジーを作成する。(図\ref{fig:topologymanager})

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=70mm]{images/topologymanager.pdf}
\end{center}
\caption{Topology Manager はトポロジーファイルの記述に従ってトポロジーを生成する}
\label{fig:topologymanager}
\end{figure}

CS内部でRemote DSMにアクセスする場合はToplogyManagerによって指定されたノード内部だけで有効なlabel(文字列)を使う。これにより特定のURLがCS内部に記述されることを防いでいる。

トポロジーファイルはグラフ構造を表現するデータ記述する言語の一種であるDOT Languageと呼ばれる言語で記述する。また、dotコマンドを用いてトポロジーファイルを可視化することができる。

\subsubsection{Topology Managerの参加表明処理}
Topology Managerへの参加表明は、Topology Node起動時にコマンドライン引数からTopology ManagerのIPアドレスとポート番号を指定すればよい。

参加表明を行ってからリングトポロジーができるまでのコミュニケーションダイアグラムを示す。
\begin{figure}[htbp]
\begin{center}
\includegraphics[width=100mm]{images/topologymanagerandnode1.pdf}
\end{center}
\caption{参加表明したノードに対して抽象名を返す}
\label{fig:topologymanagerandnode1}
\end{figure}

\begin{enumerate}
\item 指定されたTopology Managerに接続を行うと、Topology Manager側のキー"hosts"に、自分自身のIPアドレスとポート番号をputする。
\item 参加表明を受け取ったTopology Managerは、抽象名を参加表明したTopology Nodeのキー"host"にputする。
\end{enumerate}

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=100mm]{images/topologymanagerandnode2.pdf}
\end{center}
\caption{Topology Nodeは接続すべきNodeの情報をTopology Managerに要求する}
\label{fig:topologymanagerandnode2}
\end{figure}


\begin{enumerate}
\setcounter{enumi}{3}
\item Topology NodeはTopology Managerに対してtakeを行う。指定するkeyは"host"に投入された文字列である。
\item takeへの応答として接続すべきTopology Nodeの情報(IP アドレス、ポート番号等)がreplyされる。
\end{enumerate}


\begin{figure}[htbp]
\begin{center}
\includegraphics[width=100mm]{images/topologymanagerandnode3.pdf}
\end{center}
\caption{リングトポロジーの完成}
\label{fig:topologymanagerandnode3}
\end{figure}
\begin{enumerate}
\setcounter{enumi}{5}
\item replyされた情報に対して接続処理を行う。
\item 3から5を繰り返し行うことでリングトポロジーが完成する。
\end{enumerate}

全ての接続処理が終わるとTopology ManagerからTopology Nodeに対してStart CSの実行命令が出され、アプリケーションが開始される。