#!/usr/bin/env stap # This is an example of profiling a specific command or pid. # It works by recording the time when a system call is entered # exited. # Usage: prof.stp -c "top -n5" # Will start up "top" and after 5 iterations, will exit. # # Usage: prof.stp -x 3323 # Will profile pid 3323 until it ^c is hit. # probe kernel.function("sys_*").call { if (target() == tid()) calltime[tid()] = gettimeofday_us() } probe kernel.function("sys_*").return { if (target() != tid()) next now = gettimeofday_us() c = calltime[tid()] if (!c) next ttime[probefunc()] <<< now - c delete calltime[tid()] } probe end { printf("\n") foreach (x in ttime) printf("%-20s\tcalls:%6d\tavg time (us):%5d\ttotal(us):%7d\n", x, @count(ttime[x]), @avg(ttime[x]), @sum(ttime[x])) } global calltime, ttime