
家のだめマシンもクラスタリングすればどうにかなるのかの実験をしてみたくなった。まぁね、お金を出して解決するよりも今あるものをうまいこと使いましょうという話です。
とにかくやってみないとわからないことが多い。どんなプログラムでは効果的だがどんなプログラムでは効果的でないのか。結局のところ使う人それぞれが別のプログラムを使うわけなので、個々人が試して見なさいということ。それが一番。こういうネタは基本的にああプロンプト帰ってくるまでに時間かなるなぁとか思っていると其の間につい調べちゃうんだよね。
自分で書くプログラムはMPIにせよマルチスレッドやマルチプロセスとか自由に出来るわけなんだけど、出来あいのプログラムってのは変えにくい。でもやっぱり出来合いのプログラムであっても速くなってほしい。そんなときの解決策の一つとしてSSIというものが実用的なら僕はすごくうれしい。
とりあえずキーワードの羅列だけ。openMosix,ClusterKnoppix,OpenSSI,Kerrighed GridEngine,Rocks Clusters,SCore,巫女ぐにょLinuxスイッチングハブ,,SMPマシン(複数のプロセッサをもつマシン),Beowulf
調べた感じだとしたのように5つほど選択肢があるようだ。これらから派生していくつかのディストリビューションがある。ClusterKnoppixは openMosixを組み込んだカーネルを用いたKnoppix。僕にとって重要なのはクラスタの運用中にノードの抜き差しが出来るかどうかだ。
とりあえず上に上げた3つの中で最新の更新のものKerrighedを試してみる。debian etchで環境構築する。まずはInstalling Kerrighed 2.3.0 - Kerrighedをみつつカーネルのコンパイルを行う。なんだか余分なパッケージを大量に入れたような気もするが。
$ su - erter # apt-get install xmlto # apt-get install lsb # apt-get install rsync # apt-get install pkg-config # apt-get install libtool # apt-get install gcc # apt-get install bzip2 # cd /usr/src/ # wget http://kerrighed.gforge.inria.fr/kerrighed-latest.tar.gz # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2 # ls kerrighed-2.3.0.tar.gz linux-2.6.20.tar.bz2 # tar zxf kerrighed-2.3.0.tar.gz # tar jxf linux-2.6.20.tar.bz2 # ls kerrighed-2.3.0 kerrighed-2.3.0.tar.gz linux-2.6.20 linux-2.6.20.tar.bz2 # cd kerrighed-2.3.0 # ./configure --with-kernel=/usr/src/linux-2.6.20 # make patch # make defconfig # make kernel # make # make kernel-install # make install # ls -l /boot/vmlinuz-2.6.20-krg -rw-r--r-- 1 root root 2488432 Jan 4 12:38 /boot/vmlinuz-2.6.20-krg # ls -l /boot/System.map lrwxrwxrwx 1 root root 21 Jan 4 12:38 /boot/System.map -> System.map-2.6.20-krg # ls -l /lib/modules/2.6.20-krg total 52 lrwxrwxrwx 1 root root 21 Jan 4 12:38 build -> /usr/src/linux-2.6.20 drwxr-xr-x 2 root root 4096 Jan 4 12:49 extra drwxr-xr-x 2 root root 4096 Jan 4 12:38 kernel -rw-r--r-- 1 root root 45 Jan 4 12:49 modules.alias -rw-r--r-- 1 root root 69 Jan 4 12:49 modules.ccwmap -rw-r--r-- 1 root root 44 Jan 4 12:49 modules.dep -rw-r--r-- 1 root root 73 Jan 4 12:49 modules.ieee1394map -rw-r--r-- 1 root root 141 Jan 4 12:49 modules.inputmap -rw-r--r-- 1 root root 81 Jan 4 12:49 modules.isapnpmap -rw-r--r-- 1 root root 74 Jan 4 12:49 modules.ofmap -rw-r--r-- 1 root root 99 Jan 4 12:49 modules.pcimap -rw-r--r-- 1 root root 43 Jan 4 12:49 modules.seriomap -rw-r--r-- 1 root root 3217 Jan 4 12:49 modules.symbols -rw-r--r-- 1 root root 189 Jan 4 12:49 modules.usbmap lrwxrwxrwx 1 root root 21 Jan 4 12:38 source -> /usr/src/linux-2.6.20 # ls -l /etc/default/kerrighed -rwxr-xr-x 1 root root 327 Jan 4 12:49 /etc/default/kerrighed # ls -l /lib/modules/2.6.20-krg total 52 lrwxrwxrwx 1 root root 21 Jan 4 12:38 build -> /usr/src/linux-2.6.20 drwxr-xr-x 2 root root 4096 Jan 4 12:49 extra drwxr-xr-x 2 root root 4096 Jan 4 12:38 kernel -rw-r--r-- 1 root root 45 Jan 4 12:49 modules.alias -rw-r--r-- 1 root root 69 Jan 4 12:49 modules.ccwmap -rw-r--r-- 1 root root 44 Jan 4 12:49 modules.dep -rw-r--r-- 1 root root 73 Jan 4 12:49 modules.ieee1394map -rw-r--r-- 1 root root 141 Jan 4 12:49 modules.inputmap -rw-r--r-- 1 root root 81 Jan 4 12:49 modules.isapnpmap -rw-r--r-- 1 root root 74 Jan 4 12:49 modules.ofmap -rw-r--r-- 1 root root 99 Jan 4 12:49 modules.pcimap -rw-r--r-- 1 root root 43 Jan 4 12:49 modules.seriomap -rw-r--r-- 1 root root 3217 Jan 4 12:49 modules.symbols -rw-r--r-- 1 root root 189 Jan 4 12:49 modules.usbmap lrwxrwxrwx 1 root root 21 Jan 4 12:38 source -> /usr/src/linux-2.6.20 # ls -l /etc/default/kerrighed -rwxr-xr-x 1 root root 327 Jan 4 12:49 /etc/default/kerrighed # ls -lR /usr/local/share/man* /usr/local/share/man: total 36 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man1 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man2 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man3 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man4 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man5 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man6 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man7 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man8 drwxr-sr-x 2 root staff 4096 Jan 4 12:49 man9 /usr/local/share/man/man1: total 20 -rw-r--r-- 1 root staff 886 Jan 4 12:49 checkpoint.1 -rw-r--r-- 1 root staff 1314 Jan 4 12:49 krgadm.1 -rw-r--r-- 1 root staff 2334 Jan 4 12:49 krgcapset.1 -rw-r--r-- 1 root staff 813 Jan 4 12:49 migrate.1 -rw-r--r-- 1 root staff 894 Jan 4 12:49 restart.1 /usr/local/share/man/man2: total 12 -rw-r--r-- 1 root staff 1322 Jan 4 12:49 krgcapset.2 -rw-r--r-- 1 root staff 1349 Jan 4 12:49 migrate.2 -rw-r--r-- 1 root staff 1248 Jan 4 12:49 migrate_self.2 /usr/local/share/man/man3: total 0 /usr/local/share/man/man4: total 0 /usr/local/share/man/man5: total 4 -rw-r--r-- 1 root staff 1838 Jan 4 12:49 kerrighed_nodes.5 /usr/local/share/man/man6: total 0 /usr/local/share/man/man7: total 8 -rw-r--r-- 1 root staff 2055 Jan 4 12:49 kerrighed.7 -rw-r--r-- 1 root staff 2900 Jan 4 12:49 kerrighed_capabilities.7 /usr/local/share/man/man8: total 0 /usr/local/share/man/man9: total 0 node01:/usr/src/kerrighed-2.3.0# ls -l /usr/local/bin/krgadm -rwxr-xr-x 1 root staff 21315 Jan 4 12:49 /usr/local/bin/krgadm node01:/usr/src/kerrighed-2.3.0# ls -l /usr/local/bin/krgcapset -rwxr-xr-x 1 root staff 21058 Jan 4 12:49 /usr/local/bin/krgcapset node01:/usr/src/kerrighed-2.3.0# ls -l /usr/local/bin/migrate -rwxr-xr-x 1 root staff 11358 Jan 4 12:49 /usr/local/bin/migrate node01:/usr/src/kerrighed-2.3.0# ls -l /usr/local/lib/libkerrighed.* -rw-r--r-- 1 root staff 36258 Jan 4 12:49 /usr/local/lib/libkerrighed.a -rwxr-xr-x 1 root staff 843 Jan 4 12:49 /usr/local/lib/libkerrighed.la lrwxrwxrwx 1 root staff 21 Jan 4 12:49 /usr/local/lib/libkerrighed.so -> libkerrighed.so.1.0.0 lrwxrwxrwx 1 root staff 21 Jan 4 12:49 /usr/local/lib/libkerrighed.so.1 -> libkerrighed.so.1.0.0 -rwxr-xr-x 1 root staff 28805 Jan 4 12:49 /usr/local/lib/libkerrighed.so.1.0.0 node01:/usr/src/kerrighed-2.3.0# ls -l /usr/local/include/kerrighed total 56 -rw-r--r-- 1 root staff 810 Jan 4 12:49 capabilities.h -rw-r--r-- 1 root staff 840 Jan 4 12:49 capability.h -rw-r--r-- 1 root staff 601 Jan 4 12:49 checkpoint.h -rw-r--r-- 1 root staff 197 Jan 4 12:49 comm.h -rw-r--r-- 1 root staff 1054 Jan 4 12:49 hotplug.h -rw-r--r-- 1 root staff 233 Jan 4 12:49 kerrighed.h -rw-r--r-- 1 root staff 13742 Jan 4 12:49 kerrighed_tools.h -rw-r--r-- 1 root staff 1163 Jan 4 12:49 krgnodemask.h -rw-r--r-- 1 root staff 1459 Jan 4 12:49 proc.h -rw-r--r-- 1 root staff 405 Jan 4 12:49 process_group_types.h -rw-r--r-- 1 root staff 1494 Jan 4 12:49 types.h # mkinitramfs -o /boot/initrd.img-2.6.20-krg 2.6.20-krg # vi /boot/grub/menu.lst default 3 title Debian GNU/Linux, kernel 2.6.20-krg root (hd0,0) kernel /boot/vmlinuz-2.6.20-krg root=/dev/hda1 ro session_id=1 initrd /boot/initrd.img-2.6.20-krg savedefault # ifconfig # echo "session=1">> /etc/kerrighed_nodes # echo "nbmin=1">> /etc/kerrighed_nodes # echo "127.0.0.1:0:lo">> /etc/kerrighed_nodes # cat /etc/kerrighed_nodes session=1 nbmin=1 127.0.0.1:0:lo
とりあえずここまで。まだ動いてはいない。何かがおかしいのだがそれが何かわからない状態。
マシンが増えると、どうにかして全部使いたくなります。まぁリーズナブルな時間、1月とか、かかる計算も、死んでるマシンを追加すれば20日くらいに短縮できるかもしれない。ああ。お金がないって素敵。色々と工夫するから。
せっかくなので、最新版をもらってくる。Sun Grid Engine 6.2を。このときSunのアカウントが必要。古めの版にはアカウント不必要。Linux版をダウンロードしておく。
まずはSGEをインストールするディレクトリを作る。
# mkdir -p /opt/sge62
作ったディレクトリを$SGE_ROOT環境変数にセットする。
# export SGE_ROOT=/opt/sge62
SGEの管理者を作る。
# useradd sgeagmin
ダウンロードしてきたファイル(ここではx86アーキテクチャ)を解凍。
# tar zxf ge62_lx24-x86.tar.gz
コンパイルやテストをした後にコミットしていると、コンパイルとテストに時間がかかってしまう場合にあまり効率が良いとは言えない。ということでCIと呼ばれる考え方がある。それを実現するのにhudsonというソフトがあるそうな。コンパイルとテストの前にどんどんSubversionのようなCVSリポジトリのbranchesにコミットして、hudsonにコンパイルとテスト用のスクリプトを起動させて、コンパイルとテストが成功したら自動的にtrunkにマージするとかの処理を自動的に出来るようにするのかな。
ジョブキューサーバというものもあるわけで、これをやれと命令したらそれが終了するまでシェルが帰ってこないのは嫌なので、やれという命令はいったんキューイングされて、暇になったときに自動的に走らされるということ。これを実現するのが、TheSchwartzかな。
話は変わるけどジョブスケジューラとして、Torqueとかもあるそうな。