afs: more cache truncation stats 68/13168/10
authorMichael Meffie <mmeffie@sinenomine.net>
Mon, 20 Jun 2016 19:29:45 +0000 (15:29 -0400)
committerBenjamin Kaduk <kaduk@mit.edu>
Sun, 6 Dec 2020 22:37:44 +0000 (17:37 -0500)
Add counters for cache too full and waiting to drain occurrences. These
will be used in later commits to indicate how often the cache truncation
is required and how often the cache manager is waiting for cache
truncation to complete.

Change-Id: I4aa802729f0910dff1fb3e90b2d44d36df8bf8f3
Reviewed-on: https://gerrit.openafs.org/13168
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/afs/SOLARIS/osi_vnodeops.c
src/afs/afs.h
src/afs/afs_dcache.c

index e2cedf0..81147d5 100644 (file)
@@ -697,6 +697,8 @@ afs_nfsrdwr(struct vcache *avc, struct uio *auio, enum uio_rw arw,
           && (afs_blocksUsed > PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks))) {
        if (afs_blocksUsed - afs_blocksDiscarded >
            PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks)) {
+           if (afs_WaitForCacheDrain == 0)
+               afs_WaitForCacheDrainCount++;
            afs_WaitForCacheDrain = 1;
            afs_osi_Sleep(&afs_WaitForCacheDrain);
        }
index 407eb89..3492627 100644 (file)
@@ -1360,6 +1360,7 @@ extern afs_int32 *afs_dcnextTbl;  /*Dcache hash table links */
 extern afs_int32 afs_cacheFiles;       /*Size of afs_indexTable */
 extern afs_int32 afs_cacheBlocks;      /*1K blocks in cache */
 extern afs_int32 afs_cacheStats;       /*Stat entries in cache */
+extern afs_uint32 afs_WaitForCacheDrainCount;
 extern struct vcache *afs_vhashT[VCSIZE];      /*Stat cache hash table */
 extern struct afs_q afs_vhashTV[VCSIZE]; /* cache hash table on volume */
 extern afs_int32 afs_initState;        /*Initialization state */
index 2a03f2b..41eeb84 100644 (file)
@@ -95,6 +95,8 @@ afs_size_t afs_vmMappingEnd;  /* !< For large files (>= 2GB) the VM
 int afs_WaitForCacheDrain = 0;
 int afs_TruncateDaemonRunning = 0;
 int afs_CacheTooFull = 0;
+afs_uint32 afs_CacheTooFullCount = 0;
+afs_uint32 afs_WaitForCacheDrainCount = 0;
 
 afs_int32 afs_dcentries;       /*!< In-memory dcache entries */
 
@@ -395,6 +397,7 @@ void
 afs_MaybeWakeupTruncateDaemon(void)
 {
     if (!afs_CacheTooFull && afs_CacheIsTooFull()) {
+       afs_CacheTooFullCount++;
        afs_CacheTooFull = 1;
        if (!afs_TruncateDaemonRunning)
            afs_osi_Wakeup((int *)afs_CacheTruncateDaemon);
@@ -2435,6 +2438,8 @@ afs_GetDCache(struct vcache *avc, afs_size_t abyte,
            ReleaseReadLock(&avc->lock);
            while ((afs_blocksUsed - afs_blocksDiscarded) >
                   PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks)) {
+               if (afs_WaitForCacheDrain == 0)
+                   afs_WaitForCacheDrainCount++;
                afs_WaitForCacheDrain = 1;
                afs_osi_Sleep(&afs_WaitForCacheDrain);
            }
@@ -3781,6 +3786,8 @@ afs_ObtainDCacheForWriting(struct vcache *avc, afs_size_t filePos,
                ReleaseWriteLock(&avc->lock);
                if (afs_blocksUsed - afs_blocksDiscarded >
                    PERCENT(CM_WAITFORDRAINPCT, afs_cacheBlocks)) {
+                   if (afs_WaitForCacheDrain == 0)
+                       afs_WaitForCacheDrainCount++;
                    afs_WaitForCacheDrain = 1;
                    afs_osi_Sleep(&afs_WaitForCacheDrain);
                }