diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2012-05-10 07:41:40 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2012-05-10 07:41:40 -0400 |
commit | 2ebc3f8b3ecf66ddf31285aad1b5db4245c2c04a (patch) | |
tree | 3f5acd6ad60678de1c7bb3a6e7f34b2b804a4f7c /Documentation/filesystems | |
parent | 49f30789fc33c4516fbe123f05ea4313866381d3 (diff) |
GFS2: Update glock doc to add new stats info
We recently added some glock statistics to GFS2, so this is
a docs update to explain what they all mean. It is based
upon the checkin comment of the patch in question.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'Documentation/filesystems')
-rw-r--r-- | Documentation/filesystems/gfs2-glocks.txt | 119 |
1 files changed, 118 insertions, 1 deletions
diff --git a/Documentation/filesystems/gfs2-glocks.txt b/Documentation/filesystems/gfs2-glocks.txt index 0494f78d87e4..fcc79957be63 100644 --- a/Documentation/filesystems/gfs2-glocks.txt +++ b/Documentation/filesystems/gfs2-glocks.txt | |||
@@ -61,7 +61,9 @@ go_unlock | Called on the final local unlock of a lock | |||
61 | go_dump | Called to print content of object for debugfs file, or on | 61 | go_dump | Called to print content of object for debugfs file, or on |
62 | | error to dump glock to the log. | 62 | | error to dump glock to the log. |
63 | go_type | The type of the glock, LM_TYPE_..... | 63 | go_type | The type of the glock, LM_TYPE_..... |
64 | go_min_hold_time | The minimum hold time | 64 | go_callback | Called if the DLM sends a callback to drop this lock |
65 | go_flags | GLOF_ASPACE is set, if the glock has an address space | ||
66 | | associated with it | ||
65 | 67 | ||
66 | The minimum hold time for each lock is the time after a remote lock | 68 | The minimum hold time for each lock is the time after a remote lock |
67 | grant for which we ignore remote demote requests. This is in order to | 69 | grant for which we ignore remote demote requests. This is in order to |
@@ -89,6 +91,7 @@ go_demote_ok | Sometimes | Yes | |||
89 | go_lock | Yes | No | 91 | go_lock | Yes | No |
90 | go_unlock | Yes | No | 92 | go_unlock | Yes | No |
91 | go_dump | Sometimes | Yes | 93 | go_dump | Sometimes | Yes |
94 | go_callback | Sometimes (N/A) | Yes | ||
92 | 95 | ||
93 | N.B. Operations must not drop either the bit lock or the spinlock | 96 | N.B. Operations must not drop either the bit lock or the spinlock |
94 | if its held on entry. go_dump and do_demote_ok must never block. | 97 | if its held on entry. go_dump and do_demote_ok must never block. |
@@ -111,4 +114,118 @@ itself (locking order as above), and the other, known as the iopen | |||
111 | glock is used in conjunction with the i_nlink field in the inode to | 114 | glock is used in conjunction with the i_nlink field in the inode to |
112 | determine the lifetime of the inode in question. Locking of inodes | 115 | determine the lifetime of the inode in question. Locking of inodes |
113 | is on a per-inode basis. Locking of rgrps is on a per rgrp basis. | 116 | is on a per-inode basis. Locking of rgrps is on a per rgrp basis. |
117 | In general we prefer to lock local locks prior to cluster locks. | ||
118 | |||
119 | Glock Statistics | ||
120 | ------------------ | ||
121 | |||
122 | The stats are divided into two sets: those relating to the | ||
123 | super block and those relating to an individual glock. The | ||
124 | super block stats are done on a per cpu basis in order to | ||
125 | try and reduce the overhead of gathering them. They are also | ||
126 | further divided by glock type. All timings are in nanoseconds. | ||
127 | |||
128 | In the case of both the super block and glock statistics, | ||
129 | the same information is gathered in each case. The super | ||
130 | block timing statistics are used to provide default values for | ||
131 | the glock timing statistics, so that newly created glocks | ||
132 | should have, as far as possible, a sensible starting point. | ||
133 | The per-glock counters are initialised to zero when the | ||
134 | glock is created. The per-glock statistics are lost when | ||
135 | the glock is ejected from memory. | ||
136 | |||
137 | The statistics are divided into three pairs of mean and | ||
138 | variance, plus two counters. The mean/variance pairs are | ||
139 | smoothed exponential estimates and the algorithm used is | ||
140 | one which will be very familiar to those used to calculation | ||
141 | of round trip times in network code. See "TCP/IP Illustrated, | ||
142 | Volume 1", W. Richard Stevens, sect 21.3, "Round-Trip Time Measurement", | ||
143 | p. 299 and onwards. Also, Volume 2, Sect. 25.10, p. 838 and onwards. | ||
144 | Unlike the TCP/IP Illustrated case, the mean and variance are | ||
145 | not scaled, but are in units of integer nanoseconds. | ||
146 | |||
147 | The three pairs of mean/variance measure the following | ||
148 | things: | ||
149 | |||
150 | 1. DLM lock time (non-blocking requests) | ||
151 | 2. DLM lock time (blocking requests) | ||
152 | 3. Inter-request time (again to the DLM) | ||
153 | |||
154 | A non-blocking request is one which will complete right | ||
155 | away, whatever the state of the DLM lock in question. That | ||
156 | currently means any requests when (a) the current state of | ||
157 | the lock is exclusive, i.e. a lock demotion (b) the requested | ||
158 | state is either null or unlocked (again, a demotion) or (c) the | ||
159 | "try lock" flag is set. A blocking request covers all the other | ||
160 | lock requests. | ||
161 | |||
162 | There are two counters. The first is there primarily to show | ||
163 | how many lock requests have been made, and thus how much data | ||
164 | has gone into the mean/variance calculations. The other counter | ||
165 | is counting queuing of holders at the top layer of the glock | ||
166 | code. Hopefully that number will be a lot larger than the number | ||
167 | of dlm lock requests issued. | ||
168 | |||
169 | So why gather these statistics? There are several reasons | ||
170 | we'd like to get a better idea of these timings: | ||
171 | |||
172 | 1. To be able to better set the glock "min hold time" | ||
173 | 2. To spot performance issues more easily | ||
174 | 3. To improve the algorithm for selecting resource groups for | ||
175 | allocation (to base it on lock wait time, rather than blindly | ||
176 | using a "try lock") | ||
177 | |||
178 | Due to the smoothing action of the updates, a step change in | ||
179 | some input quantity being sampled will only fully be taken | ||
180 | into account after 8 samples (or 4 for the variance) and this | ||
181 | needs to be carefully considered when interpreting the | ||
182 | results. | ||
183 | |||
184 | Knowing both the time it takes a lock request to complete and | ||
185 | the average time between lock requests for a glock means we | ||
186 | can compute the total percentage of the time for which the | ||
187 | node is able to use a glock vs. time that the rest of the | ||
188 | cluster has its share. That will be very useful when setting | ||
189 | the lock min hold time. | ||
190 | |||
191 | Great care has been taken to ensure that we | ||
192 | measure exactly the quantities that we want, as accurately | ||
193 | as possible. There are always inaccuracies in any | ||
194 | measuring system, but I hope this is as accurate as we | ||
195 | can reasonably make it. | ||
196 | |||
197 | Per sb stats can be found here: | ||
198 | /sys/kernel/debug/gfs2/<fsname>/sbstats | ||
199 | Per glock stats can be found here: | ||
200 | /sys/kernel/debug/gfs2/<fsname>/glstats | ||
201 | |||
202 | Assuming that debugfs is mounted on /sys/kernel/debug and also | ||
203 | that <fsname> is replaced with the name of the gfs2 filesystem | ||
204 | in question. | ||
205 | |||
206 | The abbreviations used in the output as are follows: | ||
207 | |||
208 | srtt - Smoothed round trip time for non-blocking dlm requests | ||
209 | srttvar - Variance estimate for srtt | ||
210 | srttb - Smoothed round trip time for (potentially) blocking dlm requests | ||
211 | srttvarb - Variance estimate for srttb | ||
212 | sirt - Smoothed inter-request time (for dlm requests) | ||
213 | sirtvar - Variance estimate for sirt | ||
214 | dlm - Number of dlm requests made (dcnt in glstats file) | ||
215 | queue - Number of glock requests queued (qcnt in glstats file) | ||
216 | |||
217 | The sbstats file contains a set of these stats for each glock type (so 8 lines | ||
218 | for each type) and for each cpu (one column per cpu). The glstats file contains | ||
219 | a set of these stats for each glock in a similar format to the glocks file, but | ||
220 | using the format mean/variance for each of the timing stats. | ||
221 | |||
222 | The gfs2_glock_lock_time tracepoint prints out the current values of the stats | ||
223 | for the glock in question, along with some addition information on each dlm | ||
224 | reply that is received: | ||
225 | |||
226 | status - The status of the dlm request | ||
227 | flags - The dlm request flags | ||
228 | tdiff - The time taken by this specific request | ||
229 | (remaining fields as per above list) | ||
230 | |||
114 | 231 | ||