]> sourceware.org Git - systemtap.git/commitdiff
Remove manual memoization from systemtap example scripts
authorFelix Lu <flu@redhat.com>
Thu, 13 Aug 2015 20:51:21 +0000 (16:51 -0400)
committerFelix Lu <flu@redhat.com>
Fri, 14 Aug 2015 17:39:31 +0000 (13:39 -0400)
Stored values are now replaced with an explicit functioncall which
gets optimized by the translator.

20 files changed:
testsuite/systemtap.examples/general/varwatch.stp
testsuite/systemtap.examples/io/iodevstats.stp
testsuite/systemtap.examples/io/iostats.stp
testsuite/systemtap.examples/memory/mmanonpage.stp
testsuite/systemtap.examples/memory/mmfilepage.stp
testsuite/systemtap.examples/memory/mmreclaim.stp
testsuite/systemtap.examples/memory/mmwriteback.stp
testsuite/systemtap.examples/memory/numa_faults.stp
testsuite/systemtap.examples/memory/pfaults.stp
testsuite/systemtap.examples/network/socktop
testsuite/systemtap.examples/process/errsnoop.stp
testsuite/systemtap.examples/process/futexes2.stp
testsuite/systemtap.examples/process/sig_by_pid.stp
testsuite/systemtap.examples/process/sleepingBeauties.stp
testsuite/systemtap.examples/process/strace.stp
testsuite/systemtap.examples/process/wait4time.stp
testsuite/systemtap.examples/profiling/fntimes.stp
testsuite/systemtap.examples/profiling/linetimes.stp
testsuite/systemtap.examples/profiling/timeout.stp
testsuite/systemtap.examples/virtualization/kvm_service_time.stp

index d7a7204a52df6b45931053cc6150805ca1b87ebf..27bccbd599e4d71aeff40ef1c99d13c32ce62b18 100755 (executable)
@@ -3,14 +3,13 @@
 global var, varerr
 
 probe $1 {
-  t=tid() # or t=0 for thread-agnostic checking
   if (@defined($2)) {
      try {
          newvar = $2;
-         if (var[t] != newvar) {
-            printf("%s[%d] %s %s:\n", execname(), t, pp(), @2);
+         if (var[tid()] != newvar) {
+            printf("%s[%d] %s %s:\n", execname(), tid(), pp(), @2);
             println(newvar);
-            var[t] = newvar;
+            var[tid()] = newvar;
          }
      } catch { varerr ++ }  # error during $2 resolution or perhaps var[] assignment
   }
index 4bf2df7eeea3cd590d445126ad4df27907f13a7b..98d86a517ee309e8db7b1a9a2dd7f91bfc6c337a 100755 (executable)
@@ -6,18 +6,16 @@ probe begin { printf("starting probe\n") }
 probe vfs.read.return {
   count = $return
   if ( count >= 0 ) {
-    e=execname();
-    reads[e,dev] <<< count # statistics array
-    totals[e,dev] += count
+    reads[execname(),dev] <<< count # statistics array
+    totals[execname(),dev] += count
   }
 }
 
 probe vfs.write.return {
   count = $return
   if (count >= 0 ) {
-    e=execname();
-    writes[e,dev] <<< count # statistics array
-    totals[e,dev] += count
+    writes[execname(),dev] <<< count # statistics array
+    totals[execname(),dev] += count
   }
 }
 
index 90bb4f5be4c382103dbcea878c6c96497c3a53d9..2ea03d38c0a941fce2c52eb2757ee77333e2e5ce 100755 (executable)
@@ -4,25 +4,22 @@ global opens, reads, writes, totals
 probe begin { printf("starting probe\n") }
 
 probe syscall.open {
-  e=execname();
-  opens[e] <<< 1 # statistics array
+  opens[execname()] <<< 1 # statistics array
 }
 
 probe syscall.read.return {
   count = $return
   if ( count >= 0 ) {
-    e=execname();
-    reads[e] <<< count # statistics array
-    totals[e] += count
+    reads[execname()] <<< count # statistics array
+    totals[execname()] += count
   }
 }
 
 probe syscall.write.return {
   count = $return
   if (count >= 0 ) {
-    e=execname();
-    writes[e] <<< count # statistics array
-    totals[e] += count
+    writes[execname()] <<< count # statistics array
+    totals[execname()] += count
   }
 }
 
index 7228f43e7c7147bcffa833282f60a6dce9f4f8e2..9e880742cfcb8000f7846483538ee7b684c20439 100755 (executable)
@@ -47,9 +47,8 @@ probe kernel.trace("mm_anon_userfree") {
 
 probe begin {
   printf("Starting data collection\n")
-  traced_pid = target()
-  if (traced_pid)
-    printf("mode Specific Pid, traced pid: %d\n\n", traced_pid)
+  if (target())
+    printf("mode Specific Pid, traced pid: %d\n\n", target())
   else
     printf("mode - All Pids\n\n")
 }
index 58f277c467630813e68da80294658502f0f13501..b6b15df44544f008f8680ee7d55f597dab1d217e 100755 (executable)
@@ -42,9 +42,8 @@ probe kernel.trace("mm_filemap_userunmap") {
 
 probe begin {
   printf("Starting data collection\n")
-  traced_pid = target()
-  if (traced_pid)
-    printf("mode Specific Pid, traced pid: %d\n\n", traced_pid)
+  if (target())
+    printf("mode Specific Pid, traced pid: %d\n\n", target())
   else
     printf("mode - All Pids\n\n")
 }
index 65c330cbc81ec05479f31fb577acef06a8a01f41..953a5014b6f393b873896c2ff7358280d9b813ee 100755 (executable)
@@ -52,9 +52,8 @@ probe kernel.trace("mm_pagereclaim_shrinkactive_a2i"),
 
 probe begin {
   printf("Starting data collection\n")
-  traced_pid = target()
-  if (traced_pid)
-    printf("mode Specific Pid, traced pid: %d\n\n", traced_pid)
+  if (target())
+    printf("mode Specific Pid, traced pid: %d\n\n", target())
   else
     printf("mode - All Pids\n\n")
 }
index 97aff9870f8d5900ef6853fe26b7d8348efe4e3d..3d4b1d5125059315446f9b27f0464132c0459f02 100755 (executable)
@@ -39,9 +39,8 @@ probe kernel.trace("mm_vmscan_writepage") !,          # v2.6.36+
 
 probe begin {
   printf("Starting data collection\n")
-  traced_pid = target()
-  if (traced_pid)
-    printf("mode Specific Pid, traced pid: %d\n\n", traced_pid)
+  if (target())
+    printf("mode Specific Pid, traced pid: %d\n\n", target())
   else
     printf("mode - All Pids\n\n")
 }
index 8b7ca1504c9cc1866a4f3d42e59193b530b4440f..1cfee03864b1a7ad3f5b027ec03898dd934b734a 100755 (executable)
@@ -3,12 +3,11 @@
 global execnames, page_faults, node_faults, nodes
 
 probe vm.pagefault {
-  p = pid();
-  execnames[p] = execname()
-  page_faults[p, write_access ? 1 : 0] <<< 1
+  execnames[pid()] = execname()
+  page_faults[pid(), write_access ? 1 : 0] <<< 1
   try {
     n=addr_to_node(address)
-    node_faults[p, n] <<< 1
+    node_faults[pid(), n] <<< 1
     nodes[n] <<< 1
   } catch { }
 }
index b046d015b3aa9e584dc767e7dffb2dc455df3a4f..eaf6f4e6cdc9728ce130bfb49b555b38e535ac5d 100755 (executable)
@@ -7,16 +7,14 @@ probe begin { time_offset = gettimeofday_us() }
 
 probe vm.pagefault {
   t = gettimeofday_us()
-  id = tid()
-  fault_entry_time[id] = t
-  fault_address[id] = address
-  fault_access[id] = write_access ? "w" : "r"
+  fault_entry_time[tid()] = t
+  fault_address[tid()] = address
+  fault_access[tid()] = write_access ? "w" : "r"
 }
 
 probe vm.pagefault.return {
   t=gettimeofday_us()
-  id = tid()
-  if (!(id in fault_entry_time)) next
+  if (!(tid() in fault_entry_time)) next
   e = t - fault_entry_time[id]
   if (vm_fault_contains(fault_type,VM_FAULT_MINOR)) {
     ftype="minor"
@@ -27,9 +25,9 @@ probe vm.pagefault.return {
   }
 
   printf("%d:%d:%id:%s:%s:%d\n",
-       t - time_offset, id, fault_address[id], fault_access[id], ftype, e)
+       t - time_offset, tid(), fault_address[tid()], fault_access[tid()], ftype, e)
   #free up memory
-  delete fault_entry_time[id]
-  delete fault_address[id]
-  delete fault_access[id]
+  delete fault_entry_time[tid()]
+  delete fault_address[tid()]
+  delete fault_access[tid()]
 }
index b7cda0ee6a71cf7cb64900bd503585b54f4a7249..477f261a9fe65dc41b19d99531c106e233112e37 100755 (executable)
@@ -248,48 +248,40 @@ probe socket.send
 {
        if (!success) next
 
-       pid = pid()
-       uid = uid()
-       ename = execname()
-
        # Check filters
        if ('$FILTER') {
                if ('$F_PROT' && !(protocol in f_prot)) next
                if ('$F_FAM'  && !(family   in f_fam))  next
-               if ('$F_PID'  && !(pid      in f_pid))  next
-               if ('$F_NAME' && !(ename    in f_name)) next
-               if ('$F_UID'  && !(uid      in f_uid))  next
+    if ('$F_PID'  && !(pid()      in f_pid))  next
+    if ('$F_NAME' && !(execname()    in f_name)) next
+    if ('$F_UID'  && !(uid()      in f_uid))  next
                if ('$F_TYPE' && !(type     in f_type)) next
        }
 
-       execname[pid] = ename
-       user[pid] = uid
-       sk_tx[pid, protocol, family] <<< size
-       sk_pid[pid, protocol, family] += size
+  execname[pid()] = execname()
+  user[pid()] = uid()
+  sk_tx[pid(), protocol, family] <<< size
+  sk_pid[pid(), protocol, family] += size
 }
 
 probe socket.receive
 {
        if (!success) next
 
-       pid = pid()
-       uid = uid()
-       ename = execname()
-
        # Check filters
        if ('$FILTER') {
                if ('$F_PROT' && !(protocol in f_prot)) next
                if ('$F_FAM'  && !(family   in f_fam))  next
-               if ('$F_PID'  && !(pid      in f_pid))  next
-               if ('$F_NAME' && !(ename    in f_name)) next
-               if ('$F_UID'  && !(uid      in f_uid))  next
+    if ('$F_PID'  && !(pid()      in f_pid))  next
+    if ('$F_NAME' && !(execname()    in f_name)) next
+    if ('$F_UID'  && !(uid()      in f_uid))  next
                if ('$F_TYPE' && !(type     in f_type)) next
        }
 
-       execname[pid] = ename
-       user[pid] = uid
-       sk_rx[pid, protocol, family] <<< size
-       sk_pid[pid, protocol, family] += size
+  execname[pid()] = execname()
+  user[pid()] = uid()
+  sk_rx[pid(), protocol, family] <<< size
+  sk_pid[pid(), protocol, family] += size
 }
 
 function print_activity()
index 02b0b1b00c5105252d04694e568cf0a6151cf880..3d1e9ac3ed21f8d7c7bab086d477ca933ac41cb0 100755 (executable)
@@ -19,9 +19,8 @@ probe syscall.* {
 probe syscall.*.return {
        errno = errno_p(returnval())
        if (errno != 0) {
-               t = tid()
-               argstr = trace[t]
-               delete trace[t]
+               argstr = trace[tid()]
+               delete trace[tid()]
                errstr = sprintf("%3d/%s", errno, errno_str(errno))
                error[sprintf("%-13s %17s %15s %5d %s", errstr, name, execname(), pid(), argstr)] <<< 1
        }
index d0318a20cfd19de47eebc1cf3707481965ee2244..57ca62332070340460259627bf609a0f81833142 100644 (file)
@@ -38,10 +38,9 @@ probe kernel.function("futex_wait_setup").return {
 }
 
 probe syscall.futex.return {  
-  t = tid()
-  if (!(t in wait_keys)) next
-  key = wait_keys[t]
-  delete wait_keys[t]
+  if (!(tid() in wait_keys)) next
+  key = wait_keys[tid()]
+  delete wait_keys[tid()]
 
   cmd = $op & ~(FUTEX_PRIVATE_FLAG|FUTEX_CLOCK_REALTIME);
   if (cmd != FUTEX_WAIT) next
index 80bf62948d5ff490558e36e3ca17da934fb7f717..803592ceb00bfe13b92143b6f1294b3f78e04da7 100755 (executable)
@@ -19,12 +19,11 @@ probe begin {
 
 probe signal.send 
 {
-  snd_pid = pid()
   rcv_pid = sig_pid
 
-  sigcnt[snd_pid, rcv_pid, sig]++
+  sigcnt[pid(), rcv_pid, sig]++
 
-  if (!(snd_pid in pid2name)) pid2name[snd_pid] = execname()
+  if (!(pid() in pid2name)) pid2name[pid()] = execname()
   if (!(rcv_pid in pid2name)) pid2name[rcv_pid] = pid_name
   if (!(sig in sig2name)) sig2name[sig] = sig_name 
 }
index 79074a7a39f7e85178f2e1121d639f83a3cfd2dc..23395abab247f91f4a6012bc5e194dae7ff9c1cc 100755 (executable)
@@ -17,28 +17,25 @@ global name, back, backtime, bored
 
 probe kernel.function("wait_for_completion").return
 {
-  t=tid()
-
-  if ([t] in bored) {
-    patience = time() - backtime[t]
+  if ([tid()] in bored) {
+    patience = time() - backtime[tid()]
     printf ("thread %d (%s) bored for %d %s\n", 
-            t, name[t], patience, time_name)
+            tid(), name[tid()], patience, time_name)
   }
 
-  delete bored[t]
-  delete back[t]
-  delete name[t]
-  delete backtime[t]
+  delete bored[tid()]
+  delete back[tid()]
+  delete name[tid()]
+  delete backtime[tid()]
 }
 
 
 probe kernel.function("wait_for_completion").call
 { 
-  t=tid()
-  back[t]=backtrace()
-  name[t]=execname()
-  backtime[t]=time()
-  delete bored[t]
+  back[tid()]=backtrace()
+  name[tid()]=execname()
+  backtime[tid()]=time()
+  delete bored[tid()]
 }
 
 
index 91bc403eaa18fa302c4114f78c3b936339c6c76a..315d15076ae9be1168d04a5443c9d91e1b4e0211 100755 (executable)
@@ -37,10 +37,9 @@ probe nd_syscall.*
 
     if (filter_p()) next;
 
-    t=tid()
-    thread_argstr[t]=argstr
+    thread_argstr[tid()]=argstr
     if (timestamp || elapsed_time)
-      thread_time[t]=gettimeofday_us()
+      thread_time[tid()]=gettimeofday_us()
 
     if (name in syscalls_nonreturn)
       report(name,argstr,"")
@@ -57,12 +56,10 @@ probe nd_syscall.*.return
 
 function report(syscall_name, syscall_argstr, syscall_retstr)
   {
-    t=tid()
-
     if (timestamp || elapsed_time)
       {
         now = gettimeofday_us()
-        then = thread_time[t]
+        then = thread_time[tid()]
 
         if (timestamp)
           prefix=sprintf("%s.%06d ", ctime(then/1000000), then%1000000)
@@ -72,13 +69,13 @@ function report(syscall_name, syscall_argstr, syscall_retstr)
           suffix=sprintf(" <%d.%06d>", diff/1000000, diff%1000000)
         }
 
-        delete thread_time[t]
+        delete thread_time[tid()]
       }
 
     /* add a thread-id string in lots of cases, except if
        stap strace.stp -c SINGLE_THREADED_CMD */
     if (tid() != target()) {
-      prefix .= sprintf("%s[%d] ", execname(), t)
+      prefix .= sprintf("%s[%d] ", execname(), tid())
     }
 
     printf("%s%s(%s) = %s%s\n",
@@ -86,5 +83,5 @@ function report(syscall_name, syscall_argstr, syscall_retstr)
            syscall_name, syscall_argstr, syscall_retstr,
            suffix)
     
-    delete thread_argstr[t]
+    delete thread_argstr[tid()]
   }
index 60877b4bb4bd8c8b18be27c6bb4c3009df6dec7c..320309dfc76a6a35e7a537217298eeb90686ce9a 100755 (executable)
@@ -45,9 +45,8 @@ probe syscall.wait4 {
 }
 
 probe syscall.wait4.return {
-  t = tid()
   elapsed_time = gettimeofday_us() - @entry(gettimeofday_us())
   printf("%d %s wait4: %d %d\n",  timestamp(), proc(), elapsed_time,
-         wait4_pid[t])
-  delete wait4_pid[t]
+         wait4_pid[tid()])
+  delete wait4_pid[tid()]
 }
index 0fe5019d194f0e591bc56a691152806143309699..873c2cbc865bd615f013e7e491ecbe23c804ad3e 100755 (executable)
@@ -11,14 +11,13 @@ global times
 
 function check(t)   # t: elapsed time
 {
-   pf=ppfunc()
-   if (@count(times[pf]) >= mincount
-       && t >= @max(times[pf]) * note_percent / 100) {   # also consider @avg()
+   if (@count(times[ppfunc()]) >= mincount
+       && t >= @max(times[ppfunc()]) * note_percent / 100) {   # also consider @avg()
      printf("function %s well over %s time (%d vs %d)\n",
-            pf, "maximum", t, @max(times[pf]))
+            ppfunc(), "maximum", t, @max(times[ppfunc()]))
      # also consider: print_backtrace()
    }
-   times[pf] <<< t  # (increments @count, updates @max)
+   times[ppfunc()] <<< t  # (increments @count, updates @max)
 }
 
 probe $1.return { check(time()-@entry(time())) }
index bb7673def99890cf3f4728e888faed199133d2fa..4f386378b1526ebe32d2a92516f5c3cc61d4c7bf 100755 (executable)
@@ -18,28 +18,26 @@ global calls, times, last_pp, region, cfg
 probe $1.function(@2).call { calls <<< 1 }
 probe $1.function(@2).return {
   t = gettimeofday_us()
-  p = tid()
-  s = times[p]
+  s = times[tid()]
   if (s) {
     e = t - s
-    region[last_pp[p]] <<< e
-    cfg[last_pp[p], pp()] <<< 1
+    region[last_pp[tid()]] <<< e
+    cfg[last_pp[tid()], pp()] <<< 1
   }
-  delete times[p]
-  delete last_pp[p]
+  delete times[tid()]
+  delete last_pp[tid()]
 }
 
 probe $1.statement(@2 "@*:*") {
   t = gettimeofday_us()
-  p = tid()
-  s = times[p]
+  s = times[tid()]
   if (s) {
     e = t - s
-    region[last_pp[p]] <<< e
-    cfg[last_pp[p], pp()] <<< 1
+    region[last_pp[tid()]] <<< e
+    cfg[last_pp[tid()], pp()] <<< 1
   }
-  times[p] = t
-  last_pp[p] = pp()
+  times[tid()] = t
+  last_pp[tid()] = pp()
 }
 
 probe end {
index 8054b364977d5637fba29f184803c6c06e65baf4..97cd31871361b4ff0a7e088d4c0c15fb6a615ef5 100755 (executable)
@@ -12,80 +12,72 @@ probe syscall.poll, syscall.epoll_wait {
 }
 
 probe syscall.poll.return {
-  p = pid()
-  if ($return == 0 && to[p] > 0 ) {
-    poll_timeout[p]++
-    timeout_count[p]++
-    process[p] = execname()
-    delete to[p]
+  if ($return == 0 && to[pid()] > 0 ) {
+    poll_timeout[pid()]++
+    timeout_count[pid()]++
+    process[pid()] = execname()
+    delete to[pid()]
   }
 }
 
 probe syscall.epoll_wait.return {
-  p = pid()
-  if ($return == 0 && to[p] > 0 ) {
-    epoll_timeout[p]++
-    timeout_count[p]++
+  if ($return == 0 && to[pid()] > 0 ) {
+    epoll_timeout[pid()]++
+    timeout_count[pid()]++
     process[p] = execname()
-    delete to[p]
+    delete to[pid()]
   }
 }
 
 probe syscall.select.return {
   if ($return == 0) {
-    p = pid()
-    select_timeout[p]++
-    timeout_count[p]++
-    process[p] = execname()
+    select_timeout[pid()]++
+    timeout_count[pid()]++
+    process[pid()] = execname()
   }
 }
 
 probe syscall.futex.return {
   if (errno_str($return) == "ETIMEDOUT") {
-    p = pid()
-    futex_timeout[p]++
-    timeout_count[p]++
-    process[p] = execname()
+    futex_timeout[pid()]++
+    timeout_count[pid()]++
+    process[pid()] = execname()
   }
 }
 
 probe syscall.nanosleep.return {
   if ($return == 0) {
-    p = pid()
-    nanosleep_timeout[p]++
-    timeout_count[p]++
-    process[p] = execname()
+    nanosleep_timeout[pid()]++
+    timeout_count[pid()]++
+    process[pid()] = execname()
   }
 }
 
 probe kernel.function("it_real_fn") {
-  p = pid()
-  itimer_timeout[p]++
-  timeout_count[p]++
-  process[p] = execname()
+  itimer_timeout[pid()]++
+  timeout_count[pid()]++
+  process[pid()] = execname()
 }
 
 probe syscall.rt_sigtimedwait.return {
   if (errno_str($return) == "EAGAIN") {
-    p = pid()
-    signal_timeout[p]++
-    timeout_count[p]++
-    process[p] = execname()
+    signal_timeout[pid()]++
+    timeout_count[pid()]++
+    process[pid()] = execname()
   }
 }
 
 probe syscall.exit {
-  p = pid()
-  if (p in process) {
-    delete process[p]
-    delete timeout_count[p]
-    delete poll_timeout[p]
-    delete epoll_timeout[p]
-    delete select_timeout[p]
-    delete itimer_timeout[p]
-    delete futex_timeout[p]
-    delete nanosleep_timeout[p]
-    delete signal_timeout[p]
+  if (pid() in process) {
+    delete process[pid()]
+    delete timeout_count[pid()]
+    delete poll_timeout[pid()]
+    delete epoll_timeout[pid()]
+    delete select_timeout[pid()]
+    delete itimer_timeout[pid()]
+    delete futex_timeout[pid()]
+    delete nanosleep_timeout[pid()]
+    delete signal_timeout[pid()]
   }
 }
 
index 6711870749e3a13cf76aae3b2f59a9d95ba0c5be..b8f8e05ba19d8363e95616ec06f2eb7af2bd2fc8 100755 (executable)
@@ -24,9 +24,8 @@ global e_time, reason, stats
 # leaving the guest vm for some reason
 probe kernel.trace("kvm_exit")
 {
-  p = tid()
-  e_time[p] = gettimeofday_us()
-  reason[p] = $exit_reason;
+  e_time[tid()] = gettimeofday_us()
+  reason[tid()] = $exit_reason;
   kvm_isa = @defined($isa) ? $isa : 0  
 }
 
@@ -34,12 +33,11 @@ probe kernel.trace("kvm_exit")
 probe kernel.trace("kvm_entry")
 {
   new_t = gettimeofday_us();
-  p = tid()
-  if ( [p] in e_time) {
-    elapsed = new_t - e_time[p]
-    stats[reason[p]] <<< elapsed
-    delete e_time[p]
-    delete reason[p]
+  if ( [tid()] in e_time) {
+    elapsed = new_t - e_time[tid()]
+    stats[reason[tid()]] <<< elapsed
+    delete e_time[tid()]
+    delete reason[tid()]
   }
 }
 
This page took 0.051601 seconds and 5 git commands to generate.