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:

Realtek Driver Download

Atheros 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

メモ