/* * Disk Cache statistics */ #include #include "cache.h" #define reg register int verbose = 0; extern char * c1_4f(); main(argc, argv) char ** argv; { reg int i = 1, n; reg short * stats; reg Cache * cache; int dev = 0 int total; if (i < argc && argv[i][0]=='-') { verbose = 1; i ++; } if (i < argc) if ('a' <= argv[i][0] && argv[i][0] <= 'z') dev = argv[i][0] - 'a'; stats = Rwabs(CSTAT, 0L, 0, 0, dev); cache = Rwabs(CSTAT, 0L, 0, 1, dev); if (stats == NULL || cache == NULL) { printf("Cache not installed\n"); return 1; } total = stats[0]; if (total==0) { printf("No statistics yet\n"); return 1; } printf("Cache hits %s, ", c1_4f(stats[HITS], total)); printf("Disk reads %s, ", c1_4f(stats[READS]-stats[HITS], total)); printf("Disk writes %s; ", c1_4f(stats[WRITES], total)); printf("Buffer reclaims%s\n", c1_4f(stats[RECLMS], total)); if (!verbose) return 0; n = 0; for (i = 0; i < NSECT; i ++) { short avg, buf; avg = cache[i].avg; buf = cache[i].buf; if (avg > 0 || buf != NOBUF) { printf("%4d%c%5s ", i, (buf == NOBUF) ? '.' : ':', c1_4f(avg, total)); if (++n % 6 == 0) printf("\n"); } } printf("\n"); return 0; } /* convert a/b in %1.3f format */ char * c1_4f(a, b) int a, b; { register int i; register long l; register char * p; static char buf [12]; p = buf; l = a; i = a/b; *p++ = (0