C.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]
上記の例は、単一ノードの GFS2 ファイルシステムで postmark benchmark を実行中に
cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock
のコマンドによって生成された (約 18 MB のファイルからの) 抜粋です。ここに示した glocks は、glock ダンプの興味深い特徴を示すために選択したものです。
glock の状態は EX (exclusive)、DF (deferred)、SH (shared)、UN (unlocked) のいずれかとなります。これらの状態は、DLM ロックモードに直接対応しています。ただし、DLM が null ロック状態であること、または GFS2 がロックを保持していないことのいずれかを示す UN を除きます (前述したように、I フラグによって異なります)。glock の s: フィールドは、ロックの現在の状態を示し、またホルダーの s:は要求されたモードを示します。ロックが許可された場合、ホルダーは H ビットがフラグ (f: フィールド) に設定されます。そうでない場合には、W (wait) ビットに設定されます。
n: フィールド (number) は各アイテムに関連付けされている番号を示します。glock の場合、これはタイプの番号で、その後に glock 番号が続きます。したがって、上記の例では、最初の glock は n:5/75320 で、inode 75320 に関連付けられた
iopen
glock ということになります。inode と iopen
glock の場合、glock 番号は常に inode のディスクブロック番号と同じです。
注記
debugfs glocks ファイル内の glock 番号 (n: フィールド) は 16 進法ですが、トレースポイントの出力には 10 進法で表示されます。これは、glock 番号がかつてから常に 16 進法 で記述されてきたためですが、トレースポイントの出力は、別のトレースポイント出力 (例:
blktrace
) および stat
(1) からの出力と数値を容易に比較できるようにするために 10 進法 が選択されました。
ホルダーと glock 用のフラグの完全な一覧は 表C.4「glock のフラグ」 および 表C.5「Glock holder flags」 にまとめています。LVB の内容は現在
debugfs
インターフェースで入手することはできません。
表C.3「glock のタイプ」 には、異なる glock のタイプの意味をまとめています。
タイプ番号 | ロックタイプ | 用途 |
---|---|---|
1 | trans | トランザクションのロック |
2 | inode | Inode のメタデータとデータ |
3 | rgrp | リソースグループのメタデータ |
4 | meta | スーパーブロック |
5 | iopen | 最後にinode をクローズしたプロセスの検出 |
6 | flock | flock (2) syscall |
8 | quota | クォータの操作 |
9 | journal | ジャーナルミューテックス |
重要な glock フラグの一つに l (locked) フラグがあります。glock の状態変更を実行する際に glock 状態へのアクセスを回避するために使用するビットロックです。これは、ステートマシンが DLM を介してリモートロック要求が間もなく送信する時に設定され、完全な操作が実行された後のみに消去されます。場合によっては、複数のロック要求が送信されて、その間に様々な無効化が発生していることを意味します。
表C.4「glock のフラグ」 には、異なる 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 | LRU 一覧に glock が記載されるとセットされる |
o | オブジェクト | glock がオブジェクトに関連付けられるとセットされる (type 2 glock の場合 inode、type 3 glock の場合リソースグループ) |
p | Demote in progress | glock は降格要求に応答中 |
q | キュー待ち | glock に対してホルダーがキュー待ちになるとセットされる、glock が行われキュー待ちのホルダーがなくなると消去される、(glock 維持の最小時間を計算するアルゴリズムの一部として使用されます。) |
r | Reply pending | リモートノードから受信した返信の処理の待機中 |
y | Dirty | この glock を解放する前にディスクへのデータのフラッシュが必要 |
ローカルノードで保持されているのと競合するモードでロックを要求するノードからリモートコールバックを受信すると、D (demote) または d (demote pending) のいずれか一方のフラグが設定されます。特定のロックに対する競合が発生している時にスターベーション状態を防ぐには、各ロックに最小保持時間を割り当てます。最小保持時間に達していないノードは、その期間が経過するまでロックを維持することができます。
期間が経過した場合には、D (demote) フラグが設定され、必要な状態が記録されます。その場合、次回にホルダーのキューに許可されたロックがない場合には、そのロックは降格されます。期間が経過していない場合には、代わりに d (demote pending) フラグが設定されます。これにより、最小保持期間が経過した時にステートマシンが d (demote pending) をクリアし D (Demote) を設定するようにもスケジュールされます。
I (initial) フラグは、glock が DLM ロックに割り当てられている場合に設定されます。これは、glock が最初に使用されてから、最終的に解放される (DLM ロックが解除される) まで I フラグが設定された状態が続く場合に発生します。