#pragma D option defaultargs
dtrace:::BEGIN
{
interval = $1 != 0 ? $1 : 10;
maxtick = $2 != 0 ? $2 : 60;
warmup = $3 != 0 ? $3 : 0;
hits = misses = evictions = 0;
secs = interval;
tick = 0;
}
bdb$target:::mpool-miss
/tick >= warmup/
{
misses++;
@misses[copyinstr(arg1)] = count();
}
bdb$target:::mpool-hit
/tick >= warmup/
{
hits++;
@hits[arg1 == 0 ? "<null!>" : copyinstr(arg1)] = count();
}
bdb$target:::mpool-evict
/tick >= warmup/
{
evictions++;
@evictions[arg0 == 0 ? "<null!>" : copyinstr(arg0)] = count();
}
profile:::tick-1sec
{
tick++;
secs--;
}
profile:::tick-1sec
/tick == warmup/
{
printf("Cache info: %8s %8s %8s starting @ %Y\n", "hits", "misses",
"evictions", walltimestamp);
secs = interval;
}
profile:::tick-1sec
/secs == 0 && tick >= warmup/
{
printf(" %6d %8d %8d %8d\n", tick, hits, misses, evictions);
hits = misses = evictions = 0;
printa("Hits for %20s %@u\n", @hits);
printa("Misses for %20s %@u\n", @misses);
printa("Evictions for %20s %@u\n", @evictions);
trunc(@hits);
trunc(@misses);
trunc(@evictions);
secs = interval;
}
profile:::tick-1sec
/tick == maxtick/
{
exit(0);
}
dtrace:::END
{
printf("\n");
printa("Hits for %20s %@u\n", @hits);
printa("Misses for %20s %@u\n", @misses);
printa("Evictions for %20s %@u\n", @evictions);
}