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
5 a0d146ed 2005-07-12 devnull int collectstats = 1;
6 a0d146ed 2005-07-12 devnull
7 a0d146ed 2005-07-12 devnull /* keep in sync with dat.h:/NStat */
8 a0d146ed 2005-07-12 devnull Statdesc statdesc[NStat] =
9 a0d146ed 2005-07-12 devnull {
10 a0d146ed 2005-07-12 devnull { "rpc total", },
11 a0d146ed 2005-07-12 devnull { "rpc reads", },
12 a0d146ed 2005-07-12 devnull { "rpc reads ok", },
13 a0d146ed 2005-07-12 devnull { "rpc reads failed", },
14 a0d146ed 2005-07-12 devnull { "rpc read bytes", },
15 a0d146ed 2005-07-12 devnull { "rpc read time", },
16 a0d146ed 2005-07-12 devnull { "rpc read cached", },
17 a0d146ed 2005-07-12 devnull { "rpc read cached time", },
18 a0d146ed 2005-07-12 devnull { "rpc read uncached", },
19 a0d146ed 2005-07-12 devnull { "rpc read uncached time "},
20 fa325e9b 2020-01-10 cross
21 a0d146ed 2005-07-12 devnull { "rpc writes", },
22 a0d146ed 2005-07-12 devnull { "rpc writes new", },
23 a0d146ed 2005-07-12 devnull { "rpc writes old", },
24 a0d146ed 2005-07-12 devnull { "rpc writes failed", },
25 a0d146ed 2005-07-12 devnull { "rpc write bytes", },
26 a0d146ed 2005-07-12 devnull { "rpc write time", },
27 a0d146ed 2005-07-12 devnull { "rpc write new time", },
28 a0d146ed 2005-07-12 devnull { "rpc write old time", },
29 a0d146ed 2005-07-12 devnull
30 a0d146ed 2005-07-12 devnull { "lump cache hits", },
31 a0d146ed 2005-07-12 devnull { "lump cache misses", },
32 a0d146ed 2005-07-12 devnull { "lump cache reads", },
33 a0d146ed 2005-07-12 devnull { "lump cache writes", },
34 a0d146ed 2005-07-12 devnull { "lump cache size", },
35 a0d146ed 2005-07-12 devnull { "lump cache stall", },
36 a0d146ed 2005-07-12 devnull { "lump cache read time", },
37 a0d146ed 2005-07-12 devnull
38 a0d146ed 2005-07-12 devnull { "disk cache hits", },
39 a0d146ed 2005-07-12 devnull { "disk cache misses", },
40 a0d146ed 2005-07-12 devnull { "disk cache lookups", },
41 a0d146ed 2005-07-12 devnull { "disk cache reads", },
42 a0d146ed 2005-07-12 devnull { "disk cache writes", },
43 a0d146ed 2005-07-12 devnull { "disk cache dirty", },
44 a0d146ed 2005-07-12 devnull { "disk cache size", },
45 a0d146ed 2005-07-12 devnull { "disk cache flushes", },
46 a0d146ed 2005-07-12 devnull { "disk cache stalls", },
47 a0d146ed 2005-07-12 devnull { "disk cache lookup time", },
48 a0d146ed 2005-07-12 devnull
49 a0d146ed 2005-07-12 devnull { "disk block stalls", },
50 a0d146ed 2005-07-12 devnull { "lump stalls", },
51 a0d146ed 2005-07-12 devnull
52 a0d146ed 2005-07-12 devnull { "index cache hits", },
53 a0d146ed 2005-07-12 devnull { "index cache misses", },
54 a0d146ed 2005-07-12 devnull { "index cache reads", },
55 a0d146ed 2005-07-12 devnull { "index cache writes", },
56 a0d146ed 2005-07-12 devnull { "index cache fills", },
57 a0d146ed 2005-07-12 devnull { "index cache prefetches", },
58 a0d146ed 2005-07-12 devnull { "index cache dirty", },
59 a0d146ed 2005-07-12 devnull { "index cache size", },
60 a0d146ed 2005-07-12 devnull { "index cache flushes", },
61 a0d146ed 2005-07-12 devnull { "index cache stalls", },
62 a0d146ed 2005-07-12 devnull { "index cache read time", },
63 7a400ee9 2007-09-25 rsc { "index cache lookups" },
64 7a400ee9 2007-09-25 rsc { "index cache summary hits" },
65 7a400ee9 2007-09-25 rsc { "index cache summary prefetches" },
66 a0d146ed 2005-07-12 devnull
67 a0d146ed 2005-07-12 devnull { "bloom filter hits", },
68 a0d146ed 2005-07-12 devnull { "bloom filter misses", },
69 a0d146ed 2005-07-12 devnull { "bloom filter false misses", },
70 a0d146ed 2005-07-12 devnull { "bloom filter lookups", },
71 a0d146ed 2005-07-12 devnull { "bloom filter ones", },
72 a0d146ed 2005-07-12 devnull { "bloom filter bits", },
73 a0d146ed 2005-07-12 devnull
74 a0d146ed 2005-07-12 devnull { "arena block reads", },
75 a0d146ed 2005-07-12 devnull { "arena block read bytes", },
76 a0d146ed 2005-07-12 devnull { "arena block writes", },
77 a0d146ed 2005-07-12 devnull { "arena block write bytes", },
78 a0d146ed 2005-07-12 devnull
79 a0d146ed 2005-07-12 devnull { "isect block reads", },
80 a0d146ed 2005-07-12 devnull { "isect block read bytes", },
81 a0d146ed 2005-07-12 devnull { "isect block writes", },
82 a0d146ed 2005-07-12 devnull { "isect block write bytes", },
83 a0d146ed 2005-07-12 devnull
84 a0d146ed 2005-07-12 devnull { "sum reads", },
85 28b49df3 2006-07-18 devnull { "sum read bytes", },
86 fa325e9b 2020-01-10 cross
87 7a400ee9 2007-09-25 rsc { "cig loads" },
88 7a400ee9 2007-09-25 rsc { "cig load time" },
89 a0d146ed 2005-07-12 devnull };
90 a0d146ed 2005-07-12 devnull
91 a0d146ed 2005-07-12 devnull QLock statslock;
92 a0d146ed 2005-07-12 devnull Stats stats;
93 a0d146ed 2005-07-12 devnull Stats *stathist;
94 a0d146ed 2005-07-12 devnull int nstathist;
95 a0d146ed 2005-07-12 devnull ulong statind;
96 a0d146ed 2005-07-12 devnull ulong stattime;
97 a0d146ed 2005-07-12 devnull
98 a0d146ed 2005-07-12 devnull void
99 a0d146ed 2005-07-12 devnull statsproc(void *v)
100 a0d146ed 2005-07-12 devnull {
101 a0d146ed 2005-07-12 devnull USED(v);
102 a0d146ed 2005-07-12 devnull
103 a0d146ed 2005-07-12 devnull for(;;){
104 a0d146ed 2005-07-12 devnull stats.now = time(0);
105 a0d146ed 2005-07-12 devnull stathist[stattime%nstathist] = stats;
106 a0d146ed 2005-07-12 devnull stattime++;
107 a0d146ed 2005-07-12 devnull sleep(1000);
108 a0d146ed 2005-07-12 devnull }
109 a0d146ed 2005-07-12 devnull }
110 a0d146ed 2005-07-12 devnull
111 a0d146ed 2005-07-12 devnull void
112 a0d146ed 2005-07-12 devnull statsinit(void)
113 a0d146ed 2005-07-12 devnull {
114 a0d146ed 2005-07-12 devnull nstathist = 90000;
115 a0d146ed 2005-07-12 devnull stathist = MKNZ(Stats, nstathist);
116 a0d146ed 2005-07-12 devnull vtproc(statsproc, nil);
117 a0d146ed 2005-07-12 devnull }
118 a0d146ed 2005-07-12 devnull
119 a0d146ed 2005-07-12 devnull void
120 a0d146ed 2005-07-12 devnull setstat(int index, long val)
121 a0d146ed 2005-07-12 devnull {
122 a0d146ed 2005-07-12 devnull qlock(&statslock);
123 a0d146ed 2005-07-12 devnull stats.n[index] = val;
124 a0d146ed 2005-07-12 devnull qunlock(&statslock);
125 a0d146ed 2005-07-12 devnull }
126 a0d146ed 2005-07-12 devnull
127 a0d146ed 2005-07-12 devnull void
128 a0d146ed 2005-07-12 devnull addstat(int index, int inc)
129 a0d146ed 2005-07-12 devnull {
130 a0d146ed 2005-07-12 devnull if(!collectstats)
131 a0d146ed 2005-07-12 devnull return;
132 a0d146ed 2005-07-12 devnull qlock(&statslock);
133 a0d146ed 2005-07-12 devnull stats.n[index] += inc;
134 a0d146ed 2005-07-12 devnull qunlock(&statslock);
135 a0d146ed 2005-07-12 devnull }
136 a0d146ed 2005-07-12 devnull
137 a0d146ed 2005-07-12 devnull void
138 a0d146ed 2005-07-12 devnull addstat2(int index, int inc, int index1, int inc1)
139 a0d146ed 2005-07-12 devnull {
140 a0d146ed 2005-07-12 devnull if(!collectstats)
141 a0d146ed 2005-07-12 devnull return;
142 a0d146ed 2005-07-12 devnull qlock(&statslock);
143 a0d146ed 2005-07-12 devnull stats.n[index] += inc;
144 a0d146ed 2005-07-12 devnull stats.n[index1] += inc1;
145 a0d146ed 2005-07-12 devnull qunlock(&statslock);
146 a0d146ed 2005-07-12 devnull }
147 a0d146ed 2005-07-12 devnull
148 a0d146ed 2005-07-12 devnull void
149 a0d146ed 2005-07-12 devnull printstats(void)
150 a0d146ed 2005-07-12 devnull {
151 a0d146ed 2005-07-12 devnull }
152 a0d146ed 2005-07-12 devnull
153 a0d146ed 2005-07-12 devnull void
154 a0d146ed 2005-07-12 devnull binstats(long (*fn)(Stats *s0, Stats *s1, void *arg), void *arg,
155 a0d146ed 2005-07-12 devnull long t0, long t1, Statbin *bin, int nbin)
156 a0d146ed 2005-07-12 devnull {
157 27d28098 2007-04-21 devnull long xt0, t, te, v;
158 27d28098 2007-04-21 devnull int i, j, lo, hi, m;
159 a0d146ed 2005-07-12 devnull vlong tot;
160 a0d146ed 2005-07-12 devnull Statbin *b;
161 fa325e9b 2020-01-10 cross
162 a0d146ed 2005-07-12 devnull t = stats.now;
163 fa325e9b 2020-01-10 cross
164 a0d146ed 2005-07-12 devnull /* negative times mean relative to now. */
165 a0d146ed 2005-07-12 devnull if(t0 <= 0)
166 a0d146ed 2005-07-12 devnull t0 += t;
167 a0d146ed 2005-07-12 devnull if(t1 <= 0)
168 a0d146ed 2005-07-12 devnull t1 += t;
169 a0d146ed 2005-07-12 devnull /* ten minute range if none given */
170 a0d146ed 2005-07-12 devnull if(t1 <= t0)
171 a0d146ed 2005-07-12 devnull t0 = t1 - 60*10;
172 a0d146ed 2005-07-12 devnull if(0) fprint(2, "stats %ld-%ld\n", t0, t1);
173 fa325e9b 2020-01-10 cross
174 a0d146ed 2005-07-12 devnull /* binary search to find t0-1 or close */
175 a0d146ed 2005-07-12 devnull lo = stattime;
176 a0d146ed 2005-07-12 devnull hi = stattime+nstathist;
177 a0d146ed 2005-07-12 devnull while(lo+1 < hi){
178 a0d146ed 2005-07-12 devnull m = (lo+hi)/2;
179 a0d146ed 2005-07-12 devnull if(stathist[m%nstathist].now >= t0)
180 a0d146ed 2005-07-12 devnull hi = m;
181 a0d146ed 2005-07-12 devnull else
182 a0d146ed 2005-07-12 devnull lo = m;
183 a0d146ed 2005-07-12 devnull }
184 a0d146ed 2005-07-12 devnull xt0 = stathist[lo%nstathist].now;
185 a0d146ed 2005-07-12 devnull if(xt0 >= t1){
186 a0d146ed 2005-07-12 devnull /* no samples */
187 a0d146ed 2005-07-12 devnull memset(bin, 0, nbin*sizeof bin[0]);
188 a0d146ed 2005-07-12 devnull return;
189 a0d146ed 2005-07-12 devnull }
190 a0d146ed 2005-07-12 devnull
191 a0d146ed 2005-07-12 devnull hi = stattime+nstathist;
192 a0d146ed 2005-07-12 devnull j = lo+1;
193 a0d146ed 2005-07-12 devnull for(i=0; i<nbin; i++){
194 a0d146ed 2005-07-12 devnull te = t0 + (t1-t0)*i/nbin;
195 a0d146ed 2005-07-12 devnull b = &bin[i];
196 a0d146ed 2005-07-12 devnull memset(b, 0, sizeof *b);
197 a0d146ed 2005-07-12 devnull tot = 0;
198 a0d146ed 2005-07-12 devnull for(; j<hi && stathist[j%nstathist].now<te; j++){
199 a0d146ed 2005-07-12 devnull v = fn(&stathist[(j-1)%nstathist], &stathist[j%nstathist], arg);
200 a0d146ed 2005-07-12 devnull if(b->nsamp==0 || v < b->min)
201 a0d146ed 2005-07-12 devnull b->min = v;
202 a0d146ed 2005-07-12 devnull if(b->nsamp==0 || v > b->max)
203 a0d146ed 2005-07-12 devnull b->max = v;
204 a0d146ed 2005-07-12 devnull tot += v;
205 a0d146ed 2005-07-12 devnull b->nsamp++;
206 a0d146ed 2005-07-12 devnull }
207 a0d146ed 2005-07-12 devnull if(b->nsamp)
208 a0d146ed 2005-07-12 devnull b->avg = tot / b->nsamp;
209 a0d146ed 2005-07-12 devnull if(b->nsamp==0 && i>0)
210 a0d146ed 2005-07-12 devnull *b = bin[i-1];
211 fa325e9b 2020-01-10 cross }
212 a0d146ed 2005-07-12 devnull }