IBM General Parallel File System

General Parallel File System (GPFS) はクラスタコンピューティング向けの分散ファイルシステムである。GPFSはIBMによって開発され、TOP500のリストに含まれる多くのスーパーコンピュータで使われている。

 概要 
GPFSを使用した例にはASC Purpleスーパーコンピュータがあり、12,000以上のプロセッサと11,000以上のディスクによる合計2ペタバイトのディスク記憶容量で構成されている。

他のファイルシステムと比較して、GPFSは多数のクラスターノードで実行されるアプリケーションに対して、同時並行かつ高速なファイルアクセスを提供する。GPFSはAIX 5L クラスター、Linux クラスター、Windows Server、またはAIXやLinuxやWindowsノードのヘテロジニアスクラスターで使用できる。ファイルシステムストレージの能力提供に加え、GPFSはGPFSクラスターの管理ツールを提供し、リモートのGPFSクラスターからのファイルシステムへの共用アクセスを許可できる。

GPFSは1998年にAIX、2001年からはLinux、2008年からはWindows Serverで使用可能となり、IBM System Cluster 1350の一部としても提供されている。

アーキテクチャ
GPFSは多数のノードが並列にファイルデータ、ファイルメタデータにアクセスできるよう設計されている。

データストライピング
一般的に物理ディスクはネットワークに比べて遅いため、高いスループットを実現するためにはデータを複数のディスクにまたがってストライピングするのが有効である。GPFSはLVMに依存することなく、自身でデータのストライピングをサポートしている。GPFSは大きなファイルを複数の同じサイズのブロックに分割して保存する。典型的には一つのブロックは256k（設定によって16kから1M）である。大きなファイルを読み込むときに、GPFSは分散されたディスクからデータを並列にプリフェッチしてバッファに蓄積しておく。同様にバッファに蓄積されているアクセスされなくなった汚れた（書き換えられた）データを並列でディスクに書き戻す。よって一つのファイルへアクセスしたときのスループットは、データを保存する各ディスクの帯域幅の合計またはインターコネクトの帯域幅が上限となる。

分散ロック
GPFSはファイルの同期、一貫性についてPOSIXセマンティックスを保証している。例えば同時に同じファイルにアクセスする2つプロセスが存在するとき、読み込み側のプロセスが見えるデータは書き込みプロセスが書き込んだデータのすべて、若しくはまったく見えないかのどちらかである。読み込みプロセスはデータが中途まで書き込まれた状態を読み込んでしまうことはない。読み込みと書き込みの不可分操作性が保証されている。通常のファイルシステムでは対象をファイル単位でロックすることで、書き込みと読み込みが同時されないようにしている。

GPFSでは分散ロックを用いてファイルの一貫性を保っている。ファイルシステムノードのうち一台がグローバルロックマネージャの役割をはたし、各々のノードはローカルロックマネージャを持っている。グローバルロックマネージャはロックトークンを付与することでローカルロックマネージャ間の調整をする。一つのノードが繰り返し同じファイルへアクセスする時は初めの一回だけロックトークンを獲得すれば、その後ノード間でメッセージ交換をする必要がない。他のノードが同じファイルにアクセスする場合は最初にロックトークンを獲得したノードにロックトークンを要求する。ロックトークンを通さなければファイルのデータを変更できないため、ロックトークンは更にキャッシュの一貫性を保証する役割も果たしている。

並列データアクセス

メタデータ

アロケーションマップ

対故障性

参照

関連項目
 ファイルシステム
 IBM Scale-out File Services


外部リンク
 GPFS official homepage
 GPFS public wiki
 GPFS at Almaden
 Tiger Shark File System
 GPFS Mailing List
 SNMP-based monitoring for GPFS clusters, IBM developerworks, 2007
 Introduction to GPFS Version 3.2, IBM, September 2007.
 General Parallel File System（GPFS）- 日本IBM

Category:OSのファイルシステム
Category:分散処理