C.4. glock debugfs 界面


glock debugfs 界面允许 glock 和 holder 内部状态的虚拟化,同时还包含一些在某些情况下被锁定的对象详情小结。文件的每一行都以 G 打头:无缩进(代表 glock 本身)或者以不同字母打头,缩进一个空格,代表文件中紧挨着它的 glock 关联的结构(H:代表 holder,I:代表内节点,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]
The above example is a series of excerpts (from an approximately 18MB file) generated by the command cat /sys/kernel/debug/gfs2/unity:myfs/glocks >my.lock during a run of the postmark benchmark on a single node GFS2 file system. The glocks in the figure have been selected in order to show some of the more interesting features of the glock dumps.
glock 状态可以是 EX(独家,exclusive)、DF(延迟,deferred)、SH(共享,shared)或者 UN(解锁)。这些状态都直接与 DLM 所模式对应,UN 除外,因为它可能表示 DLM null 锁状态,或者 GFS2 没有 DLM 锁(请参考上面的具体 I 标签解释)。 glock 的 s: 字段表示请求的模式。如果有锁定,则 holder 会在其标签(f: 字段)中有 H 字节。否则它就会有 W(等待)字节。
The n: field (number) indicates the number associated with each item. For glocks, that is the type number followed by the glock number so that in the above example, the first glock is n:5/75320; that is, an iopen glock which relates to inode 75320. In the case of inode and iopen glocks, the glock number is always identical to the inode's disk block number.

注意

debugfs glock 文件中的 glock 数(n: 字段)是十六进制,但跟踪点输出则以十进制列出它们。这是有历史原因:glock 数一直是以十六进制编写,但为跟踪点选择的是十进制数,这样是为了方便与其它跟踪点输出(例如 blktrace 的输出)和 stat(1) 的输出进行比较。
有关 holder 和 glock 标签的完整列表请参考 表 C.4 “Glock 标签”表 C.5 “Glock holder 标签”。glock debugfs 界面中还没有锁值块的内容。
表 C.3 “Glock 类型” 演示了不同 glock 类型的含义。
表 C.3. Glock 类型
类型数锁类型用法
1trans事务锁
2inode内节点元数据和数据
3rgrp资源组元数据
4meta超级块
5iopen内节点最后一次探测
6flockflock(2) syscall
8quota配额操作
9journal日志互斥
最重要的 glock 标签之一是 I(锁定)标签。这是字节锁,是用来在执行状态更改时对 glock 状态进行仲裁访问。在状态机器要通过 DLM 发送远程锁请求时会设置该标签,且只有在完成操作后才会清除。有时这可以意味着已发出一个以上锁请求,在间隔间出现各种无效。
表 C.4 “Glock 标签” 演示了不同 glock 标签的含义。
表 C.4. Glock 标签
标签名称含义
d等待降级递延(远程)降级请求
D降级降级请求(本地或者远程)
f清除日志释放这个 glock 前需要提交该日志
F冻结回复忽略的远程节点 -- 恢复进行中。
i失效进行中正在让这个 glock 中的页面失效
IInitial设定什么时候 DLM 锁与这个 glock 关联
lLockedglock 正在更改状态的过程中
LLRU当 glock 在 LRU 列表中时设置
o对象glock 与某个对象关联时设定(即用于类型 2 glock 的内节点以及用于类型 3 glock 的资源组)
p降级中glock 正在与降级请求响应
q排队的拥有者排队等待 glock 时设定,并在持有 glock 但没有拥有者时清除。是用于计算 glock 最小拥有时间的算法的一部分。
r回复等待从远程节点中接收的回复正在等待过程中
y脏数据释放这个 glock 前要刷新到磁盘的数据
当从以与本地节点冲突的模式获得锁定的某个节点收到远程 callback 时,会设定标签 D(降级)或者 d(降级等待)标签。要防止在竞争具体锁时出现匮乏情况,为每个锁都分配了最小保留时间。如果某个节点的锁没有最小保留时间,则允许保留该锁直到时间间隔过期。
如果时间间隔过期,则会设定 D(demote,降级)标签,并记录请求的状态。这样,下次就不会在 holder 队列中设置锁,该锁就会被降级。如果时间间隔没有过期,那么就会设置 d(降级等待)标签,并在超过最短保留时间时设定 D(降级)标签。
将为 glock 分配 DLM 锁时会为其设置 I(initial)标签。这种情况会在第一次使用 glock 时发生,然后这个 I 标签会一直保留到最终释放 glock(即解开 DLM 锁)为止。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.