bionic (8) glocktop.8.gz

Provided by: gfs2-utils_3.1.9-2ubuntu1_amd64 bug

NAME

       glocktop - Display or print active GFS2 locks.

SYNOPSIS

       glocktop [OPTIONS]

DESCRIPTION

       The glocktop tool is used to display active GFS2 inter-node locks, also known as glocks. Simply put, it's
       a tool to filter and interpret the contents of the glocks debugfs file. The glocks debugfs file shows all
       glocks  known to GFS2, their holders, and technical data such as flags.  The glocktop tool will only show
       the glocks that are important: glocks that are being held  or  for  which  there  are  waiters.  It  also
       interprets the debugfs file of DLM (Distributed Lock Manager).

OPTIONS

       -d <delay>
              Specify a time delay (in seconds) between reports. (Default is 30 seconds)

       -h     Print help information.

       -i     Interactive  mode.  In this mode, glocktop acts more like the top command.  It shows the pertinent
              glocks on the terminal session (as many as it can fit). The advantage is that  it  uses  different
              colors to draw attention to what's important. The disadvantage is that it's limited by the size of
              your display, so you may not see all the glocks.

       -D     Omit DLM status. This may be used to reduce the amount of output for interactive mode.

       -n <iterations>
              End the program after the specified number of iterations (reports). The default is to keep running
              until interrupted.

       -r     Show  resource  group reservation information. Normally, glocktop omits resource group reservation
              information to condense the output. This information is only important when debugging  information
              related to the GFS2 block allocator and file system fragmentation.

       -s <freq>
              Print  glock summary information every <freq> reports.  The glock summary information is bulky and
              often not needed, so it's only printed once every 10 reports. You can eliminate it  entirely  from
              the  output  by  specifying  a value of 0. If you want the statistics to print after every report,
              specify freq as 1.

       -t     Trace directory path. A lot of GFS2 glock performance problems  are  caused  by  an  application's
              contention  for one or two directories. These show up as regular inodes in the output, but there's
              no good way to tell from the output which directory is contended. Ordinarily, glocktop  won't  try
              to  look  up the full pathname of a contended directory because it's slow, especially if there are
              millions of glocks. This option instructs glocktop to try to determine  the  full  directory  path
              names  when  it  can,  so  you  can  tell  the  full  path  (within  the mount point) of contended
              directories.

       -H     Don't show Held glocks, unless there are also waiters for the  lock.   Ordinarily,  glocktop  will
              show  glocks that are held (but not iopen glocks which are almost always held by the thousands) as
              well as glocks for which there are waiters. If it only showed glocks with waiters, you could  see,
              for example, that a glock is being blocked on one node, but you couldn't see the information for a
              different node currently holding the lock and  thus,  blocking  the  waiter.  This  option  forces
              glocktop to stop printing information for glocks with no waiters (on that node).  The advantage is
              that the output is smaller and easier to  look  at.   The  disadvantage  is  that  you  can't  see
              information  from  the  node  that's blocking the waiter, unless both waiter and holder are on the
              same node.

OUTPUT LINES

       @ name This is the GFS2 file system name for which the information is printed. It  also  gives  the  time
              stamp of the report, and the cluster node name.

       G:     This line represents a glock (internode GFS2 lock).
               G:  s:UN n:2/609b4 f:lIqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)

       D:     This line gives you glocktop's interpretation of the glock's state as far as DLM (distributed lock
              manager) is concerned.
                D: Granted PR on node 2 to pid 17511 [python]

       H:     This line represents a glock holder: a process that's either holding the glock, or is  waiting  to
              hold  it.  The  value  after  S:  represents  how  this  holder needs the lock: EX (Exclusive), SH
              (Shared), PR (Protected Read), or UN (Unlocked). The value after F: indicates the holder flags:  a
              W  indicates  the  holder  is  Waiting  for  the  lock to be granted. An H indicates the holder is
              currently holding the lock.
                H: s:EX f:W e:0 p:17511 [python] gfs2_unlink+0x7e/0x250 [gfs2]

       U:     These lines represent glocktop's user interpretation of the data, both  glock  and  holder.  Lines
              that  begin  with  (N/A:...)  can probably be ignored because they ought to be unimportant: system
              files such as journals, etc.
                U:  W inode      183f5     Is:Shared, Want:Exclusive   [Demote pending, Reply  pending,  Queued,
              Blocking]
                U:  W  --->  waiting pid 17511 [python]  (Granted PR on node 2 to pid 17511 [python])

       C:     These  lines  give you the call trace (call stack) of the process that's either holding or waiting
              to hold the glock.

       S      These lines give you the summary of all glocks for this file system: How many of each category are
              unlocked,  locked, how many are held in EX, SH, and DF, and how many are waiting. G Waiting is how
              many glocks have waiters. P Waiting is how many processes are waiting. Thus, you  could  have  one
              glock that's got ten processes waiting, or ten glocks that have ten processes waiting.

EXAMPLE OUTPUT

              # glocktop

              @ nate_bob1       Wed Jan 27 07:24:14 2016  @host-050
               G:  s:EX n:9/1 f:Iqb t:EX d:EX/0 a:0 v:0 r:2 m:200 (journal)
                D: Granted EX on node 2 to pid 17468 [ended]
                H: s:EX f:eH e:0 p:17468 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
                U: (N/A:Journl)  H journal    1         Held:Exclusive   [Queued, Blocking]
                U: (N/A:Journl)  H  --->  held by pid 17468 [(ended)]  (Granted EX on node 2 to pid 17468 [ended])
               G:  s:SH n:1/1 f:Iqb t:SH d:EX/0 a:0 v:0 r:2 m:200 (non-disk)
                D: Granted PR on node 2 to pid 17468 [ended]
                H: s:SH f:eEH e:0 p:17468 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
                U: (N/A:Not EX)  H non-disk   1         Held:Shared   [Queued, Blocking]
                U: (N/A:Not EX)  H  --->  held by pid 17468 [(ended)]  (Granted PR on node 2 to pid 17468 [ended])
               G:  s:EX n:2/181ec f:yIqob t:EX d:EX/0 a:1 v:0 r:3 m:200 (inode)
                D: Granted EX on this node to pid 17468 [ended]
                H: s:EX f:H e:0 p:17468 [(ended)] init_per_node+0x17d/0x280 [gfs2]
                I: n:12/98796 t:8 f:0x00 d:0x00000201 s:24
                U: (N/A:System)  H inode      181ec     Held:Exclusive   [Dirty, Queued, Blocking]
                U: (N/A:System)  H  --->  held by pid 17468 [(ended)]  (Granted EX on this node to pid 17468 [ended])
               G:  s:EX n:2/181ed f:Iqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
                D: Granted EX on this node to pid 17468 [ended]
                H: s:EX f:H e:0 p:17468 [(ended)] init_per_node+0x1b0/0x280 [gfs2]
                I: n:13/98797 t:8 f:0x00 d:0x00000200 s:1048576
                U: (N/A:System)  H inode      181ed     Held:Exclusive   [Queued, Blocking]
                U: (N/A:System)  H  --->  held by pid 17468 [(ended)]  (Granted EX on this node to pid 17468 [ended])
               G:  s:SH n:2/183f5 f:ldrIqob t:EX d:UN/0 a:0 v:0 r:5 m:10 (inode)
                D: Granted PR on node 2 to pid 17511 [python]
                H: s:EX f:W e:0 p:17511 [python] gfs2_unlink+0x7e/0x250 [gfs2]
                I: n:1/99317 t:4 f:0x00 d:0x00000003 s:2048
                U:  W inode      183f5     Is:Shared, Want:Exclusive   [Demote pending, Reply pending, Queued, Blocking]
                U:  W  --->  waiting pid 17511 [python]  (Granted PR on node 2 to pid 17511 [python])
                C:              gfs2_unlink+0xdc/0x250 [gfs2]
                C:              vfs_unlink+0xa0/0xf0
                C:              do_unlinkat+0x163/0x260
                C:              sys_unlink+0x16/0x20
               G:  s:SH n:2/805b f:Iqob t:SH d:EX/0 a:0 v:0 r:3 m:200 (inode)
                D: Granted PR on node 2 to pid 17468 [ended]
                H: s:SH f:eEcH e:0 p:17468 [(ended)] init_journal+0x185/0x500 [gfs2]
                I: n:5/32859 t:8 f:0x01 d:0x00000200 s:134217728
                U: (N/A:Not EX)  H inode      805b      Held:Shared   [Queued, Blocking]
                U: (N/A:Not EX)  H  --->  held by pid 17468 [(ended)]  (Granted PR on node 2 to pid 17468 [ended])
              S    glocks  nondisk    inode    rgrp   iopen   flock quota jrnl    Total
              S  --------- ------- -------- ------- ------- ------- ----- ---- --------
              S  Unlocked:       1        5       4       0       0     0    0       10
              S    Locked:       2      245       6      58       0     0    1      313
              S     Total:       3      250      10      58       0     0    1      323
              S
              S   Held EX:       0        2       0       0       0     0    1        3
              S   Held SH:       1        1       0      57       0     0    0       59
              S   Held DF:       0        0       0       0       0     0    0        0
              S G Waiting:       0        1       0       0       0     0    0        1
              S P Waiting:       0        1       0       0       0     0    0        1
              S  DLM wait:       0

              @ nate_bob0       Wed Jan 27 07:24:14 2016  @host-050
               G:  s:EX n:2/180e9 f:yIqob t:EX d:EX/0 a:1 v:0 r:3 m:200 (inode)
                D: Granted EX on this node to pid 17465 [ended]
                H: s:EX f:H e:0 p:17465 [(ended)] init_per_node+0x17d/0x280 [gfs2]
                I: n:9/98537 t:8 f:0x00 d:0x00000201 s:24
                U: (N/A:System)  H inode      180e9     Held:Exclusive   [Dirty, Queued, Blocking]
                U: (N/A:System)  H  --->  held by pid 17465 [(ended)]  (Granted EX on this node to pid 17465 [ended])
               G:  s:UN n:2/609b4 f:lIqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
                D: Granted EX on node 2 to pid 14367 [ended]
                H: s:EX f:W e:0 p:16297 [delete_workqueu] gfs2_delete_inode+0x9d/0x450 [gfs2]
                U:  W inode      609b4     Is:Unlocked, Want:Exclusive   [Queued, Blocking]
                U:  W  --->  waiting pid 16297 [delete_workqueu]  (Granted EX on node 2 to pid 14367 [ended])
                C:              gfs2_delete_inode+0xa5/0x450 [gfs2]
                C:              generic_delete_inode+0xde/0x1d0
                C:              generic_drop_inode+0x65/0x80
                C:              gfs2_drop_inode+0x37/0x40 [gfs2]
               G:  s:SH n:2/19 f:Iqob t:SH d:EX/0 a:0 v:0 r:3 m:200 (inode)
                D: Granted PR on this node to pid 17465 [ended]
                H: s:SH f:eEcH e:0 p:17465 [(ended)] init_journal+0x185/0x500 [gfs2]
                I: n:4/25 t:8 f:0x01 d:0x00000200 s:134217728
                U: (N/A:Not EX)  H inode      19        Held:Shared   [Queued, Blocking]
                U: (N/A:Not EX)  H  --->  held by pid 17465 [(ended)]  (Granted PR on this node to pid 17465 [ended])
               G:  s:EX n:2/180ea f:Iqob t:EX d:EX/0 a:0 v:0 r:3 m:200 (inode)
                D: Granted EX on this node to pid 17465 [ended]
                H: s:EX f:H e:0 p:17465 [(ended)] init_per_node+0x1b0/0x280 [gfs2]
                I: n:10/98538 t:8 f:0x00 d:0x00000200 s:1048576
                U: (N/A:System)  H inode      180ea     Held:Exclusive   [Queued, Blocking]
                U: (N/A:System)  H  --->  held by pid 17465 [(ended)]  (Granted EX on this node to pid 17465 [ended])
               G:  s:EX n:9/0 f:Iqb t:EX d:EX/0 a:0 v:0 r:2 m:200 (journal)
                D: Granted EX on this node to pid 17465 [ended]
                H: s:EX f:eH e:0 p:17465 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
                U: (N/A:Journl)  H journal    0         Held:Exclusive   [Queued, Blocking]
                U: (N/A:Journl)  H  --->  held by pid 17465 [(ended)]  (Granted EX on this node to pid 17465 [ended])
               G:  s:UN n:2/4fe12 f:ldIqob t:EX d:UN/0 a:0 v:0 r:4 m:10 (inode)
                H: s:EX f:W e:0 p:17523 [python] gfs2_rename+0x344/0x8b0 [gfs2]
                H: s:SH f:AW e:0 p:17527 [python] gfs2_permission+0x176/0x210 [gfs2]
                U:  W inode      4fe12     Is:Unlocked, Want:Exclusive   [Demote pending, Queued, Blocking]
                U:  W  --->  waiting pid 17523 [python]
                C:              gfs2_permission+0x17f/0x210 [gfs2]
                C:              __link_path_walk+0xb3/0x1000
                C:              path_walk+0x6a/0xe0
                C:              filename_lookup+0x6b/0xc0
                U:  W  --->  waiting pid 17527 [python]
                C:              do_unlinkat+0x107/0x260
                C:              sys_unlink+0x16/0x20
                C:              system_call_fastpath+0x16/0x1b
                C:              0xffffffffffffffff
               G:  s:SH n:1/1 f:Iqb t:SH d:EX/0 a:0 v:0 r:2 m:200 (non-disk)
                D: Granted PR on node 2 to pid 14285 [ended]
                D: Granted PR on this node to pid 17465 [ended]
                H: s:SH f:eEH e:0 p:17465 [(ended)] gfs2_glock_nq_num+0x5b/0xa0 [gfs2]
                U: (N/A:Not EX)  H non-disk   1         Held:Shared   [Queued, Blocking]
                U: (N/A:Not EX)  H  --->  held by pid 17465 [(ended)]  (Granted PR on node 2 to pid 14285 [ended]) (Granted PR on this node to pid 17465 [ended])
              S    glocks  nondisk    inode    rgrp   iopen   flock quota jrnl    Total
              S  --------- ------- -------- ------- ------- ------- ----- ---- --------
              S  Unlocked:       1        8       7       0       0     0    0       16
              S    Locked:       2      208       3      41       0     0    1      256
              S     Total:       3      216      10      41       0     0    1      272
              S
              S   Held EX:       0        2       0       0       0     0    1        3
              S   Held SH:       1        1       0      41       0     0    0       43
              S   Held DF:       0        0       0       0       0     0    0        0
              S G Waiting:       0        2       0       0       0     0    0        2
              S P Waiting:       0        3       0       0       0     0    0        3
              S  DLM wait:       0

       From  this  example  output,  we  can  see  there  are  two GFS2 file systems mounted on system host-050:
       nate_bob1 and nate_bob0. In nate_bob1, we can see six glocks, but  we  can  ignore  all  of  them  marked
       (N/A:...)  because they are system files or held in SHared mode, and therefore other nodes should be able
       to hold the lock in SHared as well.

       There is one glock, for inode 183f5, which is has a process waiting to hold it. The lock is currently  in
       SHared  mode  (s:SH  on  the G: line) but process 17511 (python) wants to hold the lock in EXclusive mode
       (S:EX on the H: line). That process has a call stack that indicates it is trying to hold the  glock  from
       gfs2_unlink. The DLM says the lock is currently granted on node 2 in PR (Protected Read) mode.

       For  file  system  nate_bob0, there are 7 glocks listed. All but two are uninteresting. Locks 2/609b4 and
       2/4fe12 have processes waiting to hold them.

       In the summary data for nate_bob0, you can see there are 3 processes waiting for 2 inode glocks  (so  one
       of those glocks has multiple processes waiting).

       Since  DLM  wait  is 0 in the summary data for both GFS2 mount points, nobody is waiting for DLM to grant
       the lock.

KNOWN BUGS AND LIMITATIONS

       Since the GFS2 debugfs files are completely separate from the DLM debugfs files,  and  locks  can  change
       status  in a few nanoseconds time, there will always be a lag between the GFS2 view of a lock and the DLM
       view of a lock.  If there is some kind of long-term hang, they are more likely to match.  However,  under
       ordinary  conditions,  by  the  time  glocktop  gets  around  to  fetching  the DLM status of a lock, the
       information has changed. Therefore, don't be surprised if the DLM's view of a lock is at  odds  with  its
       glock.

       Since  iopen  glocks  are  held  by the thousands, glocktop skips most of the information related to them
       unless there's a waiter. For that reason, iopen lock problems may be difficult to debug with glocktop.

       It doesn't handle very large numbers (millions) of glocks.

                                                                                                     glocktop(8)