計画の歴史--ハードウェア篇2003B

目次

2003/11/7 Opteron 設定編
2003/11/8 Opteron 設定編の続き
2003/11/9 Opteron 設定編の続きの続き
2003/11/15 ネットワーク周りなど

今回は Opteron cluseter のお話。

2003/11/7 Opteron 設定編

学生A: 今度はどんなことをするんですか?

赤木: 今回のは今のところ GRAPE とは関係ないの。 H さんの科研費で普通の PC クラスタをっていうのを、なんか自分がやるとかいって組むことにしたの ね。

普通に Dual Opteron で Rioworks HDAMA マザーにメモリ 4G とか 8G とか付けるみたいよ。


というわけで、とりあえず組み立て。1台は自分でやってみる。 Opteron の CPU パッケージを開けるのがあまりに大変だったので、残りは若者の力を借り る。若者の力は偉大で、 8 枚分マザー、 CPU、メモリを出して組み立てて、 ゴミ捨てまでで2時間弱。

OS はもちろん Linux なわけだが、 AMD64 をサポートしているディストリビュー ションは Turbo と SuSE くらいしかないはずなので、とりあえず Turbo を入 れてみる。これは人が使う機械なので独立に yp server にするわけだが、そ の辺で既にはまる。 Turbo は割合セキュリティにうるさくて、 ypserv が tcp wrapper を通すとかそういうふうになっているわけだが、これがもちろん というかなんというか良くわからない。 /etc/hosts.allow に

ypserv:ALL
とか書いても駄目。とりあえずなんでも通す設定で OK。あれ、 portmap もつ ければ良かったのかな?で、 turboservice とかいうのを使って自動起動にす ると、 ypserv も ypbind も起動に失敗してくれるので、 /etc/rc.local に 書いてしまう。起動の順番の問題なことは明らかなわけだが、、、

クライアントのほうもなかなか謎。 domainname を誰がいつどこで設定するの か良くわからないので、これもとりあえず rc.local でごまかす。後、 /etc/yp.conf とか /etc/sysconfig/network (NISDOMAIN=...とか書く) をそれらしく設定する必要あり。

と、この辺を解明するのに結構手間取る。

OS のインストールは、今回は福重君から借りた秘密兵器、PC 抜きでハードディ スクのコピーをする機械を使う。 NIS サーバーの設定をまずもう一台にコピー して、それが無事にクライアントになったところで後はどんどんコピーするだ け。

とりあえず、今日は4台コピーができた、、、のかな?

で、組み立てたマザーに電源、キーボード、マウス、ビデオの切換えケーブル をつけて電源を入れると、、、2台目が立ち上がらない。色々調べた結果、 CPU1 のメモリスロット 2/3 にメモリを挿さないと上がる。マザーの不良か電 源容量の不足かは調査中。とりあえず 6GB で動かすことにする。これは3台し かない 8GB 搭載機のはずだったんだが、、、

ちなみに、 HDAMA の eth0 は後ろから見て右(ビデオコネクタから遠いほう)である。これ はマザーの取扱い説明書では 1/2 とある 2 のほう。

明日は残りの4台の設定等。

2003/11/8 Opteron 設定編の続き

DHCP とかで設定するわけではなく固定 IP をマシン毎に設定しているので、 HD をコピーしただけでは駄目でいくつかの設定ファイルを書換える必要があ る。

あと、MPI を入れる必要があるけど r 系コマンドがないぞ、、、 ssh で MPI を動かせというのか?なんか面倒だ。

まあ、その辺はおいておいてとりあえずハードディスクのコピーと設定。これ は特にトラブルなく、、、と思ったら、そうでもない。昨日 8GB でブートし なかった子が、ディスクをつけて Linux 上げると途中でカーネルパニックす る。メモリをどんどん抜くと、、、、とりあえず2GB だとブートするけど、、、 これあかんね。うーむ。

まあ、とにかく8台立ち上げるのが先ということで作業を進める、合間に PGI Fortran のインストールと設定、、、と思ったら、ソフテックのドキュメント を見ると SuSE でしかインストールできないと書いてある。もちろんそんなの は無視してインストールをする。

と、途中で glibc のバージョンが違うとかいう感じのエラーでインストール してくれない。どこで止まっているか調べてみると、 makelocalrc とかいう ものが呼ばれてその中で止まっている。 /lib の下に libc があると思って探 しているが、 Turbo では /lib64 の下なのでそこを修正。これを 2 つある makelocalrc の両方にやると、特に問題なく動くようになる。なかなか素晴ら しい。

でも、簡単なテストプログラムを走らせると ifc でコンパイルしたほうが圧 倒的に速い、、、ちょっと悲しいかも。

後、作業としては

  1. ユーザー用ディスクスペースの作成
  2. MPI のインストール
  3. PGHPF が MPI 上で動作することの確認
と、これくらいか。 MPI までは明日くらいにはできるだろ。 Turbo なんだか ら MPICH くらい入って、、、と思ったら、あれ、そういうのはないのか。ま あ、いれればよかろう。

さて、科研費の名目とはずれるが、やはり K8 がきたからには GRAPE-6 がつ くかどうかが問題である。というわけで、とりあえずデバイスドライバをコン パイルしてみようとすると、良くわからないエラーがでる。試しに 2.4.22 カー ネルをひろってきて、それがモジュールをコンパイルする時に付けてるオプショ ンをつけて、さらに __x86_64 があるので __i386 の代わりにこれを使うよう にすると、、、 おお、コンパイルしますね。 ちなみにオプションはこんなの


CFLAGS =  -D__KERNEL__ -I/usr/src/linux/include -Wall \
  -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing \
  -fno-common -fomit-frame-pointer -mno-red-zone -mcmodel=kernel -pipe \
  -fno-reorder-blocks -finline-limit=2000 -fno-strength-reduce \
  -Wno-sign-compare -fno-asynchronous-unwind-tables -DMODULE  -nostdinc \
  -iwithprefix include -DKBUILD_BASENAME=pcimem -D__SMP__ -DEXPORT_SYMTAB \
  -c -o $@
まあ、ほとんどはいらないと思うけど。

で、 insmod すると、、、入りますね。では G6HIB を挿してブート、、、カー ド認識もしてる。 DMA の動作テストするプログラムを動かすと、、、お、と りあえずクラッシュしないで終わった。でも速度がでないんですが、、、 write 75MB/s read 50MB/s くらい、、、まあ、 AMD だとそんなものかな あ、、、

やはり nF3 か K8T800 のほうがいいかな? Via は PCI 回りは、、、 KT266 は×だったけど KT400A は悪くなかった。というか 8237 の出来が問題なのか。

あれ、それはいいけど(今家で書いてるわけだが)ブレーカ落ちたかな? file server 1台も返事しない、、、かなりやかも。20A では足りないか?だとする と 200V から取るようにしないと駄目か。3号館あと1年ちょっとだから電源工事したくないしな。

とりあえず r 系が動くようにするには、、、 xinetd なので、 /etc/xinetd.d の下の shell, exec, login で disable = no にして xinetd に HANGUP シグナルを送る (kill -HUP pid)。

次はMPICH のインストール。 gcc ではこけるので pgcc で挑戦。ここをみ ながら

  119  1:43    configure --with-device=ch_p4
                --prefix=/opt/mpich/1.2.5.2/pgi-p4 -c++=pgCC -cc=pgcc -fc=pgf77
                -cflags="-Msignextend  -DUSE_U_INT_FOR_XDR -DHAVE_RPC_RPC_H=1"
                -opt=-fast -f90=pgf90 
   120  1:44    make
これで make できた。SMP 2 CPU で通信させてみると、、さすがに 300MB/s くらいはでる。というかそれしかでないのか?という気もするけど。SMP 分 についてはなんか仕掛けがある設定に MPI のほうをする必要があったかな?

2003/11/9 Opteron 設定編の続きの続き

大学に来るとやはりブレーカが落ちている。まあ、ファイルサーバが壊れてな かったのがラッキー。これを別系統に移してブートすると、、、あれ、1台ファ イルシステムが破壊されてら。 結構軟弱、というかデフォルトが ext2 なの ね。 Ext3 に変えればもうちょっといいかな。

とはいえ、今日はファイルサーバーの設定、、、ということで、買ってあった USB2 ハードディスクをつなぐ。電源入れてからつなぐともちろん hotplug と いうか murasaki が動いて認識してくれるわけだが、つないだ状態で boot す ると、、、えーと、認識してるんだけど何故か一旦認識した後モジュールを外 してしまう。ディスク1台ならいいみたいなんだけどなあ、、、

とはいえ、とりあえず mkfs して、、、と思うが、妙に遅い。良く(というほ どのことはなく)みると USB1 でつながっている、、、ありゃ?と思って HDAMA の取扱い説明書を見ると、これは USB1 しか載ってないと書いてある。 しょうがないので秋葉原までいって USB2 のカードを買う。 Greenhouse GH-UIP205 1680円であった。

で、速度はでるようになったが依然起動時には勝手にモジュールが外れる。カー ネルの設定の問題かなあ?と思って素の2.4.22 カーネルを適当に入れると、、、 大当たり。妙なことはしないでちゃんとディスクを認識する。でも、 miurasaki.call とかをいじっても自動マウントはしない。どうせ電源いれっ ぱなしでブートするんだからと、これも rc.local に書く。ちなみに、最近の Linux のマウントは LABEL=xxx というのができて、これは e2label で書く。 例えば、

e2label /dev/sda1 /usbdisk1
とかして、 /etc/fstab には
LABEL=/usbdisk1         /home1                  ext3    noauto          0 0
と書いておけば、これが仮に /dev/sdb1 とか sdc1 になってもちゃんと /home1 にマウントされる。ふむ、 USB ディスクには極めて便利な機能ですね。

後は設定してなかったファイルを色々サーバーからコピー。この辺

/etc/sudoers
/etc/group
/etc/hosts.allow
/usr/bin/sudo
/etc/hosts.equiv
/etc/xinetd.d/shel
/etc/xinetd.d/exec
/etc/xinetd.d/login
sudo はなかったのでとりあえず Vine のをコピー。で、こんな感じのスクリプトを各ノードで実行
cd /
scp makino@hanawa0:/tmp/files-to-copy.tar /tmp
tar xvf /tmp/files-to-copy.tar
/etc/rc.d/init.d/xinetd restart
cat << EOF >> /etc/fstab
hanawa0:/home1		/home1		nfs	bg,rw	0 0
hanawa0:/home2		/home2		nfs	bg,rw	0 0
EOF
cat /etc/fstab
mkdir /home1
mkdir /home2
mount /home1
mount /home2
hanawa0 はサーバーノードの名前。 automount 使うようにしたほうがいいか なあ? で、 hanawa0 は外からの見えるように、、、

と思ったら、ルータがちゃんと動いてくれないような。あれ?間違った設定を してるとは思えないが、、、家の新しいのはちゃんとできてるし。うーん、バ グ? まあ、とりあえずはまだ外からは見えなくてもいいか。 後は HPF が動いてくれれば完了。

しかし、 MPI の通信性能を測ってみると、、、11 MB/s、、、あ、違う、これ は 100BT のハブが入ってるからだ。そうじゃなくてちゃんとGbE のハブ一段 だと、、、


/opt/mpich/mpich-1.2.5.2/bin/mpirun -np 4 mpiperftest2
Process 0 of 2 on hanawa1.astron.s.u-tokyo.ac.jp
Barrier count = 2000 wall clock time = 0.148633  74.316500 us/synch
Allreduce count = 2000 wall clock time = 0.157327  78.663500 us/call
size, count = 1 2000 wall clock time = 0.241359  0.132583 MB/s
size, count = 2 2000 wall clock time = 0.241882  0.264592 MB/s
size, count = 4 2000 wall clock time = 0.243371  0.525946 MB/s
size, count = 8 2000 wall clock time = 0.248440  1.030430 MB/s
size, count = 16 2000 wall clock time = 0.255736  2.002065 MB/s
size, count = 32 2000 wall clock time = 0.275042  3.723068 MB/s
size, count = 64 2000 wall clock time = 0.304699  6.721387 MB/s
size, count = 128 2000 wall clock time = 0.374278  10.943737 MB/s
size, count = 256 2000 wall clock time = 0.443949  18.452570 MB/s
size, count = 512 1953 wall clock time = 0.539925  29.631849 MB/s
size, count = 1024 976 wall clock time = 0.325740  49.090637 MB/s
size, count = 2048 488 wall clock time = 0.247622  64.577396 MB/s
size, count = 4096 244 wall clock time = 0.219608  72.815125 MB/s
size, count = 8192 122 wall clock time = 0.200797  79.636568 MB/s
size, count = 16384 61 wall clock time = 0.201780  79.248607 MB/s
size, count = 32768 30 wall clock time = 0.193731  81.188039 MB/s
size, count = 65536 15 wall clock time = 0.189706  82.910609 MB/s
size, count = 131072 7 wall clock time = 0.178545  82.220527 MB/s
size, count = 262144 3 wall clock time = 0.154331  81.531980 MB/s
size, count = 524288 1 wall clock time = 0.107308  78.173184 MB/s
まあ、 Intel chip ほどはいかないとはいえ、随分いいではないの。

2003/11/15 ネットワーク周りなど

人が使う機械なので外から見えるようにする必要がある。地球シミュレータみ たいに使う人は来いというほど偉いわけじゃないから。で HDAMA には GbE ポー トがそもそも 2 個ついているから、一つをパブリック側につないでおけばい いんだが、なんか設定が面倒な気がしたので御家庭用ルータの port forwarding を使ってみようかと思う。が、これがなかなか失敗で、今使って いる Planex BLW-04EM では port forwarding が何故かうまく動いてくれない。 家で使っている BLW-04FM では出来ているのに、、、というわけで、2ポート 使う構成に変えたら、今度は default route がどうしても設定できない。何 故?

というようなことをしていて面倒になったので、家のと同じものを買ったつも りで BRL-04FM を導入。良く見ると違うものだがまあ大体同じで、無事に port forwarding も動く。一体何故?

まあ、ssh 以外の全てのポートを閉めるとか、そういうのが簡単に設定できる のは悪くない。 これで後は使う人のアカウントを作って、それからなんだっけ?どこに何があ るか書かないと駄目か。