From ceae30e010d66148bb4585299001baef12d176f9 Mon Sep 17 00:00:00 2001 From: Troy Benjegerdes Date: Thu, 15 Jun 2006 16:52:59 +0000 Subject: [PATCH] DEVEL15-fs-getcache-show-more-20060615 show more info about cache usage, optionally (cherry picked from commit 176c2fddb95ced6c13e04e7492fc09b5551f273c) --- src/afs/afs_pioctl.c | 42 ++++++++++++++++++++++++++- src/afsd/afsd.c | 2 +- src/venus/fs.c | 69 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 102 insertions(+), 11 deletions(-) diff --git a/src/afs/afs_pioctl.c b/src/afs/afs_pioctl.c index 852704b05..2c4599b4c 100644 --- a/src/afs/afs_pioctl.c +++ b/src/afs/afs_pioctl.c @@ -2175,11 +2175,51 @@ DECL_PIOCTL(PSetCacheSize) DECL_PIOCTL(PGetCacheSize) { afs_int32 results[MAXGCSTATS]; - + afs_int32 flags; + register struct dcache * tdc; + int i, size; + AFS_STATCNT(PGetCacheSize); + + if (sizeof(afs_int32) == ainSize){ + memcpy((char *)&flags, ain, sizeof(afs_int32)); + } else if (0 == ainSize){ + flags = 0; + } else { + return EINVAL; + } + memset((char *)results, 0, sizeof(results)); results[0] = afs_cacheBlocks; results[1] = afs_blocksUsed; + results[2] = afs_cacheFiles; + + if (1 == flags){ + for (i = 0; i < afs_cacheFiles; i++) { + if (afs_indexFlags[i] & IFFree) results[3]++; + } + } else if (2 == flags){ + for (i = 0; i < afs_cacheFiles; i++) { + if (afs_indexFlags[i] & IFFree) results[3]++; + if (afs_indexFlags[i] & IFEverUsed) results[4]++; + if (afs_indexFlags[i] & IFDataMod) results[5]++; + if (afs_indexFlags[i] & IFDirtyPages) results[6]++; + if (afs_indexFlags[i] & IFAnyPages) results[7]++; + if (afs_indexFlags[i] & IFDiscarded) results[8]++; + + tdc = afs_indexTable[i]; + if (tdc){ + results[9]++; + size = tdc->validPos; + if ( 0 < size && size < (1<<12) ) results[10]++; + else if (size < (1<<14) ) results[11]++; + else if (size < (1<<16) ) results[12]++; + else if (size < (1<<18) ) results[13]++; + else if (size < (1<<20) ) results[14]++; + else if (size >= (1<<20) ) results[15]++; + } + } + } memcpy(aout, (char *)results, sizeof(results)); *aoutSize = sizeof(results); return 0; diff --git a/src/afsd/afsd.c b/src/afsd/afsd.c index 964b66f47..02311dc84 100644 --- a/src/afsd/afsd.c +++ b/src/afsd/afsd.c @@ -2396,7 +2396,7 @@ call_syscall(param1, param2, param3, param4, param5, param6, param7) param5, param6, param7); #endif - if (afsd_verbose) + if (afsd_debug) printf("SScall(%d, %d, %d)=%d ", AFS_SYSCALL, AFSCALL_CALL, param1, error); return (error); diff --git a/src/venus/fs.c b/src/venus/fs.c index cbd010ad7..0520ce166 100644 --- a/src/venus/fs.c +++ b/src/venus/fs.c @@ -1208,7 +1208,7 @@ GetCallerAccess(struct cmd_syndesc *as, char *arock) struct vcxstat2 stat; blob.out_size = sizeof(struct vcxstat2); blob.in_size = 0; - blob.out = &stat; + blob.out = (void *)&stat; code = pioctl(ti->data, VIOC_GETVCXSTATUS2, &blob, 1); if (code) { Die(errno, ti->data); @@ -2006,13 +2006,28 @@ SetCacheSizeCmd(struct cmd_syndesc *as, char *arock) static int GetCacheParmsCmd(struct cmd_syndesc *as, char *arock) { - afs_int32 code; + afs_int32 code, filesUsed; struct ViceIoctl blob; afs_int32 parms[MAXGCSIZE]; + double percentFiles, percentBlocks; + afs_int32 flags = 0; + + if (as->parms[0].items){ /* -files */ + flags = 1; + } else if (as->parms[1].items){ /* -excessive */ + flags = 2; + } else { + flags = 0; + } memset(parms, '\0', sizeof parms); /* avoid Purify UMR error */ - blob.in = NULL; - blob.in_size = 0; + if (flags){ + blob.in = (char *)&flags; + blob.in_size = sizeof(afs_int32); + } else { /* be backward compatible */ + blob.in = NULL; + blob.in_size = 0; + } blob.out_size = sizeof(parms); blob.out = (char *)parms; code = pioctl(0, VIOCGETCACHEPARMS, &blob, 1); @@ -2020,11 +2035,45 @@ GetCacheParmsCmd(struct cmd_syndesc *as, char *arock) Die(errno, NULL); return 1; } - printf("AFS using %d of the cache's available %d 1K byte blocks.\n", - parms[1], parms[0]); - if (parms[1] > parms[0]) - printf - ("[Cache guideline temporarily deliberately exceeded; it will be adjusted down but you may wish to increase the cache size.]\n"); + + if (!flags){ + printf("AFS using %d of the cache's available %d 1K byte blocks.\n", + parms[1], parms[0]); + if (parms[1] > parms[0]) + printf("[Cache guideline temporarily deliberately exceeded; it will be adjusted down but you may wish to increase the cache size.]\n"); + return 0; + } + + percentBlocks = ((double)parms[1]/parms[0]) * 100; + printf("AFS using %5.0f%% of cache blocks (%d of %d 1k blocks)\n", + percentBlocks, parms[1], parms[0]); + + filesUsed = parms[2] - parms[3]; + percentFiles = ((double)filesUsed/parms[2]) * 100; + printf(" %5.0f%% of the cache files (%d of %d files)\n", + percentFiles, filesUsed, parms[2]); + if (flags == 2){ + printf(" afs_cacheFiles: %10d\n", parms[2]); + printf(" IFFree: %10d\n", parms[3]); + printf(" IFEverUsed: %10d\n", parms[4]); + printf(" IFDataMod: %10d\n", parms[5]); + printf(" IFDirtyPages: %10d\n", parms[6]); + printf(" IFAnyPages: %10d\n", parms[7]); + printf(" IFDiscarded: %10d\n", parms[8]); + printf(" DCentries: %10d\n", parms[9]); + printf(" 0k- 4K: %10d\n", parms[10]); + printf(" 4k- 16k: %10d\n", parms[11]); + printf(" 16k- 64k: %10d\n", parms[12]); + printf(" 64k- 256k: %10d\n", parms[13]); + printf(" 256k- 1M: %10d\n", parms[14]); + printf(" >=1M: %10d\n", parms[15]); + } + + if (percentBlocks > 90) + printf("[cache size usage over 90%, consider increasing cache size]\n"); + if (percentFiles > 90) + printf("[cache file usage over 90%, consider increasing '-files' argument to afsd]\n"); + return 0; } @@ -3372,6 +3421,8 @@ defect 3069 ts = cmd_CreateSyntax("getcacheparms", GetCacheParmsCmd, 0, "get cache usage info"); + cmd_AddParm(ts, "-files", CMD_FLAG, CMD_OPTIONAL, "Show cach files used as well"); + cmd_AddParm(ts, "-excessive", CMD_FLAG, CMD_OPTIONAL, "excessively verbose cache stats"); ts = cmd_CreateSyntax("listcells", ListCellsCmd, 0, "list configured cells"); -- 2.39.5