Blame


1 a0d146ed 2005-07-12 devnull #include "stdinc.h"
2 a0d146ed 2005-07-12 devnull #include "dat.h"
3 a0d146ed 2005-07-12 devnull #include "fns.h"
4 a0d146ed 2005-07-12 devnull #include <bio.h>
5 a0d146ed 2005-07-12 devnull
6 a0d146ed 2005-07-12 devnull Biobuf bout;
7 a0d146ed 2005-07-12 devnull
8 a0d146ed 2005-07-12 devnull static void
9 a0d146ed 2005-07-12 devnull pie(IEntry *ie)
10 a0d146ed 2005-07-12 devnull {
11 a0d146ed 2005-07-12 devnull Bprint(&bout, "%22lld %V %3d %5d\n",
12 a0d146ed 2005-07-12 devnull ie->ia.addr, ie->score, ie->ia.type, ie->ia.size);
13 a0d146ed 2005-07-12 devnull }
14 a0d146ed 2005-07-12 devnull
15 a0d146ed 2005-07-12 devnull void
16 a0d146ed 2005-07-12 devnull usage(void)
17 a0d146ed 2005-07-12 devnull {
18 a0d146ed 2005-07-12 devnull fprint(2, "usage: printarenas [-B blockcachesize] config [arenaname...]\n");
19 a0d146ed 2005-07-12 devnull threadexitsall(0);
20 a0d146ed 2005-07-12 devnull }
21 a0d146ed 2005-07-12 devnull
22 a0d146ed 2005-07-12 devnull Config conf;
23 a0d146ed 2005-07-12 devnull
24 a0d146ed 2005-07-12 devnull int
25 a0d146ed 2005-07-12 devnull shoulddump(char *name, int argc, char **argv)
26 a0d146ed 2005-07-12 devnull {
27 a0d146ed 2005-07-12 devnull int i;
28 a0d146ed 2005-07-12 devnull
29 a0d146ed 2005-07-12 devnull if(argc == 0)
30 a0d146ed 2005-07-12 devnull return 1;
31 a0d146ed 2005-07-12 devnull for(i=0; i<argc; i++)
32 a0d146ed 2005-07-12 devnull if(strcmp(name, argv[i]) == 0)
33 a0d146ed 2005-07-12 devnull return 1;
34 a0d146ed 2005-07-12 devnull return 0;
35 a0d146ed 2005-07-12 devnull }
36 a0d146ed 2005-07-12 devnull
37 a0d146ed 2005-07-12 devnull enum
38 a0d146ed 2005-07-12 devnull {
39 28b49df3 2006-07-18 devnull ClumpChunks = 32*1024,
40 a0d146ed 2005-07-12 devnull };
41 a0d146ed 2005-07-12 devnull
42 a0d146ed 2005-07-12 devnull void
43 a0d146ed 2005-07-12 devnull dumparena(Arena *arena, u64int a)
44 a0d146ed 2005-07-12 devnull {
45 a0d146ed 2005-07-12 devnull IEntry ie;
46 a0d146ed 2005-07-12 devnull ClumpInfo *ci, *cis;
47 a0d146ed 2005-07-12 devnull u32int clump;
48 a0d146ed 2005-07-12 devnull int i, n, nskip;
49 a0d146ed 2005-07-12 devnull
50 a0d146ed 2005-07-12 devnull cis = MKN(ClumpInfo, ClumpChunks);
51 a0d146ed 2005-07-12 devnull nskip = 0;
52 a0d146ed 2005-07-12 devnull memset(&ie, 0, sizeof(IEntry));
53 a0d146ed 2005-07-12 devnull for(clump = 0; clump < arena->memstats.clumps; clump += n){
54 a0d146ed 2005-07-12 devnull n = ClumpChunks;
55 a0d146ed 2005-07-12 devnull if(n > arena->memstats.clumps - clump)
56 a0d146ed 2005-07-12 devnull n = arena->memstats.clumps - clump;
57 a0d146ed 2005-07-12 devnull if(readclumpinfos(arena, clump, cis, n) != n){
58 a0d146ed 2005-07-12 devnull fprint(2, "arena directory read failed: %r\n");
59 a0d146ed 2005-07-12 devnull break;
60 a0d146ed 2005-07-12 devnull }
61 a0d146ed 2005-07-12 devnull
62 a0d146ed 2005-07-12 devnull for(i = 0; i < n; i++){
63 a0d146ed 2005-07-12 devnull ci = &cis[i];
64 a0d146ed 2005-07-12 devnull ie.ia.type = ci->type;
65 a0d146ed 2005-07-12 devnull ie.ia.size = ci->uncsize;
66 a0d146ed 2005-07-12 devnull ie.ia.addr = a;
67 a0d146ed 2005-07-12 devnull a += ci->size + ClumpSize;
68 a0d146ed 2005-07-12 devnull ie.ia.blocks = (ci->size + ClumpSize + (1 << ABlockLog) - 1) >> ABlockLog;
69 a0d146ed 2005-07-12 devnull scorecp(ie.score, ci->score);
70 a0d146ed 2005-07-12 devnull pie(&ie);
71 a0d146ed 2005-07-12 devnull }
72 a0d146ed 2005-07-12 devnull }
73 a0d146ed 2005-07-12 devnull free(cis);
74 a0d146ed 2005-07-12 devnull }
75 a0d146ed 2005-07-12 devnull
76 a0d146ed 2005-07-12 devnull void
77 a0d146ed 2005-07-12 devnull threadmain(int argc, char *argv[])
78 a0d146ed 2005-07-12 devnull {
79 a0d146ed 2005-07-12 devnull int i;
80 a0d146ed 2005-07-12 devnull Index *ix;
81 a0d146ed 2005-07-12 devnull u32int bcmem;
82 a0d146ed 2005-07-12 devnull
83 a0d146ed 2005-07-12 devnull bcmem = 0;
84 a0d146ed 2005-07-12 devnull ARGBEGIN{
85 a0d146ed 2005-07-12 devnull case 'B':
86 a0d146ed 2005-07-12 devnull bcmem = unittoull(ARGF());
87 a0d146ed 2005-07-12 devnull break;
88 a0d146ed 2005-07-12 devnull default:
89 a0d146ed 2005-07-12 devnull usage();
90 a0d146ed 2005-07-12 devnull break;
91 a0d146ed 2005-07-12 devnull }ARGEND
92 a0d146ed 2005-07-12 devnull
93 a0d146ed 2005-07-12 devnull if(argc < 1)
94 a0d146ed 2005-07-12 devnull usage();
95 a0d146ed 2005-07-12 devnull
96 a0d146ed 2005-07-12 devnull ventifmtinstall();
97 a0d146ed 2005-07-12 devnull
98 a0d146ed 2005-07-12 devnull if(initventi(argv[0], &conf) < 0)
99 a0d146ed 2005-07-12 devnull sysfatal("can't init venti: %r");
100 a0d146ed 2005-07-12 devnull
101 a0d146ed 2005-07-12 devnull if(bcmem < maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16))
102 a0d146ed 2005-07-12 devnull bcmem = maxblocksize * (mainindex->narenas + mainindex->nsects * 4 + 16);
103 a0d146ed 2005-07-12 devnull if(0) fprint(2, "initialize %d bytes of disk block cache\n", bcmem);
104 a0d146ed 2005-07-12 devnull initdcache(bcmem);
105 a0d146ed 2005-07-12 devnull
106 a0d146ed 2005-07-12 devnull Binit(&bout, 1, OWRITE);
107 a0d146ed 2005-07-12 devnull ix = mainindex;
108 a0d146ed 2005-07-12 devnull for(i=0; i<ix->narenas; i++)
109 a0d146ed 2005-07-12 devnull if(shoulddump(ix->arenas[i]->name, argc-1, argv+1))
110 a0d146ed 2005-07-12 devnull dumparena(ix->arenas[i], ix->amap[i].start);
111 a0d146ed 2005-07-12 devnull Bterm(&bout);
112 a0d146ed 2005-07-12 devnull threadexitsall(0);
113 a0d146ed 2005-07-12 devnull }