C.3. glocks
GFS2 を理解するにあたって、把握しておくべき最も重要なコンセプトであり、GFS2 と他のファイルシステムを差別化しているのは、glock の概念です。ソースコードの観点から言えば、glock は、DLM とキャッシュ機能を単一のステートマシンにまとめて組み込むデータ構造です。各 glock は、単一 DLM ロックとの間に 1:1 のリレーションシップがあり、そのロック状態用のキャッシュ機能を提供します。このため、ファイルシステムの単一ノードから繰り返し実行される操作で DLM を何度も呼び出す必要がなく、不要なネットワークトラフィックを回避するのに役立ちます。glock には大きく 2 つに分類され、メタデータをキャッシュするものと、そうでないものに分かれます。inode glocks およびリソースグループ glocks はいずれもメタデータをキャッシュしますが、それ以外のタイプの glock はメタデータをキャッシュしません。inode glock は、メタデータ以外にデータのキャッシュにも関与しており、全 glock の中でもロジックが最も複雑です。
glock モード | DLM ロックモード | 注記 |
---|---|---|
UN | IV/NL | ロック解除されています (I フラグに依存する glock または NL ロックに関連付けされた DLM ロックはなし) |
SH | PR | 共有 (読み取り保護) ロック |
EX | EX | 排他ロック |
DF | CW | ダイレクト I/O およびファイルシステムフリーズで使用される遅延 (同時書き込み) |
glock は (他のノードからの要求または仮想マシンから要求を受けて) ロックが解除されて、ローカルユーザーがいなくなるまでメモリーに残ります。その時点で、glock は glock ハッシュテーブルから削除されて解放されます。glock の作成時には、DLM ロックはその glock には即関連付けられません。DLM ロックは、DLM への初回要求時に関連付けられ、その要求が成功した場合には、その glock に 'I' (initial) フラグが設定されます。表C.4「glock のフラグ」 には、各 glock フラグについての説明を記載しています。DLM が glock に関連付けられた後は、glock が解放されるまで、その DLM ロックは少なくとも NL (Null) ロックモードの状態を常時維持します。DLM ロックの NL から unlocked への降格は常に、glock の有効期間における最後の操作となります。
注記
このような DLM ロックの振る舞いの特定の側面は、Red Hat Enterprise Linux 5 から変更されています。Red Hat Enterprise Linux 5 では、glock にアタッチされた DLM ロックが完全に解除されてしまう場合があるため、必要な場合に LVB (Lock Value Block) が保持されるようにするための異なるメカニズムを採用しています。Red Hat Enterprise Linux 6 の新たなスキームは
lock_dlm
ロックモジュールを GFS2 にマージ (DLM 自体と混同されないように) することによって可能となりました。
各 glock には多数の "ホルダー" を関連付けることができます。各ホルダーは、上位からのロック要求を表します。GFS2 に関するシステムコールは、glock からのホルダーをキュー/デキューして、コードの重要なセクションを保護します。
glock 状態のマシンはワークキューをベースとします。パフォーマンスの理由により、タスクレットの方が望ましいですが、現行の実装ではタスクレットの使用を禁止するコンテキストから I/O を送信する必要があります。
注記
ワークキューには独自のトレースポイントがあり、必要に応じて GFS2 のトレースポイントと併用することができます。
表C.2「glock のモードとデータタイプ」 には、各 glock モードでキャッシュされる状態と、キャッシュされた状態がダーティーである可能性があるかどうかについてまとめています。これは、inode とリソースグループロックの両方に適用されます。ただし、リソースグループロックにはデータコンポーネントはなくメタデータのみです。
glock モード | キャッシュデータ | キャッシュメタデータ | ダーティーデータ | ダーティーメタデータ |
---|---|---|---|---|
UN | No | No | No | No |
SH | Yes | Yes | No | No |
DF | No | Yes | No | No |
EX | Yes | Yes | Yes | Yes |