KGRKJGETMRETU895U-589TY5MIGM5JGB5SDFESFREWTGR54TY
Server : Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e-fips-rhel5 DAV/2 PHP/5.2.17
System : Linux localhost 2.6.18-419.el5 #1 SMP Fri Feb 24 22:47:42 UTC 2017 x86_64
User : nobody ( 99)
PHP Version : 5.2.17
Disable Function : NONE
Directory :  /usr/share/doc/systemtap-client-1.8/examples/process/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/doc/systemtap-client-1.8/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
{
  t=tid()

  if ([t] in bored) {
    patience = time() - backtime[t]
    printf ("thread %d (%s) bored for %d %s\n", 
            t, name[t], patience, time_name)
  }

  delete bored[t]
  delete back[t]
  delete name[t]
  delete backtime[t]
}


probe kernel.function("wait_for_completion").call
{ 
  t=tid()
  back[t]=backtrace()
  name[t]=execname()
  backtime[t]=time()
  delete bored[t]
}


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_stack (back[tid])
      printf ("\n")
      bored[tid] = 1 # defer further reports to wakeup
    }
  }
}

Anon7 - 2021