php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay

| files >> /proc/self/root/usr/share/doc/systemtap-client-2.9/examples/process/ |
| files >> //proc/self/root/usr/share/doc/systemtap-client-2.9/examples/process/sleepingBeauties.stp |
#!/usr/bin/stap
function time () { return gettimeofday_ms() }
global time_name = "ms"
global boredom = 10 # in time units
global name, back, backtime, bored
/* Note: the order that the probes are listed should not matter.
However, the following order for
probe kernel.function("wait_for_completion").return and
probe kernel.function("wait_for_completion").call
avoids have the kretprobe stuff in the backtrace.
for more information see:
http://sourceware.org/bugzilla/show_bug.cgi?id=6436
*/
probe kernel.function("wait_for_completion").return
{
if ([tid()] in bored) {
patience = time() - backtime[tid()]
printf ("thread %d (%s) bored for %d %s\n",
tid(), name[tid()], patience, time_name)
}
delete bored[tid()]
delete back[tid()]
delete name[tid()]
delete backtime[tid()]
}
probe kernel.function("wait_for_completion").call
{
back[tid()]=backtrace()
name[tid()]=execname()
backtime[tid()]=time()
delete bored[tid()]
}
probe timer.profile {
foreach (tid+ in back) {
if ([tid] in bored) continue
patience = time() - backtime[tid]
if (patience >= boredom) {
printf ("thread %d (%s) impatient after %d %s\n",
tid, name[tid], patience, time_name)
print_syms (back[tid])
printf ("\n")
bored[tid] = 1 # defer further reports to wakeup
}
}
}
y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`