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`