9.4. glock debugfs インターフェイス
glock debugfs
インターフェイスを使用すると、glock とホルダーの内部の状態を視覚化でき、場合によってはロックされたオブジェクトの概要情報も含まれます。ファイルの行がインデントなしで G: で始まる場合は、glock 自体を表します。1 つのスペースでインデントされた別の文字で始まる場合は、ファイル内のすぐ上にある glock に関連する構造 (H: はホルダー、I: は inode、R: リソースグループ) を表します。このファイルの内容の例は、以下のようになります。
G: s:SH n:5/75320 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:EX n:3/258028 f:yI t:EX d:EX/0 a:3 r:4 H: s:EX f:tH e:0 p:4466 [postmark] gfs2_inplace_reserve_i+0x177/0x780 [gfs2] R: n:258028 f:05 b:22256/22256 i:16800 G: s:EX n:2/219916 f:yfI t:EX d:EX/0 a:0 r:3 I: n:75661/219916 t:8 f:0x10 d:0x00000000 s:7522/7522 G: s:SH n:5/127205 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:EX n:2/50382 f:yfI t:EX d:EX/0 a:0 r:2 G: s:SH n:5/302519 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:SH n:5/313874 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:SH n:5/271916 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2] G: s:SH n:5/312732 f:I t:SH d:EX/0 a:0 r:3 H: s:SH f:EH e:0 p:4466 [postmark] gfs2_inode_lookup+0x14e/0x260 [gfs2]
上記の例は、1 つのノードの GFS2 ファイルシステムでポストマークのベンチマークの実行時に、cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock
コマンドにより生成された (約 18MB ファイルからの) 一連の抜粋です。この図の glock は、glock ダンプのより興味深い機能のいくつかを示すために選択されています。
glock の状態は、EX (排他的)、DF (据え置き)、SH (共有)、または UN (ロック解除) になります。この状態は、DLM null ロック状態を表す可能性がある UN を除いて、または GFS2 が DLM ロックを保持しないことを除いて、DLM ロックモードに直接対応します (上記の I フラグにより異なります)。glock の s: フィールドはロックの現在の状態を示し、ホルダーの同じフィールドは要求されたモードを示します。ロックが許可されると、ホルダーのフラグに H ビットが設定されます (f: フィールド)。設定されていない場合は、W wait ビットが設定されます。
N: フィールド (数値) は、各項目に関連付けられた番号を示します。glock の場合、タイプ番号の後に glock 番号が続くため、上記の例では最初の glock は n:5/75320 となり、inode 75320 に関連する iopen
glock を示します。inode と iopen
glock の場合、glock 番号は常に inode のディスクブロック番号と同じになります。
debugfs glock ファイルの glock 番号 (n: フィールド) は 16 進法ですが、トレースポイントの出力には 16 進法で表示されます。これには、これまでの経緯が原因です。glock 番号は常に 16 進法で書かれていますが、トレースポイントに 10 進数が選択されたため、この数字はその他のトレースポイント出力 (blktrace
など) や stat
(1) の出力と簡単に比較できます。
ホルダーと glock の両方に対するフラグの完全一覧は、Glock Flags の表と、Glock ホルダー の Glock Holder Flags の表に記載されています。ロック値のブロックの内容は、現在 debugfs
インターフェイスからは利用できません。以下の表は、さまざまな glock タイプの意味を示しています。
タイプ番号 | ロックタイプ | 使用方法 |
---|---|---|
1 | trans | トランザクションのロック |
2 | inode | inode のメタデータとデータ |
3 | rgrp | リソースグループのメタデータ |
4 | meta | スーパーブロック |
5 | iopen | 最後に閉じた inode の検出 |
6 | flock |
|
8 | quota | クォータ操作 |
9 | journal | ジャーナルミューテックス |
重要な glock フラグの 1 つは、l (locked) フラグです。これは、状態変更が行われるときに glock 状態へのアクセスを調整するのに使用されるビットロックです。これは、ステートマシンが DLM を介してリモートロック要求を送信するときに設定され、完全な操作が実行された場合にのみ消去されます。これは、複数のロック要求が送信され、その間にさまざまな無効化が発生することを意味します。
以下の表は、さまざまな glock フラグの意味を示しています。
フラグ | 名前 | 意味 |
---|---|---|
d | Pending demote | 遅延している (リモートの) 降格要求 |
D | Demote | 降格要求 (ローカルまたはリモート) |
f | Log flush | この glock を解放する前にログをコミットする必要があります。 |
F | Frozen | リモートのノードからの返信が無視されます (復旧が進行中です)。 |
i | Invalidate in progress | この glock の下でページを無効にする過程です。 |
I | Initial | DLM ロックがこの glock と関連付けられる場合に指定します。 |
l | Locked | glock は、状態を変更中です。 |
L | LRU | glock が LRU リストにあるときに設定します。 |
o | Object | glock がオブジェクトに関連付けられている (つまり、タイプ 2 の glock の場合は inode、タイプ 3 の glock の場合はリソースグループ) ときに設定されます。 |
p | Demote in progress | glock は、降格要求に応答中です。 |
q | Queued | ホルダーが glock にキューイングされると設定され、glock が保持されるとクリアされますが、残りのホルダーはありません。アルゴリズムの一部として使用され、glock の最小保持時間を計算します。 |
r | Reply pending | リモートノードから受信した返信の処理を待機中です。 |
y | Dirty | この glock を解放する前にデータをディスクにフラッシュする必要があります。 |
ローカルノードで保持されているノードと競合するモードでロックを取得する必要のあるノードからリモートコールバックを受け取ると、D (降格) または d (降格保留) のフラグのいずれかが設定されます。特定のロックの競合が発生した場合の枯渇状態を防ぐために、各ロックには最小保持時間が割り当てられます。最小保持時間の間にロックされていないノードは、その期間が経過するまでロックを保持できます。
期間が過ぎると、D (降格) フラグが設定され、必要な状態が記録されます。この場合、次にホルダーキューに許可されたロックがなくなると、ロックが降格になります。期間が過ぎていない場合は、代わりに d (降格保留) フラグが設定されます。また、これによりステートマシンが d (降格保留) を消去し、最小保持期間が過ぎた場合に D (降格) を設定します。
glock に DLM ロックが割り当てられている場合は、I (初期) フラグが設定されます。これは、glock が最初に使用され、最終的に glock が解放されるまで (DLM ロックが解除されるまで)I フラグが設定された状態が続く場合に発生します。