#!/usr/bin/stap # usage: fntimes.stp FUNCTIONPROBE # e.g. fntimes.stp 'module("ext4").function("*")' global mincount = 100 # training: beneath this number of hits, only collect data global note_percent = 250 # percent beyond maximum-so-far to generate report for function time() { return gettimeofday_us() } # time measurement function global times function check(t) # t: elapsed time { pf=probefunc() if (@count(times[pf]) >= mincount && t >= @max(times[pf]) * note_percent / 100) { # also consider @avg() printf("function %s well over %s time (%d vs %d)\n", pf, "maximum", t, @max(times[pf])) # also consider: print_backtrace() } times[pf] <<< t # (increments @count, updates @max) } probe $1.return { check(time()-@entry(time())) }