大規模Linuxクラスタにおける共有メモリと分散メモリ

ITを利用したビジネスの現場ではLinuxクラスタを構築するのが一般的になっているが、クラスタを使って問題を解決する場合、決まって議論にのぼる概念がある。共有メモリと分散メモリの違いも、その1つである。

NASAエイムズ研究センターのTerascale ProjectリーダーBob Ciotti氏と、SGIのAltixプロダクトマネージャJason Pettit氏によると、共有メモリと分散メモリでは扱う問題が異なるのだそうだ。高度な問題に効率よく取り組むためには、どんなコンピューティングリソースが必要なのか決めなければならない。これは、問題の内容を理解して初めて可能になる。

共有メモリマシンには、ノード、システムディスク、ネットワーク接続がそれぞれ1つずつ存在する。プロセッサを128個あるいは256個搭載したものもあるが、エンドユーザにとってはスループットの高い単一のLinuxマシンにしか見えない。実際にはかなり高性能なマシンにもかかわらずにである。

コモディティクラスタのモデル化

分散メモリは、コモディティクラスタをモデル化したものだ。多数のノードで構成され、各ノードが独自のプロセッサ、システムディスク、ネットワーク接続を持つ。クラスタにはノードの数だけシステムイメージがあり、エンドユーザにとってはネットワーク上で多数のコンピュータが独立して動作しているように見える。

共有メモリマシンは、「細粒度並列コンピューティングジョブ」(Pettit氏)に最適だ。具体的には、問題を構成する各プロセスが他のプロセスの結果に依存するというジョブだ。たとえば、天候シミュレーションを考えてみよう。天候シミュレーションでは、システムがセルという単位に分割される。各タイムスライスが1つのセルを担当し、気圧や気温といったパラメータを他のセルの値に基づいて計算する。1つのセルに処理の遅れが出ると、プロセス全体が遅れることになる。

分散メモリマシンは、「粗粒度」問題に最適だ。具体的には、各ノードが隣接ノードとあまり連携を取らなくても問題の一部を処理できるという問題だ。この方法にぴったりなのが、大規模データベースのマイニングである。各マシンに検索対象のデータセットを与えると、その結果が最大限迅速にメッセージという形で返ってくる。

細粒度問題では、処理能力よりもノード間の連携が求められる。各ノードが他のノードの作業結果に依存するからだ。一方、粗粒度問題では、各ノードの処理能力の方が強く求められる。メッセージの受け渡しという形でノード間の連携が必要になるのはまれだからだ。

ケーススタディ

分散メモリアーキテクチャの例としては、Virginia Techに520万ドルかけて構築されたTerascale Projectクラスタが挙げられる。1,100台のPower Macintosh G5デュアルプロセッサコンピュータをInfiniBandとギガビットイーサネットネットワークで接続している。各マシンは、64ビット2GHzのIBM PPC970プロセッサを2つ搭載している。RAMは4GB、ハードディスクは160GBで、BSDベースのMac OS Xが動作する。

共有メモリアーキテクチャの例としては、256プロセッサ構成をサポートするNASAのSGI Altix 3000が挙げられる。これは、Ciotti氏がNASAエイムズ研究センターで日々監視しているマシンである。プロセッサが最近Intelの64ビット1.5 GHz Itanium IIにアップグレードされたが、RAMは2テラバイトで、カーネル2.4.21にパフォーマンス強化のパッチを当てたRed Hat Linuxが動作する。

Altixを使用しているのは、ECCOプログラムの海洋学者たちだ。海洋の動きをほぼリアルタイムにモデル化している。Altixは、人工衛星やその他の計測装置から送られてきた大量のデータを処理して、海流や風などをシミュレーションする。ECCOは、JPL、MIT、スクリップス海洋学研究所の科学者たちで構成されるコンソーシアムである。

JPLのIchiro Fukumori氏は、Altixのシミュレーションが大切な理由を次のように説明する。「ECCOの分析は、海洋循環のメカニズムを解明するための基礎となります。この解明がやがては天気予報の向上につながります」

各64ビットプロセッサは、AltixのRAMを1つの連続したメモリ空間と見なし、空間内のどのアドレスからでも直接データをロードすることができる。そのために、モジュラー式という方法が取られている。Altixは、バックプレーンと「ブリック」で構成されている。ブリックには、システムディスクやDVDドライブなどが収容されるほか、4つのプロセッサ、2つのメモリコントローラとRAMの一部、あるいはプロセッサブリックを相互接続するルーターが搭載されるものもある。そしてシステム全体では、NUMALink(NUMAはNon-Uniform Memory Accessの略)というSGIのプロプライエタリアーキテクチャを採用し、メモリアクセスのレイテンシを5ナノ秒に抑えている。5ナノ秒というのは、光が約150メートル進むのに要する時間である。

共有メモリアーキテクチャの利点の1つは、海洋学者や物理学者などの科学者がコンピュータサイエンスの専門家でなくてもかまわないという点だ。問題の並列処理はAltixアーキテクチャがやってくれる。Pettit氏は、この点が新しい手法を完成させようとする最先端の科学者に合っていると話す。問題をどのように分割すればクラスタで効率よく処理できるのかということに頭を悩ます必要がなく、モデルやアルゴリズムに専念できるからだ。

解決に向けた問題の分割

コモディティクラスタにも欠点はある。効率よく処理するためには、問題を分割しなければならない点だ。各ノードのRAM、ディスク、ネットワーク接続などのリソースを効率よく使用する必要がある。ノードにギガバイトのRAMを搭載しても、問題のデータセットを適切に分割できなければ、処理効率は高まらない。

分散メモリクラスタが抱えるもう1つの課題は、メッセージの受け渡しだ。各ノードは自身のメモリ空間にしかアクセスできないので、ノード間で連携を取る方法が必要になる。Beowulfクラスタでは、MPI(メッセージパッシングインタフェース)を使ってノード間の連携方法を定めている。しかし、MPIにも課題がある。データのコピーを2つ用意するという点だ。1つはノード上にあり、もう1つは中央のサーバまたは他のノードに送られる。そのため、各ノードが使用しているデータが最新のものかどうかを確かめる手段が必要になる。

それでも、単一ノードのスーパーコンピュータに比べたら、コモディティクラスタは安価である。桁が異なることもあるほどだ。ネットワーク技術とソフトウェアが進化すれば、大規模並列クラスタと専用スーパーコンピュータの用途に違いがなくなってくる。ウィチタのカンザス大学では、コモディティクラスタとAltixの両方を使用している。さらに、独自のキューイングソフトウェアを使って、問題をその種類に応じて適切なコンピュータに振り分けている。

共有するのか、それとも分散するのか。その判断はすべて、解決しようとしている問題にかかっている。

Chris Gulker──シリコンバレーを拠点を置く、フリーランスの科学技術ライターで、1998年から130点以上の記事とコラムを書いている。彼の仕事場には7台のコンピュータとオーストラリアンシェパードと灰色の小さな猫がいる。