Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

2.9.3. 使用 GFS2 锁定转储排除 GFS2 性能故障

If your cluster performance is suffering because of inefficient use of GFS2 caching, you may see large and increasing I/O wait times. You can make use of GFS2's lock dump information to determine the cause of the problem.
本小节提供 GFS 锁定转储概述。有关 GFS2 锁定转储的详情请参考 附录 C, GFS2 跟踪点和 debug glock 文件
GFS2 锁定转储信息可从 debugfs 文件中获得,您可以根据路径名找到该文件,假设 debugfs 是挂载在 /sys/kernel/debug/ 中:
/sys/kernel/debug/gfs2/fsname/glocks
文件的有多行组成,每个以 G: 开始的行代表一个 glock。接下来的行使用一个空格缩进,代表文件中最新与 glock 关联的信息项目。
当程序出现问题时,使用 debugfs 文件的最佳方法是使用 cat 命令获得该文件内容副本(如果您的 RAM 较大,且有很多缓冲的内节点,则需要较长时间),以后再查看得到的数据。

注意

复制两份 debugfs 文件会很有帮助,两个副本的间隔可在几秒甚至一分钟左右。比较与同一 glock 号关联的两个追踪信息,您可以了解负载是否在增长(就是说只是速度慢了)或者它在哪里卡住了(这通常是由 bug 造成,您应该立即向 Red Hat 支持提交报告)。
Lines in the debugfs file starting with H: (holders) represent lock requests either granted or waiting to be granted. The flags field on the holders line f: shows which: The 'W' flag refers to a waiting request, the 'H' flag refers to a granted request. The glocks which have large numbers of waiting requests are likely to be those which are experiencing particular contention.
表 2.1 “Glock 标签” 显示不同 glock 标签的含义,表 2.2 “Glock 拥有者标签” 按其在 glock 转储中出现的顺序显示不同 glock 拥有者标签的含义。

表 2.1. Glock 标签

标签名称含义
b阻断Valid when the locked flag is set, and indicates that the operation that has been requested from the DLM may block. This flag is cleared for demotion operations and for "try" locks. The purpose of this flag is to allow gathering of stats of the DLM response time independent from the time taken by other nodes to demote locks.
d等待降级递延(远程)降级请求
D降级降级请求(本地或者远程)
f清除日志释放这个 glock 前需要提交该日志
F冻结忽略来自远程节点的回复 - 正在恢复。这个标签与文件系统停滞无关,它使用不同的机制,但只用于恢复。
i使进程无效这个 glock 下无效页面的进程中
I启动设定何时将 DLM 锁定与这个 glock 关联
l锁定的这个 glock 处于更改状态中
LLRU当 glock 在 LRU 列表中时设置
o对象glock 与某个对象关联时设定(即用于类型 2 glock 的内节点以及用于类型 3 glock 的资源组)
p降级中该 glock 正在响应降级请求
q排队的拥有者排队等待 glock 时设定,并在持有 glock 但没有拥有者时清除。是用于计算 glock 最小拥有时间的算法的一部分。
r回复等待从远程节点中接收的回复正在等待过程中
y脏数据释放这个 glock 前要刷新到磁盘中的数据

表 2.2. Glock 拥有者标签

标签名称含义
aAsync不等待 glock 结果(以后轮询结果)
A任意接受所有兼容锁模式
c没有缓存取消锁定时立即降级 DLM 锁定
e没有过期日期忽略之后的锁定取消请求
E准确必须有准确的锁定模式
F第一设定赋予这个锁定的第一个拥有者
H拥有者表示赋予请求的锁定
p优先权在队列头入队的拥有者
t尝试A "try" lock
TTry 1CBA "try" lock that sends a callback
W等待等待请求完成的设置
确定造成问题的 glock 后,下一步是要找到关联的内节点。glock 号(G: 行中的 n:)指的就是这个,其格式为 type/number,如果 type 是 2,那么 glock 就是一个内节点 glock,且 number 就是内节点号。要追踪内节点,您可以运行 find -inum number,其中 number 是将 glock 文件中的十六进制格式转换为十进制格式的内节点号。

注意

如果您在有锁定冲突的文件系统中运行 find,事情可能会变得更糟糕。当您查找冲突的内节点时,最好在运行 find 前停止该程序。
表 2.3 “Glock 类型” 显示不同 glock 类型含义。

表 2.3. Glock 类型

类型号1使用
1Trans事务锁定
2内节点内节点元数据和数据
3Rgrp资源组元数据
4Meta超级块
5Iopen内节点的最近探测
6Flockflock(2) 系统调用
8Quota配额操作
9Journal日志互斥
如果识别的 glock 是不同的类型,那么最可能是类型 3:(资源组)。如果您在正常负载情况看到大量进程正在等待其他 glock 类型,请向 Red Hat 支持提交报告。
如果您看到在资源组锁定中有大量等待的请求,那么可能有很多原因。其中之一是在文件系统中相对于资源组有大量的内节点。另一个原因就是该文件系统可能接近饱和(按平均计算,需要较长的搜索)。在这两种情况下可通过添加更多存储以及使用 gfs2_grow 命令扩大该文件系统进行改善。