ファイヤープロジェクト
netpipeの紹介
2003-08-15T22:00+09:00   matsu
netpipe(NETwork Protocol Independent Performance Evaluator)はTCP,MPI,PVMを使用して通信性能を計測するベンチマークである.PCクラスタでの並列計算は多くの場合MPIで行なわれる.したがって,MPIやPVMを使用したnetpipeでの計測結果はnttcpでの計測結果よりも,実際の並列計算に与える影響を反映したものになる(もちろん,nttcpでの計測結果は考察に必要な材料である).
netpipeはプロトコルから独立してネットワーク性能を計測できるツールである.Debianパッケージには
  • netpipe-mpich
  • netpipe-lam
  • netpipe-pvm
  • netpipe-tcp
があるようだ.tccpとnetperfなどをカプセル化しているらしい(どういうことだ?).TCP,MPI,PVMのそれぞれで計測できるため,異なるプロトコルレイヤ間のオーバヘッドを調べたりもできる.より具体的にはnetpipeでは以下を調べることができる.
  • ネットワークのスループット
  • レイテンシ
  • 最適なブロックサイズ
  • 通信のオーバーヘッドがプロトコルの組合せにどの程度依存するか
netpipeは単にメッセージのピンポン伝送を繰り返すだけである.そして一定回数繰り返すとメッセージサイズをちょっとずつ増加させていく.レイテンシはメッセージが行って帰ってきた時間(round trip time)を半分にした時間として計算する.
今回はtcp,lam,mpichを使用して計測をするので,あらかじめlam,mpichをインストールしておく.以下,mpich構築時のメモ.
./configure --prefix=どっか --with-device=ch_p4 --with-arch=LINUX --enable-sharedlib ; make ; make install
そしてlam構築時のメモ.今回のシステムはSMPなので,lamをmakeする際に
export CFLAGS=-D_REENTRANT
しておく.そして
export CFLAGS=-D_REENTRANT ; ./configure --prefix=/home/matsu/usr/local/lam --with-threads --with-rpi=usysv; make ; make install
configureのhelpには--with-threadとあるが--with-threadsが正しい雰囲気.で,本題のnetpipe.まずはtcp用のMakefile
TARGETS    = NPtcp
そしてmpi用のMakefile
TARGETS    = NPmpi
MPI_HOME   = lamかmpichのインストールディレクトリ
でmakeするとNPtcpとかNPmpiができる.ただし,lamの場合は,
NPmpi:  NPmpi.o MPI.o
        $(CC) $(CFLAGS) NPmpi.o MPI.o -o NPmpi  -L $(MPI_HOME)/lib/$(MPI_ARCH)/\
$(MPI_DEVICE) -lmpi -llam -lpmpi $(EXTRA_LIBS)
と-lオプションを足す必要がある気がする.今回はlamの共有ライブラリがなんだかうまくいかなかった(liblam.so: undefined reference to `openpty'とか出る)ので,静的ライブラリを使用.すなわち
NPmpi:  NPmpi.o MPI.o
        $(CC) $(CFLAGS) NPmpi.o MPI.o $(MPI_HOME)/lib/libmpi.a $(MPI_HOME)/lib/liblam.a -o NPmpi
実行方法はtcpとmpiでは異なる.まずはtcp.一方のマシンAで
NPtcp -r
しておいて,もう一方のマシンで
NPtcp -t -h A -o output.data -P
などとする.オプションについて以下に示す.
-A
バッファの連合体の指定.
-a
非同期受信(先に送信して受信?).このオプションはTCPでは無効.
-b
TCPバッファサイズの指定.
-h
受信マシンの指定.
-i
増幅サイズの指定.デフォルトでは実行時に指数関数的に増える.
-l
サイズの下限の指定.
-O
バッファのオフセットの指定
-o
出力ファイルの指定
-P
標準出力にリアルタイム出力をする.
-p
ポートの指定
-r
受信側に付ける.
-s
ストリームオプション.デフォルトでは"ping pong".このオプションを使用するときは送信側と受信側の両方で指定しなければならない.
-t
送信側に付ける.
-u
サイズの上限の指定
次にNPmpiの実行方法.まずlamならlambootしておく.そして
mpirun -machinefile machines -np 2 NPmpi
などとする.NPtcpで示したオプションのうちのいくつかはNPmpiでも指定できる.以下にそれらを示す.
  • -A
  • -a
  • -i
  • -l
  • -O
  • -o
  • -P
  • -s
  • -u
netpipeの出力ファイルはこんな感じになっている.
0.000068 0.111597 8 1 0.000000
0.000070 0.219092 16 2 0.000000
0.000070 0.328070 24 3 0.000000
....
各行はそれぞれ5列からなる.各列の値は順に以下のようになっている.
  1. ブロックの転送にかかった時間
  2. バンド幅(bps)
  3. ブロックあたりのビット数
  4. ブロックあたりのバイト数.
  5. 違い(通信誤り?)
matsu(C)
Since 2002
Mail to matsu