Collect kernel reaping activity.
#!/usr/sbin/dtrace -s
#pragma D option quiet
#pragma D option destructive
arc_kmem_reap_now:entry
{
printf("%d ts=%d freemem=%d -> arc_kmem_reap_now\n",
walltimestamp / 1000000000, timestamp, `freemem);
}
arc_kmem_reap_now:return
{
printf("%d ts=%d freemem=%d <- arc_kmem_reap_now\n",
walltimestamp / 1000000000, timestamp, `freemem);
}
kmem_cache_reap:entry
{
self->cp = args[0];
printf("%d freemem=%d -> cache reap %s\n", walltimestamp / 1000000000,
`freemem, stringof(args[0]->cache_name));
}
kmem_cache_reap:return
/self->cp != NULL/
{
printf("%d freemem=%d <- cache reap %s\n", walltimestamp / 1000000000,
`freemem, stringof(self->cp->cache_name));
self->cp = NULL;
}
kmem_depot_ws_reap:entry
{
self->depot = args[0];
printf("%d freemem=%d -> mag reap %s\n", walltimestamp / 1000000000,
`freemem, stringof(args[0]->cache_name));
}
kmem_depot_ws_reap:entry
/self->depot != NULL/
{
printf("%d freemem=%d <- mag reap %s\n", walltimestamp / 1000000000,
`freemem, stringof(self->depot->cache_name));
self->depot = NULL
}
htable_steal_active.isra.2:entry
{
steals++;
}
profile-1hz
/arg0 != 0 && curthread == `kmem_taskq->tq_thr._tq_thread/
{
printf("%d kmem_taskq cpu=%d pc=%a", walltimestamp / 1000000000, cpu, arg0);
stack(60);
}
tick-1sec
{
printf("%d freemem=%d needfree=%d steals=%d arc_size=%d arc_c=%d waiters=%d load=%d tq=%d\n",
walltimestamp / 1000000000,
`freemem, `needfree, steals,
`arc_stats.arcstat_size.value.ui64,
`arc_stats.arcstat_c.value.ui64,
((condvar_impl_t *)&`arc_reclaim_waiters_cv)->cv_waiters,
`loadavg.lg_total,
`kmem_taskq->tq_tasks - `kmem_taskq->tq_executed);
}