もっとも、いっぱいお金を払うつもりならば、 Myrinet を使うという解がありえる。しかし、例えば Pentium 4 でクラスタを組もうという時に、 Myrinet を使うというのは馬鹿げている。現時点(2001/6)では Myrinet カードのほうが P4 の箱 (1CPU) より高いからである。ハブもいれれば 2 倍近い。
もちろん、必要な性能を得る方法が Myrinet しかなければやむを得ないが、これがそうかどうかはなかなか疑問である。例えば、RWCPのページでは、 Myrinet+PM+MPICH でのround-trip レイテンシが 20us となっている。これは素晴らしく速い数字ではあるが、一方 MPI/GAMMA on DE500 でも end-to-end で 15us でるそうである。とすれば、 Myrinet では 10us のところが 15us でいけるわけなので、性能差はそんなに大きくはない。値段は仮に Compaq から買っても DE500 は 2万、 Myrinet は 15万なのであまりに大きな違いがある。さらに 3Com 905 とかでちゃんと動くならもっと安いので、ほとんどただみたいなものである。
なお、スループットとして 100MB/s 程度が欲しいとすれば、 100BT では実現できないし GAMMA は trunking とか難しいことはやってくれないので、 Gigabit Ethernet が使いたくなる。これでまともな性能がでるかどうかはまだチェックできてないので、そのへんは問題。
カーネルを make xconfig なり menuconfig で作り直す時に、DE500 を使うなら tulip も de4x5 も外すこと。 3C905 を使うならそれを外す。 gamma ドライバのほうでなんとかするからである。
で、 gamma を入れる。
このファイルがあれば、
なお、上はもちろんブートのたびに実行する必要がある。私のは Slackware なので /etc/rc.d/rc.local に書き加えた。 RedHut とかでどうするかは知らん。
テストプログラムとしては、 apps/pingpong にある ping_pong でも使ってみる。
SCore ではいかんの?
で、せっかく RWCP で気合いをいれてディストリビュートしているし、 Linux Cluster とかいうなら SCOre でも使えばいいのではないかという考え方もある。使わない理由は以下のようなものである。
まあ、一応最初の理由がメインである。つまり、現状の SCore/PM では Linux の標準のデバイスドライバに手を入れないという原則でやってるので、特にレイテンシには限界があるのである。どうせカーネルから SCore 用にするくらいならデバイスドライバも自分で書くなり手をいれるなりすればいいのにと思うが、、、
GAMMA をインストールする
まず、ハードウェアがいる。 PC 2台とネットワークカード (NIC) である。 DE500 で動くというので、 2114x が載ったカードなら動くのかと甘くみていたら大間違いで、今のところテストした範囲では本物の DE500 (AA, BA) でしか動いてないような気がする。これは例によって auto negotiation あたりの問題らしいので、そのへんのソースをちゃんといじればいいのかもしれない。但し、この「動いてない」というのは私の勘違いの可能性もある。
まあ、手に入りやすいのは 3Com 3C905 で、これでも動くと書いてあるのでこちらを買う方が無難であろう。
次にソースをダウンロードして、 docs/installGAMMA.ps を見ながらなんかすればいいわけだが、現在の版 (
gamma-01-02-21.tar.gz を使った) は kernel 2.2.17 「だけ」でしか動かないので違うのを使ってる人は入れ換えないといけない。
私は以下のようにして入れ換えたらしい。ます、 www.kernel.org から source tar archive をとってくる。で、 /usr/src で
184 cp -p /usr2/makino/data6/PDS/linux-2.2.17.tar.gz .
197 rm linux
198 tar xvfz linux-2.2.17.tar.gz
200 mv linux linux-2.2.17
201 ln -s linux-2.2.17 linux
209 cd linux
211 make menuconfig
212 make dep
213 make clean
214 make install
215 make modules
216 make modules_install
さて、ドキュメントを読むと TCP/IP と GAMMA を 1 枚の NIC で通せるようなことが書いてあるような気もするが、あまりまともに動きそうな気がしないので NIC 2 枚入れることにする。ここで問題が発生する。 Linux だと、 tulip ドライバが認識するカードを使っている人が多いと思う。DE500 を GAMMA で使うならこれはこれはわりあい面倒なことになる。
というのは、 tulip がカーネルに入っていると、 DE500 ももちろん認識してしまう。そうすると GAMMA でいじった de4x5 ドライバが使おうとしても既にとられてしまっているので使えないということになるからである。 Intel eepro100+ とか、とにかく tulip ではないドライバをカーネルに入れて認識するカードを TCP/IP に使えばもちろん問題はない。 安いカードで tulip で使えるものは結構あるので、この点からも GAMMA で使うのは 3C905 がよいような気がする(ただし、私はまだ DE500でしかテストしてない)
115 19:45 cd /opt/gamma
120 19:45 tar xvzf gamma-01-02-21.tar.gz
122 19:46 cd gamma
126 19:46 configure
127 19:47 make
128 19:47 su
で make install して、それからもう一回 kernel を作り直す。
なお、 configure で、 verbose y/n? というのがあるが、少なくとも私がテストした環境では verbose=yes にすると「動かない。」ので注意。
GAMMA をテストする。
とりあえず、 reboot して "GAMMA なんたらかんたら" とブート時にでれば、GAMMA デバイスドライバの認識には成功している。
このあと、いろいろ設定がいる。
まず、 (よくわからないんだが) ifconfig して IP アドレスを与えたり up にしたりしないといけないらしい。 ifconfig -a で eth1 (普通は、、、)を見て、 gamma.conf ファイルを作る。これは、マシン名と ethernet address の対応表である。こんな感じ:
cat /etc/gamma.conf
napa 0x00 0x00 0xF8 0x05 0x87 0x1B
steinberger 0x00 0x00 0xF8 0x06 0x1D 0xDC
":" で区切るんでなく 0xXX 形式で書かないといけないのがちょっとうっとおしい。
これは GAMMA を動かす各機械でいる(ここでは上の 2 台)で、これらを専用のハブを通すなりクロスケーブルをつかうなりしてつなぐ。
ifconfig eth1 192.168.2.202
/usr/local/bin/gammagetconfig
とかで IPアドレス を割り当ててから gammagetconfig を実行すればいいみたい。 IPアドレス はもちろんユニークでないといけない。 DEC DE500 だと、ここまで来て configure で fdx を指定していればハブが(その表示があれば) 100 MB/Full duplex になってるはずである。そうなってないと動く見込みはない。
ping_pong 1
PERFORMANCE (microsec, MB/sec) (best < average < worst):
total send time 2.23784 < 2.329 < 2.59871
send throughput 0.384806 < 0.429369 < 0.446859
total delay 20.4288 < 20.641 < 20.785
end-to-end throughput 0.0481116 < 0.0484472 < 0.0489504
VARIANCE:
send time 0.00767123
end-to-end delay 0.00919892
と、こんなのが出れば万歳!である。出ない時?今一使えないドキュメントを見ながらいろいろやってみる。ちなみに上のでは、 1 バイト送った時のレイテンシが 20 us くらいという結果になっている。
MPI/GAMMA を入れる。
ドキュメントには mpich-1.1.2 ベースと書いてあるので、まずそれをとってきてソースを展開する。
私は以下からとってきた。
ftp://ftp.mcs.anl.gov/pub/mpi/old/mpich-1.1.2.tar.gz
/opt/mpich に入れるとして、こんな感じ
104 18:48 cd /opt/mpich
107 18:48 tar xvzf /usr2/makino/data6/PDS/mpich-1.1.2.tar.gz
111 18:49 tar xvzf /usr2/makino/data6/PDS/MPI-GAMMA/mpi*gz
112 18:49 cd mpich
116 18:50 ./configure -cc=gcc -fc=f77 -cflags=-fomit-frame-pointer -optcc=-O3 -noromio -nompe -lib=/usr/lib/libgamma.a -device=gamma
117 18:50 make
で、 .cshrc なりなんなりで
setenv MPIROOT /opt/mpich/mpich
setenv MPIBIN $MPIROOT/bin
して $MPIBIN をパスに入れればOK。
但し、make の前に README.GAMMA を読んで、「こうすれば速くなる」と書いてあるファイルの入れ替えを実行すること。これをやらないと私のところでは実は動かなかった。
MPI/GAMMA を使う。
これはまあなんということはない。普通の MPICH と同じ。
ちなみに、速度の測定結果はこんな感じ。
これは DE500 でのMPI/GAMMA の転送性能の Compaq MPI, MPICH/p4 (どちらも UP2000 667MHz DU box 内)との比較。共有メモリをちゃんと使った Compaq MPI に比べても 3 倍程度と驚異的に短いレイテンシであるのがわかる。ちなみに GAMMA は P4 1.7GHz と K7 1.2GHz の間の転送だが、あんまり CPU の速度には関係ないらしい。
3C905
3Com 3C905C が入った P4 boxen が来たのでそっちで動かしてみる。eth0 を DEC 2114x にして tulip で動かしていると、3C905C と IRQ がぶつかっていると動かない。まあ、これはスロットを変えるかあるいは根本的には BIOS で IRQ を指定すればいいんだと思われる。