#!/usr/sbin/dtrace -Cqs long milliintr; BEGIN{ printf("Measure usr/sys/intr/idle on a system in per thousand of a CPU\n"); usr = 0; sys = 0; intr = 0; idle = 0; ticks = 0; t0=timestamp; t00 = t0; cpux = cpu; } profile-1ms { usr += (arg1 != 0) ? 1 : 0; sys += (arg0 != 0) ? 1 : 0; /* usr + intr +idle */ idle += (curthread == curthread->t_cpu->cpu_idle_thread) ? 1 : 0; intr += ((curthread->t_cpu->cpu_intr_actv - 16384) > 0) ? 1 : 0; ticks += (cpu == cpux) ? 1 : 0; } tick-10s{ milliusr = (10000 * usr) / ticks; millisys = (10000 * (sys - intr - idle)) / ticks; milliidle = (10000 * idle) / ticks; milliintr = (10000 * intr) / ticks; millittot = milliusr + millisys + milliintr + milliidle; printf("busy=%5d (usr/sys/intr -- idl/tot) (%5d/%5d/%5d -- %5d/%6d)\n", milliusr + millisys + milliintr, milliusr, millisys, milliintr, milliidle, millittot); idle = 0; usr = 0; intr = 0; sys = 0; ticks = 0; t0=timestamp; }