#include "stdinc.h" #include "dat.h" #include "fns.h" int count[VtMaxLumpSize][VtMaxType]; Config conf; enum { ClumpChunks = 32*1024 }; static int readarenainfo(Arena *arena) { ClumpInfo *ci, *cis; u32int clump; int i, n, ok; if(arena->memstats.clumps) fprint(2, "reading directory for arena=%s with %d entries\n", arena->name, arena->memstats.clumps); cis = MKN(ClumpInfo, ClumpChunks); ok = 0; for(clump = 0; clump < arena->memstats.clumps; clump += n){ n = ClumpChunks; if(n > arena->memstats.clumps - clump) n = arena->memstats.clumps - clump; if((i=readclumpinfos(arena, clump, cis, n)) != n){ seterr(EOk, "arena directory read failed %d not %d: %r", i, n); ok = -1; break; } for(i = 0; i < n; i++){ ci = &cis[i]; if(ci->type >= VtMaxType || ci->uncsize >= VtMaxLumpSize) { fprint(2, "bad clump: %d: type = %d: size = %d\n", clump+i, ci->type, ci->uncsize); continue; } count[ci->uncsize][ci->type]++; } } free(cis); if(ok < 0) return TWID32; return clump; } static void clumpstats(Index *ix) { int ok; ulong clumps, n; int i, j, t; ok = 0; clumps = 0; for(i = 0; i < ix->narenas; i++){ n = readarenainfo(ix->arenas[i]); if(n == TWID32){ ok = -1; break; } clumps += n; } if(ok < 0) return; print("clumps = %ld\n", clumps); for(i=0; inarenas + mainindex->nsects * 4 + 16)) bcmem = maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16); if(0) fprint(2, "initialize %d bytes of disk block cache\n", bcmem); initdcache(bcmem); clumpstats(mainindex); threadexitsall(0); }