10.2. 使用 pminfo 工具显示可用性能指标的信息
pminfo
工具显示有关可用的性能指标的信息。以下示例显示了您可以使用这个工具显示的不同的 GFS2 指标。
10.2.1. 检查每个文件系统目前存在的 glock 结构数
GFS2 glock 指标可让您了解当前挂载的 GFS2 文件系统的 glock 结构数及其锁定状态。在 GFS2 中,glock 是一个数据结构,它将合并 DLM 并缓存到单个状态机器。每个 glock 都有一个与单个 DLM 锁的 1:1 映射,为锁定状态提供缓存,使得在单个节点中进行的重复操作不必重复调用 DLM,从而减少不必要的网络流量。
以下 pminfo
命令按其锁模式显示每个挂载的 GFS2 文件系统的 glocks 数的列表。
# pminfo -f gfs2.glocks
gfs2.glocks.total
inst [0 or "afc_cluster:data"] value 43680
inst [1 or "afc_cluster:bin"] value 2091
gfs2.glocks.shared
inst [0 or "afc_cluster:data"] value 25
inst [1 or "afc_cluster:bin"] value 25
gfs2.glocks.unlocked
inst [0 or "afc_cluster:data"] value 43652
inst [1 or "afc_cluster:bin"] value 2063
gfs2.glocks.deferred
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.glocks.exclusive
inst [0 or "afc_cluster:data"] value 3
inst [1 or "afc_cluster:bin"] value 3
10.2.2. 根据类型检查每个文件系统目前存在的 glock 结构数
GFS2 glstats 指标给出了每种 glock 类型的计数,这些 glock 每个 ystem 文件都存在,它们通常属于内节点(inode 和 metadata)或者资源组(资源组元数据)类型。
以下 pminfo
命令显示了每个挂载的 GFS2 文件系统的每种 Glock 类型数的列表。
# pminfo -f gfs2.glstats
gfs2.glstats.total
inst [0 or "afc_cluster:data"] value 43680
inst [1 or "afc_cluster:bin"] value 2091
gfs2.glstats.trans
inst [0 or "afc_cluster:data"] value 3
inst [1 or "afc_cluster:bin"] value 3
gfs2.glstats.inode
inst [0 or "afc_cluster:data"] value 17
inst [1 or "afc_cluster:bin"] value 17
gfs2.glstats.rgrp
inst [0 or "afc_cluster:data"] value 43642
inst [1 or "afc_cluster:bin"] value 2053
gfs2.glstats.meta
inst [0 or "afc_cluster:data"] value 1
inst [1 or "afc_cluster:bin"] value 1
gfs2.glstats.iopen
inst [0 or "afc_cluster:data"] value 16
inst [1 or "afc_cluster:bin"] value 16
gfs2.glstats.flock
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.glstats.quota
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.glstats.journal
inst [0 or "afc_cluster:data"] value 1
inst [1 or "afc_cluster:bin"] value 1
10.2.3. 检查处于等待状态的 glock 结构数量
最重要的拥有者标志是 H(holder:表示赋予请求的锁定)和 W(wait:等待请求完成时设置)。这些标记分别在赋予锁定请求和锁定请求队列中设置。
以下 pminfo
命令显示每个挂载的 GFS2 文件系统的具有 Wait(W)持有者标签的 glocks 数的列表。
# pminfo -f gfs2.holders.flags.wait
gfs2.holders.flags.wait
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
如果您看到在资源组锁定中排队了大量等待的请求,,那么可能有很多原因。一个原因可能是,在文件系统中,相对于资源组有大量的节点。另一个可能的原因是,文件系统可能接近完全被使用(平均来讲,需要较长的搜索时间)可以通过添加更多存储并使用 gfs2_grow
命令扩展文件系统来改善这两种情况。
10.2.4. 使用基于内核追踪点的指标检查文件系统操作延迟
GFS2 PMDA 支持从 GFS2 内核追踪点收集指标数据。默认情况下,禁用了对这些指标的读取。当收集指标时,激活这些指标会打开 GFS2 内核跟踪点来填充指标值。当启用了这些内核追踪点指标数据时,这可能会对性能吞吐量产生小的影响。
PCP 提供了 pmstore
工具,它允许您根据指标值修改 PMDA 设置。gfs2.control.*
指标允许切换 GFS2 内核追踪点。以下示例使用 pmstore
命令启用所有 GFS2 内核追踪点。
# pmstore gfs2.control.tracepoints.all 1
gfs2.control.tracepoints.all old value=0 new value=1
当运行这个命令时,PMDA 会对 debugfs
文件系统中的所有 GFS2 追踪点进行切换。PCP 中 GFS2 的可用指标的完整列表 中的"Complete Metric List"表解释了每个控制追踪点及其用法,对各个控制追踪点的作用及其可用选项的解释也可通过 pminfo
中的帮助开关获得。
GFS2 提升指标计算文件系统中提升请求的数量。这些请求由第一次尝试时发生的请求数和在初始提升请求后被批准的“others”请求数分开。第一次提升的减少与"other"提升的增加可表示文件争用的问题。
GFS2 降级请求指标(如提升请求指标)统计文件系统中的降级请求数。但是,这些也被分隔为来自当前节点的请求和来自系统中其他节点的请求。来自远程节点的大量降级请求可能会表示给定资源组在两个节点间出现竞争。
pminfo
工具显示有关可用的性能指标的信息。这个过程显示每个挂载的 GFS2 文件系统的 Wait(W)拥有者标签的 glocks 数。以下 pminfo
命令显示每个挂载的 GFS2 文件系统的具有 Wait(W)持有者标签的 glocks 数的列表。
# pminfo -f gfs2.latency.grant.all gfs2.latency.demote.all
gfs2.latency.grant.all
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.latency.demote.all
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
做好的做法是,在工作负载运行时没有问题的情况下观察一般的值,因此当这些值不在正常的范围内时,可以注意到性能的变化。
例如,您可能会看到等待完成的提升请求数量的变化,而不是在第一次请求时就可以完成。您可以从以下命令的输出结果中看到相关的信息。
# pminfo -f gfs2.latency.grant.all gfs2.latency.demote.all
gfs2.tracepoints.promote.other.null_lock
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.tracepoints.promote.other.concurrent_read
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.tracepoints.promote.other.concurrent_write
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.tracepoints.promote.other.protected_read
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.tracepoints.promote.other.protected_write
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.tracepoints.promote.other.exclusive
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
以下命令的输出允许您确定远程降级请求中的大幅增加(特别是如果来自其他集群节点)。
# pminfo -f gfs2.tracepoints.demote_rq.requested
gfs2.tracepoints.demote_rq.requested.remote
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
gfs2.tracepoints.demote_rq.requested.local
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0
以下命令的输出可能会显示,出现无法解释的日志清除数量的增加。
# pminfo -f gfs2.tracepoints.log_flush.total]
gfs2.tracepoints.log_flush.total
inst [0 or "afc_cluster:data"] value 0
inst [1 or "afc_cluster:bin"] value 0