Cluster
このページは、Cluster メモです。
2011/10/03 Update
Cluster Spec (2010/08/24現在)
OS : CentOS 6.0 x86_64 New!!
CPU : AMD Athlon II X4 (Propus)
Master node 640 (3.0GHz)
Slave node 630 (2.8GHz)
Memory : CFD DDR3-1333 8GB (Total 32GB)
Bench mark
MKL Linpack bench mark
2011年08月24日~
4ノード, 16Core, Memory:32GB
理論性能:182.4Gflops
実行性能:120.5Gflops
理論性能比 66.1%
(N=60000、NB=160、P=1、Q=16)
Install, 実行方法等はこちらを参照しました。
ありがとうございます。
修理履歴: (2011年08月26日現在)
Slave2の電源を1度交換。
Slave2のマザーボード故障。(現在使用不可)
Slave3が不安定。(計算し終わった後に通信出来なくなる)
MasterのNICの読み込みが時に不安定。
Slave2のマザーボード交換予定。新しいマザーボード+3.2GHzをマスターノードにして,残りを古いマザーボードにしようと検討中。
最終的に、Newマザーボード+Athlon II X4 640 をマスターノードにして、残りはうまく組み合わせて依存関係が出ないようにしました。
特にNFS、rsh、ネットワーク関連でいくつか変更されたものがあるようでかなり手間取ってしまいました。
しかしながら、なんとかクラスタリングも上手くいき、WRFのインストールも難なくクリアしたのでよしとします!
Slave1がまさかの故障(CPUかマザーボード故障)。
ノード追加時のライブラリのインストールと設定
ライブラリ
rsh のインストール
# yum install rsh
# yum install rsh-server
nfs のインストール
# yum install nfs-utils
NIS のインストール
# yum install ypserv
# yum install ypbind yp-tools
MPICH2のインストール
設定
bonding 関連:
/etc/sysconfig/network-scripts/ifcfg-bond0,
/etc/sysconfig/network-scripts/ifcfg-eth0,
/etc/sysconfig/network-scripts/ifcfg-eth1
rsh 関連:
/etc/hosts,
/etc/hosts.allow,
/etc/hosts.equiv,
/etc/pam.d/rsh,
/etc/pam.d/rlogin
NFS 関連:
/etc/fstab
NIS 関連:
/etc/sysconfig/network,
/etc/yp.conf, /etc/passwd
スタックサイズの解除関連:
/etc/pam.d/rsh,
/etc/pam.d/rlogin
/etc/pam.d/login
/etc/pam.d/rexec
Cluster 起動時
NIC 乗っ取りバグ
起動時にうまく Bonding した NIC が読み込まれない時がある。
機嫌が良い(?)ときは、きちんとうまく読み込んで起動してくれる。
以下、対応表。
⇒ CentOS 6.0からすこぶるNICの認識、ドライバの認識がよくなってくれたので改善されました。
(a) eth0 -> r8168 (外部通信用)
(b) eth1 -> atl1e (オンボードNIC)
(c) eth2 -> r8169 (追加NIC)
(b) と (c)をBondingしている。
解決法 (以下、すべてrootで行う)
(a) r8168 が認識されなかった場合
# /sbin/rmmod r8168 (一度カーネルからNICの情報を削除)
# /sbin/depmod -a (削除した状態をカーネルにすべて反映)
# /sbin/modprobe r8168 (もう一度、カーネルにNICの情報を読み込ませる)
(b) atl1e が認識されなかった場合
# /sbin/rmmod atl1e (一度カーネルからNICの情報を削除)
# /sbin/depmod -a (削除した状態をカーネルにすべて反映)
# /sbin/modprobe atl1e (もう一度、カーネルにNICの情報を読み込ませる)
(c) r8169 が認識されなかった場合
# /sbin/rmmod r8169 (一度カーネルからNICの情報を削除)
# /sbin/depmod -a (削除した状態をカーネルにすべて反映)
# /sbin/modprobe r8169 (もう一度、カーネルにNICの情報を読み込ませる)
※ボンディングする際でも、ifcfg-eth0, ifcfg-eth1 のハードウェアのマックアドレスは消さないほうがいいそうです<=RHEL本家HP参照
またこれだけでなく、/etc/modprobe.conf にaliasを書いておく。
※CentOS 6.0からは、/etc/modprobe.d/modprobe.conf に記述する。
alias bond0 bonding
options bonding mode=0 miimon=100
alias eth0 atl1e
alias eth1 r8169
WRF実行時
mpi の起動
$ mpdstart
--> 実行しているコマンド:
$ mpdboot -v -r rsh -n 4 -f ~/mpd.hosts
mpi 起動確認
$ mpdtrace -l
mpi の終了
$ mpdallexit
real.exe の実行
$ realrun
--> 実行しているコマンド:
$ mpiexec -n 4 -host host0 ./real.exe : -n 4 -host host1 ./real.exe : -n 4 -host host2 ./real.exe : -n 4 -host host3 ./real.exe > /dev/null 2>&1 &
ndown.exe の実行
$ ndownrun
--> 実行しているコマンド:
$ mpiexec -n 4 -host host0 ./ndown.exe : -n 4 -host host1 ./ndown.exe : -n 4 -host host2 ./ndown.exe : -n 4 -host host3 ./ndown.exe > /dev/null 2>&1 &
wrf.exe の実行 (non-background job)
$ wrfrun_test
--> 実行しているコマンド:
$ mpiexec -n 4 -host host0 ./wrf.exe : -n 4 -host host1 ./wrf.exe : -n 4 -host host2 ./wrf.exe : -n 4 -host host3 ./wrf.exe
wrf.exe の実行 (background job)
$ wrfrun
--> 実行しているコマンド:
$ mpiexec -n 4 -host host0 ./wrf.exe : -n 4 -host host1 ./wrf.exe : -n 4 -host host2 ./wrf.exe : -n 4 -host host3 ./wrf.exe > /dev/null 2>&1 &
CPU, Memory の使用状況確認
Cluster における全てのプロセスを見るには,
$ top
特定のユーザ(ここでは, "user1" とする.) のみのプロセスを見るには,
$ top -u user1
rshの便利な利用法
スレーブノードをホストからリモートでシャットダウン
$ su
# rsh host1 telinit 0 ; rsh host2 telinit 0 ; rsh host3 telinit 0 ; rsh host0 telinit 0 ; exit
(上記では, 全4ノード構成で, スレーブ3台を先にシャットダウンさせたあと, ホストをシャットダウンさせる.)
メモリの開放
$ su
# wset1234
--> 実行しているコマンド:
# echo 1 > /proc/sys/vm/drop_caches ; rsh host1 'echo 1 > /proc/sys/vm/drop_caches' ; rsh host2 'echo 1 > /proc/sys/vm/drop_caches' ; rsh host3 'echo 1 > /proc/sys/vm/drop_caches'
# exit
MPICH2
mpi の起動
$ mpdboot -v -r rsh -n 4 -f ~/mpd.hosts
-r : shellの指定
-n : ノード数の指定
-f : ノード情報, CPU数の設定ファイルの指定
mpd.hostsに記述するもの:
host0:4
host1:4
host2:4
host3:4
** それぞれ, 「ホスト名:CPU数」を示す.
mpi で実行
$ mpiexec -n 4 -host host0 ./a.out : -n 4 -host host1 ./a.out : -n 4 -host host2 ./a.out : -n 4 -host host3 ./a.out
-n 4 : コア数指定(4つ)
-host host0 : ホスト名指定(host0)
2ノード以上の計算をさせる場合は, コロンで繋げて書く.
上記の例は, 4node使用し, さらにそれぞれ4コアづつ使用する例.
メモ1:
バックグラウンドジョブにする場合は,
一旦, /dev/null に投げたあと, 2>&1 で標準エラー出力, 標準出力共にバックグラウンドへまわす.
ex)
$ mpiexec -n 4 -host host0 ./a.out : -n 4 -host host1 ./a.out : -n 4 -host host2 ./a.out : -n 4 -host host3 ./a.out > /dev/null 2>&1 &
メモ2:
クラスター系のコマンドをshell scriptにする場合、#!/bin/sh はつけない。
つけてしまうと、親shellに反映されない。
クラスターのOSアップデート時に役立つもの
NICのDriver:
rshのPAM認証について:
http://www.usupi.org/sysad/105.html
http://www.geocities.jp/sugachan1973/doc/funto47.html
ftp://ftp.kernel.org/pub/linux/libs/pam/Linux-PAM-html/index.html