2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
11 * Statistics gathering stuff for the AFS cache manager.
14 * The remainder of this file contains the statistics gathering stuff.
17 #ifndef __TRANSARC_AFS_STATS_H__
18 #define __TRANSARC_AFS_STATS_H__
20 #include "../afs/param.h"
22 /* the following is to work around a VAX compiler limitation */
26 #endif /* VAX environment */
31 * The data collection routines are simply no-ops
33 #define AFS_STATCNT(arg)
34 #define AFS_MEANCNT(arg, value)
35 #define AFS_STATS(arg)
37 #define XSTATS_START_TIME(arg)
38 #define XSTATS_END_TIME
40 #else /* AFS_NOSTATS */
42 #define AFS_STATS(arg) arg
44 /* NOTE: Ensure this is the same size in user and kernel mode. */
45 typedef struct timeval osi_timeval_t;
48 #define XSTATS_DECLS struct afs_stats_opTimingData *opP; \
49 osi_timeval_t opStartTime, opStopTime, elapsedTime;
51 #define XSTATS_START_TIME(arg) \
52 opP = &(afs_stats_cmfullperf.rpc.fsRPCTimes[arg]); \
53 osi_GetuTime(&opStartTime);
55 #define XSTATS_START_CMTIME(arg) \
56 opP = &(afs_stats_cmfullperf.rpc.cmRPCTimes[arg]); \
57 osi_GetuTime(&opStartTime);
59 #define XSTATS_END_TIME osi_GetuTime(&opStopTime); \
61 if (!code) { (opP->numSuccesses)++; \
62 afs_stats_GetDiff(elapsedTime, opStartTime, opStopTime); \
63 afs_stats_AddTo((opP->sumTime), elapsedTime); \
64 afs_stats_SquareAddTo((opP->sqrTime), elapsedTime); \
65 if (afs_stats_TimeLessThan(elapsedTime, (opP->minTime))) { \
66 afs_stats_TimeAssign((opP->minTime), elapsedTime); \
67 } if (afs_stats_TimeGreaterThan(elapsedTime, (opP->maxTime))) { \
68 afs_stats_TimeAssign((opP->maxTime), elapsedTime); } }
70 #endif /* AFS_NOSTATS */
74 struct afs_MeanStats {
80 * struct afs_CMCallStats
81 * This is the place where we keep records on each and every
84 struct afs_CMCallStats {
85 afs_int32 C_afs_init; /* afs_aix_subr.c*/
86 afs_int32 C_gop_rdwr; /* afs_aix_subr.c*/
87 afs_int32 C_aix_gnode_rele; /* afs_aix_subr.c*/
88 afs_int32 C_gettimeofday; /* afs_aix_subr.c*/
89 afs_int32 C_m_cpytoc; /* afs_aix_subr.c*/
90 afs_int32 C_aix_vattr_null; /* afs_aix_subr.c*/
91 afs_int32 C_afs_gn_ftrunc; /* afs_aixops.c*/
92 afs_int32 C_afs_gn_rdwr; /* afs_aixops.c*/
93 afs_int32 C_afs_gn_ioctl; /* afs_aixops.c*/
94 afs_int32 C_afs_gn_lockctl; /* afs_aixops.c*/
95 afs_int32 C_afs_gn_readlink; /* afs_aixops.c*/
96 afs_int32 C_afs_gn_readdir; /* afs_aixops.c*/
97 afs_int32 C_afs_gn_select; /* afs_aixops.c*/
98 afs_int32 C_afs_gn_strategy; /* afs_aixops.c*/
99 afs_int32 C_afs_gn_symlink; /* afs_aixops.c*/
100 afs_int32 C_afs_gn_revoke; /* afs_aixops.c*/
101 afs_int32 C_afs_gn_link; /* afs_aixops.c*/
102 afs_int32 C_afs_gn_mkdir; /* afs_aixops.c*/
103 afs_int32 C_afs_gn_mknod; /* afs_aixops.c*/
104 afs_int32 C_afs_gn_remove; /* afs_aixops.c*/
105 afs_int32 C_afs_gn_rename; /* afs_aixops.c*/
106 afs_int32 C_afs_gn_rmdir; /* afs_aixops.c*/
107 afs_int32 C_afs_gn_fid; /* afs_aixops.c*/
108 afs_int32 C_afs_gn_lookup; /* afs_aixops.c*/
109 afs_int32 C_afs_gn_open; /* afs_aixops.c*/
110 afs_int32 C_afs_gn_create; /* afs_aixops.c*/
111 afs_int32 C_afs_gn_hold; /* afs_aixops.c*/
112 afs_int32 C_afs_gn_close; /* afs_aixops.c*/
113 afs_int32 C_afs_gn_map; /* afs_aixops.c*/
114 afs_int32 C_afs_gn_rele; /* afs_aixops.c*/
115 afs_int32 C_afs_gn_unmap; /* afs_aixops.c*/
116 afs_int32 C_afs_gn_access; /* afs_aixops.c*/
117 afs_int32 C_afs_gn_getattr; /* afs_aixops.c*/
118 afs_int32 C_afs_gn_setattr; /* afs_aixops.c*/
119 afs_int32 C_afs_gn_fclear; /* afs_aixops.c*/
120 afs_int32 C_afs_gn_fsync; /* afs_aixops.c*/
121 afs_int32 C_pHash; /* afs_buffer.c*/
122 afs_int32 C_DInit; /* afs_buffer.c*/
123 afs_int32 C_DRead; /* afs_buffer.c*/
124 afs_int32 C_FixupBucket; /* afs_buffer.c*/
125 afs_int32 C_afs_newslot; /* afs_buffer.c*/
126 afs_int32 C_DRelease; /* afs_buffer.c*/
127 afs_int32 C_DFlush; /* afs_buffer.c*/
128 afs_int32 C_DFlushEntry; /* afs_buffer.c*/
129 afs_int32 C_DVOffset; /* afs_buffer.c*/
130 afs_int32 C_DZap; /* afs_buffer.c*/
131 afs_int32 C_DNew; /* afs_buffer.c*/
132 afs_int32 C_shutdown_bufferpackage; /* afs_buffer.c*/
133 afs_int32 C_afs_CheckKnownBad; /* afs_cache.c*/
134 afs_int32 C_afs_RemoveVCB; /* afs_cache.c*/
135 afs_int32 C_afs_NewVCache; /* afs_cache.c*/
136 afs_int32 C_afs_FlushActiveVcaches; /* afs_cache.c*/
137 afs_int32 C_afs_VerifyVCache; /* afs_cache.c*/
138 afs_int32 C_afs_WriteVCache; /* afs_cache.c*/
139 afs_int32 C_afs_GetVCache; /* afs_cache.c*/
140 afs_int32 C_afs_StuffVcache; /* afs_cache.c*/
141 afs_int32 C_afs_FindVCache; /* afs_cache.c*/
142 afs_int32 C_afs_PutDCache; /* afs_cache.c*/
143 afs_int32 C_afs_PutVCache; /* afs_cache.c*/
144 afs_int32 C_CacheStoreProc; /* afs_cache.c*/
145 afs_int32 C_afs_FindDCache; /* afs_cache.c*/
146 afs_int32 C_afs_TryToSmush; /* afs_cache.c*/
147 afs_int32 C_afs_AdjustSize; /* afs_cache.c*/
148 afs_int32 C_afs_CheckSize; /* afs_cache.c*/
149 afs_int32 C_afs_StoreWarn; /* afs_cache.c*/
150 afs_int32 C_CacheFetchProc; /* afs_cache.c*/
151 afs_int32 C_UFS_CacheStoreProc; /* afs_cache.c*/
152 afs_int32 C_UFS_CacheFetchProc; /* afs_cache.c*/
153 afs_int32 C_afs_GetDCache; /* afs_cache.c*/
154 afs_int32 C_afs_SimpleVStat; /* afs_cache.c*/
155 afs_int32 C_afs_ProcessFS; /* afs_cache.c*/
156 afs_int32 C_afs_InitCacheInfo; /* afs_cache.c*/
157 afs_int32 C_afs_InitVolumeInfo; /* afs_cache.c*/
158 afs_int32 C_afs_InitCacheFile; /* afs_cache.c*/
159 afs_int32 C_afs_CacheInit; /* afs_cache.c*/
160 afs_int32 C_afs_GetDSlot; /* afs_cache.c*/
161 afs_int32 C_afs_WriteThroughDSlots; /* afs_cache.c*/
162 afs_int32 C_afs_MemGetDSlot; /* afs_cache.c*/
163 afs_int32 C_afs_UFSGetDSlot; /* afs_cache.c*/
164 afs_int32 C_afs_StoreDCache; /* afs_cache.c*/
165 afs_int32 C_afs_StoreMini; /* afs_cache.c*/
166 afs_int32 C_shutdown_cache; /* afs_cache.c*/
167 afs_int32 C_afs_StoreAllSegments; /* afs_cache.c*/
168 afs_int32 C_afs_InvalidateAllSegments; /* afs_cache.c*/
169 afs_int32 C_afs_TruncateAllSegments; /* afs_cache.c*/
170 afs_int32 C_afs_CheckVolSync; /* afs_cache.c*/
171 afs_int32 C_afs_wakeup; /* afs_cache.c*/
172 afs_int32 C_afs_CFileOpen; /* afs_cache.c*/
173 afs_int32 C_afs_CFileTruncate; /* afs_cache.c*/
174 afs_int32 C_afs_GetDownD; /* afs_cache.c*/
175 afs_int32 C_afs_WriteDCache; /* afs_cache.c*/
176 afs_int32 C_afs_FlushDCache; /* afs_cache.c*/
177 afs_int32 C_afs_GetDownDSlot; /* afs_cache.c*/
178 afs_int32 C_afs_FlushVCache; /* afs_cache.c*/
179 afs_int32 C_afs_GetDownV; /* afs_cache.c*/
180 afs_int32 C_afs_QueueVCB; /* afs_cache.c*/
181 afs_int32 C_afs_call; /* afs_call.c */
182 afs_int32 C_afs_syscall_call; /* afs_call.c*/
183 afs_int32 C_syscall; /* afs_call.c*/
184 afs_int32 C_lpioctl; /* afs_call.c*/
185 afs_int32 C_lsetpag; /* afs_call.c*/
186 afs_int32 C_afs_syscall; /* afs_call.c*/
187 afs_int32 C_afs_CheckInit; /* afs_call.c*/
188 afs_int32 C_afs_shutdown; /* afs_call.c*/
189 afs_int32 C_shutdown_BKG; /* afs_call.c*/
190 afs_int32 C_shutdown_afstest; /* afs_call.c*/
191 afs_int32 C_SRXAFSCB_GetCE; /* afs_callback.c*/
192 afs_int32 C_ClearCallBack; /* afs_callback.c*/
193 afs_int32 C_SRXAFSCB_GetLock; /* afs_callback.c*/
194 afs_int32 C_SRXAFSCB_CallBack; /* afs_callback.c*/
195 afs_int32 C_SRXAFSCB_InitCallBackState; /* afs_callback.c*/
196 afs_int32 C_SRXAFSCB_Probe; /* afs_callback.c*/
197 afs_int32 C_afs_RXCallBackServer; /* afs_callback.c*/
198 afs_int32 C_shutdown_CB; /* afs_callback.c*/
199 afs_int32 C_afs_Chunk; /* afs_chunk.c*/
200 afs_int32 C_afs_ChunkBase; /* afs_chunk.c*/
201 afs_int32 C_afs_ChunkOffset; /* afs_chunk.c*/
202 afs_int32 C_afs_ChunkSize; /* afs_chunk.c*/
203 afs_int32 C_afs_ChunkToBase; /* afs_chunk.c*/
204 afs_int32 C_afs_ChunkToSize; /* afs_chunk.c*/
205 afs_int32 C_afs_SetChunkSize; /* afs_chunk.c*/
207 afs_int32 C_afs_config; /* afs_config.c*/
208 afs_int32 C_mem_freebytes; /* afs_config.c*/
209 afs_int32 C_mem_getbytes; /* afs_config.c*/
210 afs_int32 C_fpalloc; /* afs_config.c*/
211 afs_int32 C_kluge_init; /* afs_config.c*/
212 afs_int32 C_ufdalloc; /* afs_config.c*/
213 afs_int32 C_ufdfree; /* afs_config.c*/
214 afs_int32 C_commit; /* afs_config.c*/
215 afs_int32 C_dev_ialloc; /* afs_config.c*/
216 afs_int32 C_ffree; /* afs_config.c*/
217 afs_int32 C_iget; /* afs_config.c*/
218 afs_int32 C_iptovp; /* afs_config.c*/
219 afs_int32 C_ilock; /* afs_config.c*/
220 afs_int32 C_irele; /* afs_config.c*/
221 afs_int32 C_iput; /* afs_config.c*/
223 afs_int32 C_afs_Daemon; /* afs_daemons.c*/
224 afs_int32 C_afs_CheckRootVolume; /* afs_daemons.c*/
225 afs_int32 C_BPath; /* afs_daemons.c*/
226 afs_int32 C_BPrefetch; /* afs_daemons.c*/
227 afs_int32 C_BStore; /* afs_daemons.c*/
228 afs_int32 C_afs_BBusy; /* afs_daemons.c*/
229 afs_int32 C_afs_BQueue; /* afs_daemons.c*/
230 afs_int32 C_afs_BRelease; /* afs_daemons.c*/
231 afs_int32 C_afs_BackgroundDaemon; /* afs_daemons.c*/
232 afs_int32 C_shutdown_daemons; /* afs_daemons.c*/
233 afs_int32 C_exporter_add; /* afs_exporter.c*/
234 afs_int32 C_exporter_find; /* afs_exporter.c*/
235 afs_int32 C_afs_gfs_kalloc; /* afs_gfs_subr.c*/
236 afs_int32 C_IsAfsVnode; /* afs_gfs_subr.c*/
237 afs_int32 C_SetAfsVnode; /* afs_gfs_subr.c*/
238 afs_int32 C_afs_gfs_kfree; /* afs_gfs_subr.c*/
239 afs_int32 C_gop_lookupname; /* afs_gfs_subr.c*/
240 afs_int32 C_gfsvop_getattr; /* afs_gfs_subr.c*/
241 afs_int32 C_gfsvop_rdwr; /* afs_gfs_subr.c*/
242 afs_int32 C_afs_uniqtime; /* afs_gfs_subr.c*/
243 afs_int32 C_gfs_vattr_null; /* afs_gfs_subr.c*/
244 afs_int32 C_afs_lock; /* afs_gfsops.c*/
245 afs_int32 C_afs_unlock; /* afs_gfsops.c*/
246 afs_int32 C_afs_update; /* afs_gfsops.c*/
247 afs_int32 C_afs_gclose; /* afs_gfsops.c*/
248 afs_int32 C_afs_gopen; /* afs_gfsops.c*/
249 afs_int32 C_afs_greadlink; /* afs_gfsops.c*/
250 afs_int32 C_afs_select; /* afs_gfsops.c*/
251 afs_int32 C_afs_gbmap; /* afs_gfsops.c*/
252 afs_int32 C_afs_getfsdata; /* afs_gfsops.c*/
253 afs_int32 C_afs_gsymlink; /* afs_gfsops.c*/
254 afs_int32 C_afs_namei; /* afs_gfsops.c*/
255 afs_int32 C_printgnode; /* afs_gfsops.c*/
256 afs_int32 C_HaveGFSLock; /* afs_gfsops.c*/
257 afs_int32 C_afs_gmount; /* afs_gfsops.c*/
258 afs_int32 C_AddGFSLock; /* afs_gfsops.c*/
259 afs_int32 C_RemoveGFSLock; /* afs_gfsops.c*/
260 afs_int32 C_afs_grlock; /* afs_gfsops.c*/
261 afs_int32 C_afs_gumount; /* afs_gfsops.c*/
262 afs_int32 C_afs_gget; /* afs_gfsops.c*/
263 afs_int32 C_afs_glink; /* afs_gfsops.c*/
264 afs_int32 C_afs_gmkdir; /* afs_gfsops.c*/
265 afs_int32 C_afs_sbupdate; /* afs_gfsops.c*/
266 afs_int32 C_afs_unlink; /* afs_gfsops.c*/
267 afs_int32 C_afs_grmdir; /* afs_gfsops.c*/
268 afs_int32 C_afs_makenode; /* afs_gfsops.c*/
269 afs_int32 C_afs_grename; /* afs_gfsops.c*/
270 afs_int32 C_afs_rele; /* afs_gfsops.c*/
271 afs_int32 C_afs_syncgp; /* afs_gfsops.c*/
272 afs_int32 C_afs_getval; /* afs_gfsops.c*/
273 afs_int32 C_afs_gfshack; /* afs_gfsops.c*/
274 afs_int32 C_afs_trunc; /* afs_gfsops.c*/
275 afs_int32 C_afs_rwgp; /* afs_gfsops.c*/
276 afs_int32 C_afs_stat; /* afs_gfsops.c*/
277 afs_int32 C_afsc_link; /* afs_hp_subr.c*/
278 afs_int32 C_hpsobind; /* afs_hp_subr.c*/
279 afs_int32 C_hpsoclose; /* afs_hp_subr.c*/
280 afs_int32 C_hpsocreate; /* afs_hp_subr.c*/
281 afs_int32 C_hpsoreserve; /* afs_hp_subr.c*/
282 afs_int32 C_afs_vfs_mount; /* afs_hp_subr.c*/
283 afs_int32 C_devtovfs; /* afs_istuff.c*/
284 afs_int32 C_igetinode; /* afs_istuff.c*/
285 afs_int32 C_afs_syscall_iopen; /* afs_istuff.c*/
286 afs_int32 C_iopen; /* afs_istuff.c*/
287 afs_int32 C_afs_syscall_iincdec; /* afs_istuff.c*/
288 afs_int32 C_afs_syscall_ireadwrite; /* afs_istuff.c*/
289 afs_int32 C_iincdec; /* afs_istuff.c*/
290 afs_int32 C_ireadwrite; /* afs_istuff.c*/
291 afs_int32 C_oiread; /* afs_istuff.c*/
292 afs_int32 C_AHash; /* afs_istuff.c*/
293 afs_int32 C_QTOA; /* afs_istuff.c*/
294 afs_int32 C_afs_FindPartByDev; /* afs_istuff.c*/
295 afs_int32 C_aux_init; /* afs_istuff.c*/
296 afs_int32 C_afs_GetNewPart; /* afs_istuff.c*/
297 afs_int32 C_afs_InitAuxVolFile; /* afs_istuff.c*/
298 afs_int32 C_afs_CreateAuxEntry; /* afs_istuff.c*/
299 afs_int32 C_afs_GetAuxSlot; /* afs_istuff.c*/
300 afs_int32 C_afs_GetDownAux; /* afs_istuff.c*/
301 afs_int32 C_afs_FlushAuxCache; /* afs_istuff.c*/
302 afs_int32 C_afs_GetAuxInode; /* afs_istuff.c*/
303 afs_int32 C_afs_PutAuxInode; /* afs_istuff.c*/
304 afs_int32 C_afs_ReadAuxInode; /* afs_istuff.c*/
305 afs_int32 C_afs_WriteAuxInode; /* afs_istuff.c*/
306 afs_int32 C_afs_auxcall; /* afs_istuff.c*/
307 afs_int32 C_tmpdbg_auxtbl; /* afs_istuff.c*/
308 afs_int32 C_tmpdbg_parttbl; /* afs_istuff.c*/
309 afs_int32 C_idec; /* afs_istuff.c*/
310 afs_int32 C_iinc; /* afs_istuff.c*/
311 afs_int32 C_iread; /* afs_istuff.c*/
312 afs_int32 C_iwrite; /* afs_istuff.c*/
313 afs_int32 C_getinode; /* afs_istuff.c*/
314 afs_int32 C_trygetfs; /* afs_istuff.c*/
315 afs_int32 C_iforget; /* afs_istuff.c*/
316 afs_int32 C_afs_syscall_icreate; /* afs_istuff.c*/
317 afs_int32 C_icreate; /* afs_istuff.c*/
318 afs_int32 C_Lock_Init; /* afs_lock.c*/
319 afs_int32 C_Lock_Obtain; /* afs_lock.c*/
320 afs_int32 C_Lock_ReleaseR; /* afs_lock.c*/
321 afs_int32 C_Lock_ReleaseW; /* afs_lock.c*/
322 afs_int32 C_afs_BozonLock; /* afs_lock.c*/
323 afs_int32 C_afs_BozonUnlock; /* afs_lock.c*/
324 afs_int32 C_osi_SleepR; /* afs_lock.c*/
325 afs_int32 C_osi_SleepS; /* afs_lock.c*/
326 afs_int32 C_osi_SleepW; /* afs_lock.c*/
327 afs_int32 C_osi_Sleep; /* afs_lock */
328 afs_int32 C_afs_BozonInit; /* afs_lock.c*/
329 afs_int32 C_afs_CheckBozonLock; /* afs_lock.c*/
330 afs_int32 C_afs_CheckBozonLockBlocking; /* afs_lock.c*/
331 afs_int32 C_xxxinit; /* afs_main.c*/
332 afs_int32 C_KernelEntry; /* afs_main.c*/
333 afs_int32 C_afs_InitMemCache; /* afs_memcache.c*/
334 afs_int32 C_afs_LookupMCE; /* afs_memcache.c*/
335 afs_int32 C_afs_MemReadBlk; /* afs_memcache.c*/
336 afs_int32 C_afs_MemReadUIO; /* afs_memcache.c*/
337 afs_int32 C_afs_MemWriteBlk; /* afs_memcache.c*/
338 afs_int32 C_afs_MemCacheStoreProc; /* afs_memcache.c*/
339 afs_int32 C_afs_MemCacheTruncate; /* afs_memcache.c*/
340 afs_int32 C_afs_MemWriteUIO; /* afs_memcache.c*/
341 afs_int32 C_afs_MemCacheFetchProc; /* afs_memcache.c*/
342 afs_int32 C_afs_vnode_pager_create; /* afs_next_aux.c*/
343 afs_int32 C_next_KernelEntry; /* afs_next_subr.c*/
344 afs_int32 C_afs_GetNfsClientPag; /* afs_nfsclnt.c*/
345 afs_int32 C_afs_FindNfsClientPag; /* afs_nfsclnt.c*/
346 afs_int32 C_afs_PutNfsClientPag; /* afs_nfsclnt.c*/
347 afs_int32 C_afs_nfsclient_reqhandler; /* afs_nfsclnt.c*/
348 afs_int32 C_afs_nfsclient_GC; /* afs_nfsclnt.c*/
349 afs_int32 C_afs_nfsclient_hold; /* afs_nfsclnt.c*/
350 afs_int32 C_afs_nfsclient_stats; /* afs_nfsclnt.c*/
351 afs_int32 C_afs_nfsclient_sysname; /* afs_nfsclnt.c*/
352 afs_int32 C_afs_nfsclient_shutdown; /* afs_nfsclnt.c*/
353 afs_int32 C_afs_rfs_readdir_fixup; /* afs_nfssrv.c */
354 afs_int32 C_afs_rfs_dispatch; /* afs_nfssrv.c*/
355 afs_int32 C_afs_xnfs_svc; /* afs_nfssrv.c*/
356 afs_int32 C_afs_xdr_putrddirres; /* afs_nfssrv.c*/
357 afs_int32 C_afs_rfs_readdir; /* afs_nfssrv.c*/
358 afs_int32 C_afs_rfs_rddirfree; /* afs_nfssrv.c*/
359 afs_int32 C_rfs_dupcreate; /* afs_nfssrv.c*/
360 afs_int32 C_rfs_dupsetattr; /* afs_nfssrv.c*/
361 afs_int32 C_Nfs2AfsCall; /* afs_nfssrv.c*/
362 afs_int32 C_afs_sun_xuntext; /* afs_osi.c*/
363 afs_int32 C_osi_Active; /* afs_osi.c*/
364 afs_int32 C_osi_FlushPages; /* afs_osi.c*/
365 afs_int32 C_osi_FlushText; /* afs_osi.c*/
366 afs_int32 C_osi_CallProc; /* afs_osi.c*/
367 afs_int32 C_osi_CancelProc; /* afs_osi.c*/
368 afs_int32 C_osi_Invisible; /* afs_osi.c*/
369 afs_int32 C_osi_Time; /* afs_osi.c*/
370 afs_int32 C_osi_Alloc; /* afs_osi.c*/
371 afs_int32 C_osi_SetTime; /* afs_osi.c*/
372 afs_int32 C_osi_Dump; /* afs_osi.c*/
373 afs_int32 C_osi_Free; /* afs_osi.c*/
374 afs_int32 C_shutdown_osi; /* afs_osi.c*/
375 afs_int32 C_osi_UFSOpen; /* afs_osifile.c*/
376 afs_int32 C_osi_Close; /* afs_osifile.c*/
377 afs_int32 C_osi_Stat; /* afs_osifile.c*/
378 afs_int32 C_osi_Truncate; /* afs_osifile.c*/
379 afs_int32 C_osi_Read; /* afs_osifile.c*/
380 afs_int32 C_osi_Write; /* afs_osifile.c*/
381 afs_int32 C_osi_MapStrategy; /* afs_osifile.c*/
382 afs_int32 C_shutdown_osifile; /* afs_osifile.c*/
383 afs_int32 C_osi_FreeLargeSpace; /* afs_osinet.c*/
384 afs_int32 C_osi_FreeSmallSpace; /* afs_osinet.c*/
385 afs_int32 C_pkt_iodone; /* afs_osinet.c*/
386 afs_int32 C_shutdown_osinet; /* afs_osinet.c*/
387 afs_int32 C_afs_cs; /* afs_osinet.c*/
388 afs_int32 C_osi_AllocLargeSpace; /* afs_osinet.c*/
389 afs_int32 C_osi_AllocSmallSpace; /* afs_osinet.c*/
390 afs_int32 C_osi_CloseToTheEdge; /* afs_osinet.c*/
391 afs_int32 C_osi_xgreedy; /* afs_osinet.c*/
392 afs_int32 C_osi_FreeSocket; /* afs_osinet.c*/
393 afs_int32 C_osi_NewSocket; /* afs_osinet.c*/
394 afs_int32 C_trysblock; /* afs_osinet.c*/
395 afs_int32 C_osi_NetSend; /* afs_osinet.c*/
396 afs_int32 C_WaitHack; /* afs_osinet.c*/
397 afs_int32 C_osi_CancelWait; /* afs_osinet.c*/
398 afs_int32 C_osi_InitWaitHandle; /* afs_osinet.c*/
399 afs_int32 C_osi_Wakeup; /* afs_osinet.c*/
400 afs_int32 C_osi_Wait; /* afs_osinet.c*/
401 afs_int32 C_dirp_Read; /* afs_physio.c*/
402 afs_int32 C_dirp_SetCacheDev; /* afs_physio.c*/
403 afs_int32 C_Die; /* afs_physio.c*/
404 afs_int32 C_dirp_Cpy; /* afs_physio.c*/
405 afs_int32 C_dirp_Eq; /* afs_physio.c*/
406 afs_int32 C_dirp_Write; /* afs_physio.c*/
407 afs_int32 C_dirp_Zap; /* afs_physio.c*/
408 afs_int32 C_PSetVolumeStatus; /* afs_pioctl.c*/
409 afs_int32 C_PFlush; /* afs_pioctl.c*/
410 afs_int32 C_PNewStatMount; /* afs_pioctl.c*/
411 afs_int32 C_PGetTokens; /* afs_pioctl.c*/
412 afs_int32 C_PUnlog; /* afs_pioctl.c*/
413 afs_int32 C_PCheckServers; /* afs_pioctl.c*/
414 afs_int32 C_PMariner; /* afs_pioctl.c*/
415 afs_int32 C_PCheckAuth; /* afs_pioctl.c*/
416 afs_int32 C_PCheckVolNames; /* afs_pioctl.c*/
417 afs_int32 C_PFindVolume; /* afs_pioctl.c*/
418 afs_int32 C_Prefetch; /* afs_pioctl.c*/
419 afs_int32 C_PGetCacheSize; /* afs_pioctl.c*/
420 afs_int32 C_PRemoveCallBack; /* afs_pioctl.c*/
421 afs_int32 C_PSetCacheSize; /* afs_pioctl.c*/
422 afs_int32 C_PViceAccess; /* afs_pioctl.c*/
423 afs_int32 C_PListCells; /* afs_pioctl.c*/
424 afs_int32 C_PNewCell; /* afs_pioctl.c*/
425 afs_int32 C_PRemoveMount; /* afs_pioctl.c*/
426 afs_int32 C_HandleIoctl; /* afs_pioctl.c*/
427 afs_int32 C__AFSIOCTL; /* afs_pioctl.c*/
428 afs_int32 C__VALIDAFSIOCTL; /* afs_pioctl.c*/
429 afs_int32 C_PGetCellStatus; /* afs_pioctl.c*/
430 afs_int32 C_PSetCellStatus; /* afs_pioctl.c*/
431 afs_int32 C_PVenusLogging; /* afs_pioctl.c*/
432 afs_int32 C_PFlushVolumeData; /* afs_pioctl.c*/
433 afs_int32 C_PSetSysName; /* afs_pioctl.c*/
434 afs_int32 C_PExportAfs; /* afs_pioctl.c*/
435 afs_int32 C_HandleClientContext; /* afs_pioctl.c*/
436 afs_int32 C_afs_ioctl; /* afs_pioctl.c*/
437 afs_int32 C_afs_xioctl; /* afs_pioctl.c*/
438 afs_int32 C_afs_pioctl; /* afs_pioctl.c*/
439 afs_int32 C_afs_syscall_pioctl; /* afs_pioctl.c*/
440 afs_int32 C_HandlePioctl; /* afs_pioctl.c*/
441 afs_int32 C_PGetAcl; /* afs_pioctl.c*/
442 afs_int32 C_PGetFID; /* afs_pioctl.c*/
443 afs_int32 C_PSetAcl; /* afs_pioctl.c*/
444 afs_int32 C_PBogus; /* afs_pioctl.c*/
445 afs_int32 C_PGetFileCell; /* afs_pioctl.c*/
446 afs_int32 C_PGetWSCell; /* afs_pioctl.c*/
447 afs_int32 C_PNoop; /* afs_pioctl.c*/
448 afs_int32 C_PGetUserCell; /* afs_pioctl.c*/
449 afs_int32 C_PSetTokens; /* afs_pioctl.c*/
450 afs_int32 C_PGetVolumeStatus; /* afs_pioctl.c*/
451 afs_int32 C_afs_ResetAccessCache; /* afs_resource.c*/
452 afs_int32 C_afs_FindUser; /* afs_resource.c*/
453 afs_int32 C_afs_ResetUserConns; /* afs_resource.c*/
454 afs_int32 C_afs_ResourceInit; /* afs_resource.c*/
455 afs_int32 C_afs_GetCell; /* afs_resource.c*/
456 afs_int32 C_afs_GetCellByIndex; /* afs_resource.c*/
457 afs_int32 C_afs_GetCellByName; /* afs_resource.c*/
458 afs_int32 C_afs_NewCell; /* afs_resource.c*/
459 afs_int32 C_afs_GetUser; /* afs_resource.c*/
460 afs_int32 C_afs_PutUser; /* afs_resource.c*/
461 afs_int32 C_afs_SetPrimary; /* afs_resource.c*/
462 afs_int32 C_CheckVLDB; /* afs_resource.c*/
463 afs_int32 C_afs_GetVolume; /* afs_resource.c*/
464 afs_int32 C_afs_GetVolumeByName; /* afs_resource.c*/
465 afs_int32 C_InstallVolumeEntry; /* afs_resource.c*/
466 afs_int32 C_InstallVolumeInfo; /* afs_resource.c*/
467 afs_int32 C_afs_FindServer; /* afs_resource.c*/
468 afs_int32 C_afs_PutVolume; /* afs_resource.c*/
469 afs_int32 C_afs_random; /* afs_resource.c*/
470 afs_int32 C_ranstage; /* afs_resource.c*/
471 afs_int32 C_RemoveUserConns; /* afs_resource.c*/
472 afs_int32 C_afs_MarinerLog; /* afs_resource.c*/
473 afs_int32 C_afs_vtoi; /* afs_resource.c*/
474 afs_int32 C_afs_GetServer; /* afs_resource.c*/
475 afs_int32 C_afs_SortServers; /* afs_resource.c*/
476 afs_int32 C_afs_Conn; /* afs_resource.c*/
477 afs_int32 C_afs_ConnByHost; /* afs_resource.c*/
478 afs_int32 C_afs_ConnByMHosts; /* afs_resource.c*/
479 afs_int32 C_afs_Analyze; /* afs_resource.c*/
480 afs_int32 C_afs_PutConn; /* afs_resource.c*/
481 afs_int32 C_afs_ResetVolumeInfo; /* afs_resource.c*/
482 afs_int32 C_StartLogFile; /* afs_resource.c*/
483 afs_int32 C_afs_SetLogFile; /* afs_resource.c*/
484 afs_int32 C_EndLogFile; /* afs_resource.c*/
485 afs_int32 C_afs_dp; /* afs_resource.c*/
486 afs_int32 C_fprf; /* afs_resource.c*/
487 afs_int32 C_fprint; /* afs_resource.c*/
488 afs_int32 C_fprintn; /* afs_resource.c*/
489 afs_int32 C_afs_CheckLocks; /* afs_resource.c*/
490 afs_int32 C_puttofile; /* afs_resource.c*/
491 afs_int32 C_shutdown_AFS; /* afs_resource.c*/
492 afs_int32 C_afs_CheckCacheResets; /* afs_resource.c*/
493 afs_int32 C_afs_GCUserData; /* afs_resource.c*/
494 afs_int32 C_VSleep; /* afs_resource.c*/
495 afs_int32 C_afs_CheckCode; /* afs_resource.c*/
496 afs_int32 C_afs_CopyError; /* afs_resource.c*/
497 afs_int32 C_afs_FinalizeReq; /* afs_resource.c*/
498 afs_int32 C_afs_cv2string; /* afs_resource.c*/
499 afs_int32 C_afs_FindVolCache; /* afs_resource.c*/
500 afs_int32 C_afs_GetVolCache; /* afs_resource.c*/
501 afs_int32 C_afs_GetVolSlot; /* afs_resource.c*/
502 afs_int32 C_afs_WriteVolCache; /* afs_resource.c*/
503 afs_int32 C_afs_UFSGetVolSlot; /* afs_resource.c*/
504 afs_int32 C_afs_CheckVolumeNames; /* afs_resource.c*/
505 afs_int32 C_afs_MemGetVolSlot; /* afs_resource.c*/
506 afs_int32 C_print_internet_address; /* afs_resource.c*/
507 afs_int32 C_CheckVLServer; /* afs_resource.c*/
508 afs_int32 C_HaveCallBacksFrom; /* afs_resource.c*/
509 afs_int32 C_ServerDown; /* afs_resource.c*/
510 afs_int32 C_afs_CheckServers; /* afs_resource.c*/
511 afs_int32 C_afs_AddToMean; /* afs_stat.c*/
512 afs_int32 C_afs_GetCMStat; /* afs_stat.c*/
513 afs_int32 C_afs_getpage; /* afs_sun_subr.c*/
514 afs_int32 C_afs_putpage; /* afs_sun_subr.c*/
515 afs_int32 C_afs_nfsrdwr; /* afs_sun_subr.c*/
516 afs_int32 C_afs_map; /* afs_sun_subr.c*/
517 afs_int32 C_afs_cmp; /* afs_sun_subr.c*/
518 afs_int32 C_afs_cntl; /* afs_sun_subr.c*/
519 afs_int32 C_afs_dump; /* afs_sun_subr.c*/
520 afs_int32 C_afs_realvp; /* afs_sun_subr.c*/
521 afs_int32 C_afs_PageLeft; /* afs_sun_subr.c*/
522 afs_int32 C_afsinit; /* afs_vfsops.c*/
523 afs_int32 C_afs_mount; /* afs_vfsops.c*/
524 afs_int32 C_afs_unmount; /* afs_vfsops.c*/
525 afs_int32 C_afs_root; /* afs_vfsops.c*/
526 afs_int32 C_afs_statfs; /* afs_vfsops.c*/
527 afs_int32 C_afs_sync; /* afs_vfsops.c*/
528 afs_int32 C_afs_vget; /* afs_vfsops.c*/
529 afs_int32 C_afs_mountroot; /* afs_vfsops.c*/
530 afs_int32 C_afs_swapvp; /* afs_vfsops.c*/
531 afs_int32 C_afs_AddMarinerName; /* afs_vnodeops.c*/
532 afs_int32 C_afs_setpag; /* afs_vnodeops.c*/
533 afs_int32 C_genpag; /* afs_vnodeops.c*/
534 afs_int32 C_getpag; /* afs_vnodeops.c*/
535 afs_int32 C_afs_GetMariner; /* afs_vnodeops.c*/
536 afs_int32 C_afs_badop; /* afs_vnodeops.c*/
537 afs_int32 C_afs_index; /* afs_vnodeops.c*/
538 afs_int32 C_afs_noop; /* afs_vnodeops.c*/
539 afs_int32 C_afs_open; /* afs_vnodeops.c*/
540 afs_int32 C_afs_closex; /* afs_vnodeops.c*/
541 afs_int32 C_afs_close; /* afs_vnodeops.c*/
542 afs_int32 C_afs_MemWrite; /* afs_vnodeops.c*/
543 afs_int32 C_afs_write; /* afs_vnodeops.c*/
544 afs_int32 C_afs_UFSWrite; /* afs_vnodeops.c*/
545 afs_int32 C_afs_rdwr; /* afs_vnodeops.c*/
546 afs_int32 C_afs_MemRead; /* afs_vnodeops.c*/
547 afs_int32 C_afs_read; /* afs_vnodeops.c*/
548 afs_int32 C_FIXUPSTUPIDINODE; /* afs_vnodeops.c*/
549 afs_int32 C_afs_UFSRead; /* afs_vnodeops.c*/
550 afs_int32 C_afs_CopyOutAttrs; /* afs_vnodeops.c*/
551 afs_int32 C_afs_getattr; /* afs_vnodeops.c*/
552 afs_int32 C_afs_VAttrToAS; /* afs_vnodeops.c*/
553 afs_int32 C_afs_setattr; /* afs_vnodeops.c*/
554 afs_int32 C_EvalMountPoint; /* afs_vnodeops.c*/
555 afs_int32 C_afs_access; /* afs_vnodeops.c*/
556 afs_int32 C_ENameOK; /* afs_vnodeops.c*/
557 afs_int32 C_HandleAtName; /* afs_vnodeops.c*/
558 afs_int32 C_getsysname; /* afs_vnodeops.c*/
559 afs_int32 C_strcat; /* afs_vnodeops.c*/
560 afs_int32 C_afs_lookup; /* afs_vnodeops.c*/
561 afs_int32 C_afs_create; /* afs_vnodeops.c*/
562 afs_int32 C_afs_LocalHero; /* afs_vnodeops.c*/
563 afs_int32 C_FetchWholeEnchilada; /* afs_vnodeops.c*/
564 afs_int32 C_afs_remove; /* afs_vnodeops.c*/
565 afs_int32 C_afs_link; /* afs_vnodeops.c*/
566 afs_int32 C_afs_rename; /* afs_vnodeops.c*/
567 afs_int32 C_afs_InitReq; /* afs_vnodeops.c*/
568 afs_int32 C_afs_mkdir; /* afs_vnodeops.c*/
569 afs_int32 C_BlobScan; /* afs_vnodeops.c*/
570 afs_int32 C_afs_rmdir; /* afs_vnodeops.c*/
571 afs_int32 C_RecLen; /* afs_vnodeops.c*/
572 afs_int32 C_RoundToInt; /* afs_vnodeops.c*/
573 afs_int32 C_afs_readdir_with_offlist; /* afs_vnodeops.c*/
574 afs_int32 C_DIRSIZ_LEN; /* afs_vnodeops.c*/
575 afs_int32 C_afs_readdir_move; /* afs_vnodeops.c*/
576 afs_int32 C_afs_readdir_iter; /* afs_vnodeops.c*/
577 afs_int32 C_HandleFlock; /* afs_vnodeops.c*/
578 afs_int32 C_afs_readdir; /* afs_vnodeops.c*/
579 afs_int32 C_afs_symlink; /* afs_vnodeops.c*/
580 afs_int32 C_afs_HandleLink; /* afs_vnodeops.c*/
581 afs_int32 C_afs_MemHandleLink; /* afs_vnodeops.c*/
582 afs_int32 C_afs_UFSHandleLink; /* afs_vnodeops.c*/
583 afs_int32 C_afs_readlink; /* afs_vnodeops.c*/
584 afs_int32 C_afs_fsync; /* afs_vnodeops.c*/
585 afs_int32 C_afs_inactive; /* afs_vnodeops.c*/
586 afs_int32 C_afs_ustrategy; /* afs_vnodeops.c*/
587 afs_int32 C_afs_bread; /* afs_vnodeops.c*/
588 afs_int32 C_afs_brelse; /* afs_vnodeops.c*/
589 afs_int32 C_afs_bmap; /* afs_vnodeops.c*/
590 afs_int32 C_afs_fid; /* afs_vnodeops.c*/
591 afs_int32 C_afs_strategy; /* afs_vnodeops.c*/
592 afs_int32 C_afs_FakeClose; /* afs_vnodeops.c*/
593 afs_int32 C_afs_FakeOpen; /* afs_vnodeops.c*/
594 afs_int32 C_afs_StoreOnLastReference; /* afs_vnodeops.c*/
595 afs_int32 C_afs_GetAccessBits; /* afs_vnodeops.c*/
596 afs_int32 C_afs_AccessOK; /* afs_vnodeops.c*/
597 afs_int32 C_shutdown_vnodeops; /* afs_vnodeops.c*/
598 afs_int32 C_afsio_copy; /* afs_vnodeops.c*/
599 afs_int32 C_afsio_trim; /* afs_vnodeops.c*/
600 afs_int32 C_afs_page_read; /* afs_vnodeops.c*/
601 afs_int32 C_afs_page_write; /* afs_vnodeops.c*/
602 afs_int32 C_afsio_skip; /* afs_vnodeops.c*/
603 afs_int32 C_afs_read1dir; /* afs_vnodeops.c*/
604 afs_int32 C_afs_get_groups_from_pag; /* afs_vnodeops.c*/
605 afs_int32 C_afs_get_pag_from_groups; /* afs_vnodeops.c*/
606 afs_int32 C_PagInCred; /* afs_vnodeops.c*/
607 afs_int32 C_afs_getgroups; /* afs_vnodeops.c*/
608 afs_int32 C_setpag; /* afs_vnodeops.c*/
609 afs_int32 C_afs_setgroups; /* afs_vnodeops.c*/
610 afs_int32 C_afs_page_in; /* afs_vnodeops.c*/
611 afs_int32 C_afs_page_out; /* afs_vnodeops.c*/
612 afs_int32 C_AddPag; /* afs_vnodeops.c*/
613 afs_int32 C_afs_AdvanceFD; /* afs_vnodeops.c*/
614 afs_int32 C_afs_lockf; /* afs_vnodeops.c*/
615 afs_int32 C_afs_xsetgroups; /* afs_vnodeops.c*/
616 afs_int32 C_afs_nlinks; /* afs_vnodeops.c*/
617 afs_int32 C_DoLockWarning; /* afs_vnodeops.c*/
618 afs_int32 C_afs_lockctl; /* afs_vnodeops.c*/
619 afs_int32 C_afs_xflock; /* afs_vnodeops.c*/
620 afs_int32 C_PSetSPrefs; /* afs_pioctl.c*/
621 afs_int32 C_PGetSPrefs; /* afs_pioctl.c*/
622 afs_int32 C_afs_warn; /* afs_resource.c */
623 afs_int32 C_afs_warnuser; /* afs_resource.c */
624 afs_int32 C_afs_pagein; /* afs_hp_subr.c*/
625 afs_int32 C_afs_pageout; /* afs_hp_subr.c*/
626 afs_int32 C_afs_hp_strategy; /* afs_hp_subr.c*/
627 afs_int32 C_PGetCPrefs; /* afs_pioctl.c */
628 afs_int32 C_PSetCPrefs; /* afs_pioctl.c */
629 afs_int32 C_SRXAFSCB_WhoAreYou; /* afs_callback.c*/
630 afs_int32 C_afs_DiscardDCache; /* afs_dcache.c*/
631 afs_int32 C_afs_FreeDiscardedDCache; /* afs_dcache.c*/
632 afs_int32 C_afs_MaybeFreeDiscardedDCache; /* afs_dcache.c*/
633 afs_int32 C_PFlushMount; /* afs_pioctl.c */
634 afs_int32 C_SRXAFSCB_GetServerPrefs; /* afs_callback.c*/
635 afs_int32 C_SRXAFSCB_GetCellServDB; /* afs_callback.c*/
636 afs_int32 C_SRXAFSCB_GetLocalCell; /* afs_callback.c*/
637 afs_int32 C_afs_MarshallCacheConfig; /* afs_callback.c*/
638 afs_int32 C_SRXAFSCB_GetCacheConfig; /* afs_callback.c*/
639 afs_int32 C_SRXAFSCB_GetCE64; /* afs_callback.c*/
642 struct afs_CMMeanStats {
643 struct afs_MeanStats something; /* fill this in */
647 struct afs_CMCallStats callInfo;
648 struct afs_CMMeanStats meanInfo;
652 * This is the structure accessible by specifying the
653 * AFSCB_XSTATSCOLL_CALL_INFO collection to the xstat package.
655 extern struct afs_CMStats afs_cmstats;
658 * Constants to track downtime durations:
659 * Bucket 0: dur <= 10 min
660 * Bucket 1: 10 min < dur <= 30 min
661 * Bucket 2: 30 min < dur <= 1 hour
662 * Bucket 3: 1 hour < dur <= 2 hours
663 * Bucket 4: 2 hours < dur <= 4 hours
664 * Bucket 5: 4 hours < dur <= 8 hours
665 * Bucket 6: dur >= 8 hours
667 #define AFS_STATS_NUM_DOWNTIME_DURATION_BUCKETS 7
669 #define AFS_STATS_MAX_DOWNTIME_DURATION_BUCKET0 600 /*10 minutes*/
670 #define AFS_STATS_MAX_DOWNTIME_DURATION_BUCKET1 1800 /*30 minutes*/
671 #define AFS_STATS_MAX_DOWNTIME_DURATION_BUCKET2 3600 /*60 minutes*/
672 #define AFS_STATS_MAX_DOWNTIME_DURATION_BUCKET3 7200 /*2 hours*/
673 #define AFS_STATS_MAX_DOWNTIME_DURATION_BUCKET4 14400 /*4 hours*/
674 #define AFS_STATS_MAX_DOWNTIME_DURATION_BUCKET5 28800 /*8 hours*/
677 * Constants to track downtime incidents:
678 * Bucket 0: down = 0 times
679 * Bucket 1: down = 1 time
680 * Bucket 2: 1 time < down <= 5 times
681 * Bucket 3: 5 times < down <= 10 times
682 * Bucket 4: 10 times < down <= 50 times
683 * Bucket 5: down > 50 times
685 #define AFS_STATS_NUM_DOWNTIME_INCIDENTS_BUCKETS 6
687 #define AFS_STATS_MAX_DOWNTIME_INCIDENTS_BUCKET0 0
688 #define AFS_STATS_MAX_DOWNTIME_INCIDENTS_BUCKET1 1
689 #define AFS_STATS_MAX_DOWNTIME_INCIDENTS_BUCKET2 5
690 #define AFS_STATS_MAX_DOWNTIME_INCIDENTS_BUCKET3 10
691 #define AFS_STATS_MAX_DOWNTIME_INCIDENTS_BUCKET4 50
694 * Numbers used to track aggregate up/downtime stats for servers. We'll
695 * keep these numbers separately for FS and VL server records, and then
696 * again separately for servers in the same cell as this client machine
697 * and those outside the client's cell.
699 struct afs_stats_SrvUpDownInfo {
700 afs_int32 numTtlRecords; /*# records, active or inactive*/
701 afs_int32 numUpRecords; /*# (active) records currently marked up*/
702 afs_int32 numDownRecords; /*# (active) records currently marked down*/
703 afs_int32 sumOfRecordAges; /*Sum of server record lifetimes*/
704 afs_int32 ageOfYoungestRecord; /*Age of youngest server record*/
705 afs_int32 ageOfOldestRecord; /*Age of oldest server record*/
706 afs_int32 numDowntimeIncidents; /*Number of (completed) downtime incidents*/
707 afs_int32 numRecordsNeverDown; /*Number of server records never marked down*/
708 afs_int32 maxDowntimesInARecord; /*Max downtimes seen by any record*/
709 afs_int32 sumOfDowntimes; /*Sum of all (completed) downtimes, in seconds*/
710 afs_int32 shortestDowntime; /*Shortest downtime, in seconds*/
711 afs_int32 longestDowntime; /*Longest downtime, in seconds*/
713 * Arrays keeping distributions on downtime durations and number of
714 * downtime incidents.
716 afs_int32 downDurations[AFS_STATS_NUM_DOWNTIME_DURATION_BUCKETS];
717 afs_int32 downIncidents[AFS_STATS_NUM_DOWNTIME_INCIDENTS_BUCKETS];
721 * Define indices for the server up/downtime arrays below.
723 #define AFS_STATS_UPDOWN_IDX_SAME_CELL 0
724 #define AFS_STATS_UPDOWN_IDX_DIFF_CELL 1
727 * Performance numbers for the Cache Manager.
729 struct afs_stats_CMPerf {
730 afs_int32 numPerfCalls; /*# of performance calls rcvd*/
732 afs_int32 epoch; /*Cache Manager epoch time*/
733 afs_int32 numCellsVisible; /*# cells we know about*/
734 afs_int32 numCellsContacted; /*# cells corresponded with*/
735 afs_int32 dlocalAccesses; /*# data accesses to files within cell*/
736 afs_int32 vlocalAccesses; /*# stat accesses to files within cell*/
737 afs_int32 dremoteAccesses; /*# data accesses to files outside of cell*/
738 afs_int32 vremoteAccesses; /*# stat accesses to files outside of cell*/
739 afs_int32 cacheNumEntries; /*# cache entries*/
740 afs_int32 cacheBlocksTotal; /*# (1K) blocks configured for cache*/
741 afs_int32 cacheBlocksInUse; /*# cache blocks actively in use*/
742 afs_int32 cacheBlocksOrig; /*# cache blocks at bootup*/
743 afs_int32 cacheMaxDirtyChunks; /*Max # dirty cache chunks tolerated*/
744 afs_int32 cacheCurrDirtyChunks; /*Current # dirty cache chunks*/
745 afs_int32 dcacheHits; /*# data files found in local cache*/
746 afs_int32 vcacheHits; /*# stat entries found in local cache*/
747 afs_int32 dcacheMisses; /*# data files NOT found in local cache*/
748 afs_int32 vcacheMisses; /*# stat entries NOT found in local cache*/
749 afs_int32 cacheFlushes; /*# files flushed from cache*/
750 afs_int32 cacheFilesReused; /*# cache files reused*/
751 afs_int32 ProtServerAddr; /*Addr of Protection Server used*/
752 afs_int32 vcacheXAllocs; /* Additionally allocated vcaches */
753 afs_int32 dcacheXAllocs; /* Additionally allocated dcaches */
756 * Some stats related to our buffer package
758 afs_int32 bufAlloced; /* # of buffers allocated by afs */
759 afs_int32 bufHits; /* # of pages found on buffer cache */
760 afs_int32 bufMisses; /* # of pages NOT found on buffer cache */
761 afs_int32 bufFlushDirty; /* # of cached dirty bufs flushed because all busy */
764 * Stats that keep track of all allocated/used objects in CM
766 afs_int32 LargeBlocksActive; /* # of currently used large free pool entries */
767 afs_int32 LargeBlocksAlloced; /* # of allocated large free pool entries */
768 afs_int32 SmallBlocksActive; /* # of currently used small free pool entries */
769 afs_int32 SmallBlocksAlloced; /* # of allocated used small free pool entries */
770 afs_int32 MediumBlocksActive; /* # of currently used medium free pool entries */
771 afs_int32 MediumBlocksAlloced; /* # of allocated used medium free pool entries */
772 afs_int32 OutStandingMemUsage; /* # of alloced memory */
773 afs_int32 OutStandingAllocs; /* Outstanding osi_allocs (no osi_frees yet) */
774 afs_int32 CallBackAlloced; /* # callback structures allocated */
775 afs_int32 CallBackFlushes; /* # callback flush operations performed */
778 * Accounting stats having to do with the server table & records.
780 afs_int32 srvRecords; /*# of servers currently on record*/
781 afs_int32 srvRecordsHWM; /* Server record high water mark */
782 afs_int32 srvNumBuckets; /* Num server hash chain buckets */
783 afs_int32 srvMaxChainLength; /* Max server hash chain length */
784 afs_int32 srvMaxChainLengthHWM; /* Server hash chain high water mark */
787 * Stats having to do with the systype upon which the Cache Manager
790 afs_int32 sysName_ID; /*Sysname ID for host hardware*/
793 * Stats recording downtime characteristics for each File Server and Volume
794 * Location Server we've dealt with, both within the same cell and in
797 struct afs_stats_SrvUpDownInfo fs_UpDown[2];
798 struct afs_stats_SrvUpDownInfo vl_UpDown[2];
801 afs_uint32 osiread_efaults;
802 afs_int32 cacheBlocksDiscarded; /*# cache blocks free but not truncated */
804 * Spares for future expansion.
806 afs_int32 spare[13]; /*Spares*/
811 * Values denoting the File Server and Cache Manager opcodes.
813 #define AFS_STATS_FS_RPCIDX_FETCHDATA 0
814 #define AFS_STATS_FS_RPCIDX_FETCHACL 1
815 #define AFS_STATS_FS_RPCIDX_FETCHSTATUS 2
816 #define AFS_STATS_FS_RPCIDX_STOREDATA 3
817 #define AFS_STATS_FS_RPCIDX_STOREACL 4
818 #define AFS_STATS_FS_RPCIDX_STORESTATUS 5
819 #define AFS_STATS_FS_RPCIDX_REMOVEFILE 6
820 #define AFS_STATS_FS_RPCIDX_CREATEFILE 7
821 #define AFS_STATS_FS_RPCIDX_RENAME 8
822 #define AFS_STATS_FS_RPCIDX_SYMLINK 9
823 #define AFS_STATS_FS_RPCIDX_LINK 10
824 #define AFS_STATS_FS_RPCIDX_MAKEDIR 11
825 #define AFS_STATS_FS_RPCIDX_REMOVEDIR 12
826 #define AFS_STATS_FS_RPCIDX_SETLOCK 13
827 #define AFS_STATS_FS_RPCIDX_EXTENDLOCK 14
828 #define AFS_STATS_FS_RPCIDX_RELEASELOCK 15
829 #define AFS_STATS_FS_RPCIDX_GETSTATISTICS 16
830 #define AFS_STATS_FS_RPCIDX_GIVEUPCALLBACKS 17
831 #define AFS_STATS_FS_RPCIDX_GETVOLUMEINFO 18
832 #define AFS_STATS_FS_RPCIDX_GETVOLUMESTATUS 19
833 #define AFS_STATS_FS_RPCIDX_SETVOLUMESTATUS 20
834 #define AFS_STATS_FS_RPCIDX_GETROOTVOLUME 21
835 #define AFS_STATS_FS_RPCIDX_CHECKTOKEN 22
836 #define AFS_STATS_FS_RPCIDX_GETTIME 23
837 #define AFS_STATS_FS_RPCIDX_NGETVOLUMEINFO 24
838 #define AFS_STATS_FS_RPCIDX_BULKSTATUS 25
839 #define AFS_STATS_FS_RPCIDX_XSTATSVERSION 26
840 #define AFS_STATS_FS_RPCIDX_GETXSTATS 27
841 #define AFS_STATS_FS_RPCIDX_XLOOKUP 28
842 #define AFS_STATS_FS_RPCIDX_RESIDENCYRPCS 29
844 #define AFS_STATS_NUM_FS_RPC_OPS 29
846 #define AFS_STATS_FS_XFERIDX_FETCHDATA 0
847 #define AFS_STATS_FS_XFERIDX_STOREDATA 1
849 #define AFS_STATS_NUM_FS_XFER_OPS 2
851 #define AFS_STATS_CM_RPCIDX_CALLBACK 0
852 #define AFS_STATS_CM_RPCIDX_INITCALLBACKSTATE 1
853 #define AFS_STATS_CM_RPCIDX_PROBE 2
854 #define AFS_STATS_CM_RPCIDX_GETLOCK 3
855 #define AFS_STATS_CM_RPCIDX_GETCE 4
856 #define AFS_STATS_CM_RPCIDX_XSTATSVERSION 5
857 #define AFS_STATS_CM_RPCIDX_GETXSTATS 6
859 #define AFS_STATS_NUM_CM_RPC_OPS 7
863 * Record to track timing numbers for each Cache Manager RPC operation.
865 struct afs_stats_opTimingData {
866 afs_int32 numOps; /*Number of operations executed*/
867 afs_int32 numSuccesses; /*Number of successful ops*/
868 osi_timeval_t sumTime; /*Sum of sample timings*/
869 osi_timeval_t sqrTime; /*Sum of squares of sample timings */
870 osi_timeval_t minTime; /*Minimum timing value observed*/
871 osi_timeval_t maxTime; /*Minimum timing value observed*/
875 * We discriminate byte size transfers into this many buckets.
877 #define AFS_STATS_NUM_XFER_BUCKETS 9
879 #define AFS_STATS_MAXBYTES_BUCKET0 128
880 #define AFS_STATS_MAXBYTES_BUCKET1 1024
881 #define AFS_STATS_MAXBYTES_BUCKET2 8192
882 #define AFS_STATS_MAXBYTES_BUCKET3 16384
883 #define AFS_STATS_MAXBYTES_BUCKET4 32768
884 #define AFS_STATS_MAXBYTES_BUCKET5 131072
885 #define AFS_STATS_MAXBYTES_BUCKET6 524288
886 #define AFS_STATS_MAXBYTES_BUCKET7 1048576
889 * Record to track timings and byte sizes for data transfers.
891 struct afs_stats_xferData {
892 afs_int32 numXfers; /*Number of successful xfers*/
893 afs_int32 numSuccesses; /*Number of successful xfers*/
894 osi_timeval_t sumTime; /*Sum of timing values*/
895 osi_timeval_t sqrTime; /*Sum of squares of timing values */
896 osi_timeval_t minTime; /*Minimum xfer time recorded*/
897 osi_timeval_t maxTime; /*Maximum xfer time recorded*/
898 afs_int32 sumBytes; /*Sum of KBytes transferred*/
899 afs_int32 minBytes; /*Minimum value observed*/
900 afs_int32 maxBytes; /*Maximum value observed*/
901 afs_int32 count[AFS_STATS_NUM_XFER_BUCKETS]; /*Tally for each range of bytes*/
905 * Macros to operate on time values.
907 * afs_stats_TimeLessThan(t1, t2) Non-zero if t1 is less than t2
908 * afs_stats_TimeGreaterThan(t1, t2) Non-zero if t1 is greater than t2
909 * afs_stats_GetDiff(t3, t1, t2) Set t3 to the difference between
910 * t1 and t2 (t1 is less than or
912 * afs_stats_AddTo(t1, t2) Add t2 to t1
913 * afs_stats_TimeAssign(t1, t2) Assign time t2 to t1
914 * afs_stats_SquareAddTo(t1,t2) Add square of t2 to t1
916 #define afs_stats_TimeLessThan(t1, t2) \
917 ((t1.tv_sec < t2.tv_sec) ? 1 : \
918 (t1.tv_sec > t2.tv_sec) ? 0 : \
919 (t1.tv_usec < t2.tv_usec) ? 1 : \
922 #define afs_stats_TimeGreaterThan(t1, t2) \
923 ((t1.tv_sec > t2.tv_sec) ? 1 : \
924 (t1.tv_sec < t2.tv_sec) ? 0 : \
925 (t1.tv_usec > t2.tv_usec) ? 1 : \
928 #define afs_stats_GetDiff(t3, t1, t2) \
931 * If the microseconds of the later time are smaller than \
932 * the earlier time, set up for proper subtraction (doing \
935 if (t2.tv_usec < t1.tv_usec) { \
936 t2.tv_usec += 1000000; \
939 t3.tv_sec = t2.tv_sec - t1.tv_sec; \
940 t3.tv_usec = t2.tv_usec - t1.tv_usec; \
943 #define afs_stats_AddTo(t1, t2) \
945 t1.tv_sec += t2.tv_sec; \
946 t1.tv_usec += t2.tv_usec; \
947 if (t1.tv_usec > 1000000) { \
948 t1.tv_usec -= 1000000; \
953 #define afs_stats_TimeAssign(t1, t2) \
955 t1.tv_sec = t2.tv_sec; \
956 t1.tv_usec = t2.tv_usec; \
959 * We calculate the square of a timeval as follows:
961 * The timeval struct contains two ints - the number of seconds and the
962 * number of microseconds. These two numbers together gives the correct
963 * amount of time => t = t.tv_sec + (t.tv_usec / 1000000);
965 * if x = t.tv_sec and y = (t.tv_usec / 1000000) then the square is simply:
969 * Since we are trying to avoid floating point math, we use the following
970 * observations to simplify the above equation:
972 * The resulting t.tv_sec (x') only depends upon the x^2 + 2xy portion
973 * of the equation. This is easy to see if you think about y^2 in
974 * decimal notation. y^2 is always < 0 since y < 0. Therefore in calculating
975 * x', we can ignore y^2 (we do need to take care of rounding which is
978 * Similarly, in calculating t.tv_usec (y') we can ignore x^2 and concentrate
981 * You'll notice that both x' and y' depend upon 2xy. We can further
982 * simplify things by realizing that x' depends on upon the integer
983 * portion of the 2xy term. We can get part of this integer by
984 * multiplying 2 * x * t.tv_usec and then truncating the result by
985 * / 1000000. Similarly, we can get the decimal portion of this term
986 * by performing the same multiplication and then % 1000000. It is
987 * possible that the decimal portion will in fact contain some of the
988 * integer portion (this will be taken care of when we ensure that y'
989 * is less than 1000000).
991 * The only other non-obvious calculation involves y^2. The key to
992 * understanding this part of the calculation is to expand y again
993 * in a nonobvious manner. We do this via the following expansion:
995 * y = t.tv_usec / 1000000;
996 * let abcdef represent the six digits of t.tv_usec then we have:
997 * t.tv_usec / 1000000 = abc/1000 + def/1000000;
1001 * y^2 = (abc/1000)^2 + 2 * (abc/1000) * (def/1000000) + (def/1000000)^2
1003 * Examining this equation yields the following observations:
1005 * The second term can be calculated by multiplying abc and def then
1006 * shifting the decimal correctly.
1008 * (def/1000000)^2 contributes only to rounding and we only round up
1011 * These two observations are the basis for the somewhat cryptic
1012 * calculation of usec^2 (i.e. they are the "tricks").
1015 #define afs_stats_SquareAddTo(t1, t2) \
1018 * We use some tricks here to avoid floating point arithmetic \
1020 if(t2.tv_sec > 0 ) \
1022 t1.tv_sec += t2.tv_sec * t2.tv_sec \
1023 + 2 * t2.tv_sec * t2.tv_usec /1000000; \
1024 t1.tv_usec += (2 * t2.tv_sec * t2.tv_usec) % 1000000 \
1025 + (t2.tv_usec / 1000)*(t2.tv_usec / 1000) \
1026 + 2 * (t2.tv_usec / 1000) * (t2.tv_usec % 1000) / 1000 \
1027 + (((t2.tv_usec % 1000) > 707) ? 1 : 0); \
1031 t1.tv_usec += (t2.tv_usec / 1000)*(t2.tv_usec / 1000) \
1032 + 2 * (t2.tv_usec / 1000) * (t2.tv_usec % 1000) / 1000 \
1033 + (((t2.tv_usec % 1000) > 707) ? 1 : 0); \
1035 if (t1.tv_usec > 1000000) { \
1036 t1.tv_usec -= 1000000; \
1045 * Structure recording RPC outcomes.
1047 struct afs_stats_RPCErrors {
1048 afs_int32 err_Server; /*Server down error*/
1049 afs_int32 err_Network; /*Network error*/
1050 afs_int32 err_Protection; /*Protection violation*/
1051 afs_int32 err_Volume; /*Volume-related error*/
1052 afs_int32 err_VolumeBusies; /*"Volume busy conditions encountered*/
1053 afs_int32 err_Other; /*Misc other errors*/
1058 * Structure holding RPC interface opcode measurements for the Cache Manager.
1060 struct afs_stats_RPCOpInfo {
1061 struct afs_stats_opTimingData
1062 fsRPCTimes[AFS_STATS_NUM_FS_RPC_OPS]; /*Individual FS RPC op timings*/
1063 struct afs_stats_RPCErrors
1064 fsRPCErrors[AFS_STATS_NUM_FS_RPC_OPS]; /*Individual FS RPC op errors*/
1065 struct afs_stats_xferData
1066 fsXferTimes[AFS_STATS_NUM_FS_XFER_OPS]; /*Individual FS RPC xfer timings*/
1067 struct afs_stats_opTimingData
1068 cmRPCTimes[AFS_STATS_NUM_CM_RPC_OPS]; /*Individual CM RPC op timings*/
1072 * Structure holding authentication info for the CM.
1074 struct afs_stats_AuthentInfo {
1076 * This first set of fields don't have any history - they are simply
1077 * snapshots of the system at the time of the probe.
1079 afs_int32 curr_PAGs; /*Current number of PAGs*/
1080 afs_int32 curr_Records; /*Current # of records in table*/
1081 afs_int32 curr_AuthRecords; /*Current # of authenticated
1082 records (w/valid ticket)*/
1083 afs_int32 curr_UnauthRecords; /*Current # of unauthenticated
1084 records (w/o any ticket at all)*/
1085 afs_int32 curr_MaxRecordsInPAG; /*Max records for a single PAG*/
1086 afs_int32 curr_LongestChain; /*Length of longest current hash chain*/
1089 * This second set of fields are values accumulated over the lifetme
1090 * of the current CM incarnation.
1092 afs_int32 PAGCreations; /*# PAG creations*/
1093 afs_int32 TicketUpdates; /*# ticket additions/refreshes*/
1094 afs_int32 HWM_PAGs; /*High water mark - # PAGs*/
1095 afs_int32 HWM_Records; /* " - # records*/
1096 afs_int32 HWM_MaxRecordsInPAG; /* " - max records for a single PAG*/
1097 afs_int32 HWM_LongestChain; /* " - longest hash chain*/
1101 * [Un]replicated file access. These count the number of RXAFS_FetchData
1102 * calls get accomplished, and their need to call upon other replicas in
1105 struct afs_stats_AccessInfo {
1106 afs_int32 unreplicatedRefs; /*# references to unreplicated data*/
1107 afs_int32 replicatedRefs; /*# references to replicated data*/
1108 afs_int32 numReplicasAccessed; /*# replicas accessed*/
1109 afs_int32 maxReplicasPerRef; /*Max # replicas accessed per ref*/
1110 afs_int32 refFirstReplicaOK; /*# references satisfied by 1st replica*/
1114 * Structure holding authoring info for the CM. We keep track of
1115 * the results of writes on files and directories independently.
1116 * Results cover all objects in the cache uniformly.
1118 struct afs_stats_AuthorInfo {
1119 afs_int32 fileSameAuthor; /*File write by same author*/
1120 afs_int32 fileDiffAuthor; /*File write by diff author*/
1121 afs_int32 dirSameAuthor; /*Directory write by same author*/
1122 afs_int32 dirDiffAuthor; /*Directory write by diff author*/
1126 * Structure holding ``full'' CM peformance measurements.
1128 struct afs_stats_CMFullPerf {
1129 afs_int32 numFullPerfCalls; /*Number of accesses*/
1130 struct afs_stats_CMPerf perf; /*General performance stats*/
1131 struct afs_stats_RPCOpInfo rpc; /*RPC op stats*/
1132 struct afs_stats_AuthentInfo authent; /*Authentication stats*/
1133 struct afs_stats_AccessInfo accessinf; /*Access stats*/
1134 struct afs_stats_AuthorInfo author; /*Authorship stats*/
1138 * These are the storage declarations for the structures accessible
1139 * via the xstat package.
1141 extern struct afs_stats_CMPerf afs_stats_cmperf;
1142 extern struct afs_stats_CMFullPerf afs_stats_cmfullperf;
1143 extern afs_int32 afs_stats_XferSumBytes[];
1147 * We define routines to keep running counts and means. For the
1148 * running count, we have to concatenate the ``C_'' prefix on to
1149 * the routine name passed in as an argument to get the right
1152 #define AFS_STATCNT(arg) ((afs_cmstats.callInfo.C_ ## arg)++)
1154 #define AFS_MEANCNT(arg, value) \
1155 (afs_AddToMean(((afs_cmstats.meanInfo).(arg)),value))
1157 #endif /* AFS_NOSTATS */
1160 #endif /* __TRANSARC_AFS_STATS_H__ */