OpenMosixによる計算クラスタの構築
何ができるか
複数のコンピュータ(計算クラスタ)間でジョブを交換により負荷分散して、高速にシミュレーションを行える計算環境を構築します。比較的、小さな計算単位を数多く行うシミュレーションに有効です。例えば、通信路の誤り率は、ビットあたりに着目した信号対雑音電力(Eb/N0)の増加により、ある値から急に小さくなります。このカーブを求めるために、ランダムな通信データに対して所定の誤り個数が出た段階で計算を中止しますので、計算の終了時間が読めないことが悩みです。早く計算を終えるため、Eb/N0の違う複数のプログラムを別の計算機で計算させても、すぐに終わるプログラムを実行する計算機の資源が無駄になってしまいます。OpenMosixでクラスタを組めば、自動的に負荷の軽い計算機にてプログラムが実行される(マイグレートと呼びます)ようになるため、無駄がなくなり効率よく計算を行えるようになります。
プログラムを修正する必要がないところがOpenMosixの人気の秘密です。
インストール
ここでは、すでにあるメイン計算機(2CPU)に計算クラスタ(1CPU x 5台)を導入することを考えてみます。メイン計算機のカーネルを再構築して
OpenMosix を使用可能にして、計算クラスタの1台に OpenMosix を導入して、その環境を残りの4台の計算クラスタにコピーし、最後にIPアドレスなどの修正とチューニングを行います。
- 次のソフトウェアをダウンロードする。
- Linux kernel(linux-2.4.22.tar.gz)
Ring server (http://www.ring.gr.jp/) などからカーネル 2.4.22 をダウンロードします。
DebianのdselectでカーネルソースとOpenMosixパッチをダウンロードしてみましたが、カーネルコンパイル時エラーのためカーネルが作成できません。すべてソースからコンパイルしても、
make; make install のみで終わりますので、難しいことはありません。
- OpenMosix (Linuxカーネルへのパッチ)
- OpenMosixTools (設定ツール)
http://openmosix.sourceforge.net/ のダウンロードページにて。
openMosix-kernel-2.4.22-3.tar.gz
openmosix-tools-0.3.5.tar.gz
- OpenMosixView(openmosixview-1.5.tar.gz)
http://www.openmosixview.com/ のダウンロードページにて。メイン計算機のみ。
- mondoarchive (バックアップツール)
dselectにて。計算クラスタのみ。日本語での解説ページはこちら。
- メイン計算機の設定
OpenMosix用にカーネルを再構築します。カーネルの設定項目は次のようにしました。
[*] openMosix process migration support [ ] Support clusters with a complex network topology
[*] Stricter security on openMosix ports
(3) Level of process-identity disclosure (0-3)
[*] openMosix File-System
[*] Poll/Select exceptions on pipes
[ ] Disable OOM Killer
[*] Load Limit
次に、 openmosix-toolsをコンパイルします。configureのオプションに --with-kerneldir=/usr/src/linux
を追加します。
そして、fstab にmfs(複数計算機関でプログラムやデータを共有するためのファイルシステム)のエントリーを追加します。
/etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
mfs_mnt /mfs mfs dfsa=1 0 0
また、メイン計算機、計算クラスタを openmosix.map により設定します。ここでは、メイン計算機のIPアドレスが192.168.3.1、計算クラスタ1から5のIPアドレスがそれぞれ192.168.3.16
から 192.168.3.20 までであるとします。
/etc/openmosix.map
# MOSIX-# IP number-of-nodes
# ============================
1 192.168.3.1 1
2 192.168.3.16 5
- 計算クラスタ1台目の設定
DebianのCD-ROMやネットワークによりソフトウェアをインストールします。sshにてメインコンピュータからログインできるようにします。mfs
によるファイル共有のため、実際の計算に使用するソフトウェアを計算クラスタにインストールする必要はありません。CD-R
1枚に収めるため、あまりソフトウェアを入れないことがポイントです。
そして、メイン計算機と同様に OpenMosix カーネルを作成します。このとき、後に
mondoarchive を動作させられるよう、カーネルオプションで ramdisk と loop
device を有効にします。/etc/modules.conf に「insmod rd」と「insmod loop」を追加します。メイン計算機と同様に
/etc/openmosix.map などを設定して、メイン計算機と計算クラスタ1台の間で動作確認した後、mondoarchiveにて複製を作ります。
まず、ISOイメージを作るディレクトリ(/backup)を作成。
mosrun -h nice mondoarchive -Oi -d /backup -E "/mfs /backup /proc
/root/images" -k FAILSAFE -F
mosrun -h をつけないと、メインコンピュータにマイグレートする可能性があります。ここで、
-E はバックアップから除外するディレクトリ、
-k FAILSAFE はカーネルのパス指定(これをつけないと、CD-R起動時にkernel
panicになります)、
-F は起動用フロッピーディスクを作らない指示です(CDブートができれば起動フロッピーディスクは必要ありません)。
こうしてできた/backup内のイメージファイルをwindowsなどでCD-Rに焼けばCDにて起動できるバックアップディスクができます。
- 計算クラスタ2台目以降の設定
2台目以降は、CD-Rから起動して、nukeを選択すれば1台目の複製ができきます。IPアドレスやホスト名を変更すれば出来上がりです。
- チューニング
はじめに、全ての計算機について、/etc/updatedb.confのPRUNEPATHS="/tmp
..."に/mfsを追加します。負荷をかけると、計算クラスタが6:25に落ちる原因がわからなくて悩みましたが、/etc/crontab
に書かれてる updatedb の実行が原因でした。これは find のデータベースを更新するものですが、ネットワークディレクトリの
/mfs までスキャンするために負荷が過大になり落ちていました。
次にメイン計算機にて、mosctl setspeed xxxx を実行して、なるべくメイン計算機よりも計算クラスタでプログラムを実行するようにします。ここで、xxxx
は申告速度で、例えば 20000 です。計算クラスタ上の mosctl getspeed の数値よりも小さな値にします。
実際の運用
私の計算環境を紹介します。

計算クラスタです。Dellのコンパクトタイプの最小構成
を選択しました。 |

上が各クラスタの負荷状況(openmosixview)、
左下が各プログラムの実行状況(mtop、N#の
欄に実行しているクラスタ番号があります)、
右下がOpenMosixViewの視覚的なプログラム
実行状況です。 |

mtop の実行画面です。octave (行列計算ソフトウェア
Matlab 互換のフリーウェア)が自動的に負荷分散され
ている様子がN#よりわかります。 |
|
関連リンク
計算クラスタの構築にあたり、次のページを参考にしました。
OpenMosix HOWTO 日本語版
OpenMosix クラスタの構築
OpenMosix のカーネルパッチ配布元
OpenMosix ホームページ
Mondoarchve の日本語解説
|