2.1. クラスタリングについて−ちょっとした説明

コンピュータは大部分の時間空いています。xload や top のようなシステムの 利用状況をモニタするプログラムを動かせば、恐らくプロセッサのロードの平均 が 1.0 にさえも届かないことがわかるでしょう。コンピュータが 2 台以上ある なら、どんな時でも少なくとも 1 台は何もしていない公算が大きいでしょう。 残念なことに、本当に CPU パワーが必要となる時には− C++ をコンパイルして いる時や Ogg Vorbis の音楽ファイルをエンコードしている時−同時にもっと たくさんの CPU が必要です。クラスタリングの背景にあるアイディアは利用できる すべてのコンピュータに負荷をばらまき、他のマシンで空いているリソースを使う ことです。

クラスタの基本構成は、単独のコンピュータです。これは「ノード」とも呼ばれ ます。クラスタはさらにマシンを追加することで拡張−「サイズ」や「スケール」 という表現をとります−が可能です。クラスタは概して個々のマシンが速いほど、 マシン間の接続速度が高速なほど、パワフルになります。 さらにクラスタのオペレーティングシステムは、状況変化に応じて利用可能な ハードウェアを最大限に活用しなければいけません。クラスタが様々なコンピュータ のタイプから構成される場合(「異種」クラスタ)やクラスタの構成が不用意に 変化し(マシンがクラスタに出たり入ったりする)負荷が事前に予測できないと、 最大限に活用するのにはいっそう多くの困難が伴います。

2.1.1. クラスタリングについて−ちょっとした前置き

2.1.1.1. HPC vs フェイルオーバー vs ロードバランシング

クラスタは 3 タイプあります。フェイルオーバーとロードバランシングと ハイパフォーマンスコンピューティングです。 既設の大部分は、恐らくフェイルオーバーとロードバランシングです。

ロードバランシングとフェイルオーバータイプのクラスタの例として広く 知られているのは、Web システムやデータベース、ファイアーウォールです。 このサービスには 99.99999 % の稼動率が要求されています。インターネットは年中 無休で動いており、もうオフィスが閉まるとサーバを落とすという時代ではありません。

CPU サイクルが必要な場合、ダウンタイムを予定に入れても差し支え ないでしょう。しかしそれは必要な時に最大限のマシンパワーが手に入るケースです。

2.1.1.3. クラスタモデル[(N)UMA, PVM/MPI]

並列処理にはやり方がいくつかあります。(N)UMA、DSM、PVM、MPI がそれで、 様々な並列処理手法をとっています。ハードウェアで実装されているものもあれば、 ソフトウェアによるもの、またはその両者によるものもあります。

(N)UMA ((Non-)Uniform Memory Access)は、コードの実行を共有メモリ上で 行えるマシンの例です。Linux カーネルには NUMA の実装が入っており、異なる 場所にあるメモリへのアクセスタイムに修正を施してあります。CPU に最も近い メモリを使用するのはそれを使っているカーネルの役目です。

DSM、つまり分散共有メモリ(Distributed Shared memory)は、ソフトウェア、ハードウェア両者で実現しています。分散している 物理メモリに対して、仮想レイヤを提供するのがコンセプトです。

PVM と MPI は GNU/Linux ベースの Beowulf を語る時に頻繁に使われるツール です。

MPI はメッセージパッシングインタフェース(Message Passing Interface)の略称です。メッセージパッシングライブラリの標準規格です。 MPICH は MPI の実装の中で一番利用されている実装です。MPICH の次によく 見かけるのが LAM です。MPI ベースの別実装で、ライブラリがフリーでリファレンス 実装されています。

PVM(Parallel Virtual Machine)は MPI の同系統で、Beowulf を構築する ツールとしてよく利用されています。PVM はユーザ空間で動きますので、 カーネルに特別な修正を施す必要はありません。ユーザが十分な権限を持って いれば PVM は動作します。

2.1.1.4. openMosix の位置づけ

openMosix ソフトウェアパッケージを使えば、ネットワークに接続している GNU/Linux が動作しているコンピュータを、1 つのクラスタに変えられます。 クラスタに所属するノード間で自動的に負荷分散します。そしてサービスを 中断することなく、ノードが動作中のクラスタに出たり入ったりできます。 接続速度や CPU 速度に応じて、負荷をノード間に分散します。

openMosix はカーネルの一部であり、Linux と完全互換であるように メンテナンスされています。したがってユーザのプログラムやファイルその他 のリソースは、何も変更することなく動作します。一般ユーザは 1 台の Linux と openMosix システムの区別がつかないでしょう。一般ユーザにとって、クラスタ 全体が 1 台の(高速な)GNU/Linux システムとして機能するからです。

openMosix は IA32 互換のプラットフォームで動く標準的な Linux と完全互換 なカーネルパッチとして用意されます。内部のロードバランシング・アルゴリズム によって透過的にプロセスを他のクラスタのメンバーにマイグレートします。 長所はノード間でロードバランシングがうまく働くことです。クラスタ自身が 稼働率を常時最適化しています(システム管理者は、手動で動作中の自動ロード バランシングを設定変更できます)。

この透過的なプロセス・マイグレーション機能は、クラスタ全体をクラスタ・ノード で利用できるだけのプロセッサを搭載した 1 つの「大きな」 SMP システムのように 見せます(X 台なら X 個プロセッサを積んだシステムになります。 例えば デュアル、クワッドシステムというように)。openMosix は HPC 向けに最適化 されたファイルシステム(oMFS)も用意しています。NFS とは異なり、キャッシュや タイムスタンプ、リンクの整合性があります。