This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Chained numeric assignments


Should the following chained assignment:
writes[execname()] = total_io[execname()] += $return
be equivalent to:
writes[execname()] += $return total_io[execname()] += $return


They yield different results in a couple scripts I tried (see below). For example, it appears that writes[] gets assigned total_io[] instead of += $return.

=============== Script #1 ================
global reads, writes, total_io

probe kernel.function("vfs_read").return {
       reads[execname()] = total_io[execname()] += $return
}

probe kernel.function("vfs_write").return {
       writes[execname()] = total_io[execname()] += $return
}

probe timer.s(1) {
       foreach(p in total_io- limit 10)
               printf("%15s r: %8d KiB w: %8d KiB\n",
                       p, reads[p]/1024,
                       writes[p]/1024)
               printf("\n")
}

************** Script #1 Output ***********
         lspci r:      455 KiB w:      456 KiB
            sh r:       35 KiB w:       35 KiB
     wcstatusd r:       10 KiB w:        0 KiB
          Xvnc r:        8 KiB w:        8 KiB
      ifconfig r:        7 KiB w:        8 KiB
      mii-tool r:        4 KiB w:        4 KiB
         xterm r:        4 KiB w:        4 KiB
       staprun r:        0 KiB w:        0 KiB
         klogd r:        0 KiB w:        0 KiB
      sendmail r:        0 KiB w:        0 KiB

         lspci r:      455 KiB w:      456 KiB
            sh r:       35 KiB w:       35 KiB
          Xvnc r:       16 KiB w:       16 KiB
     wcstatusd r:       10 KiB w:        0 KiB
         xterm r:        9 KiB w:        9 KiB
      ifconfig r:        7 KiB w:        8 KiB
      mii-tool r:        4 KiB w:        4 KiB
       staprun r:        1 KiB w:        1 KiB
         klogd r:        0 KiB w:        0 KiB
      sendmail r:        0 KiB w:        0 KiB

============== Script #2 ==================
global reads, writes, total_io

probe kernel.function("vfs_read").return {
reads[execname()] += $return total_io[execname()] += $return
}


probe kernel.function("vfs_write").return {
writes[execname()] += $return total_io[execname()] += $return
}


probe timer.s(1) {
       foreach(p in total_io- limit 10)
               printf("%15s r: %8d KiB w: %8d KiB\n",
                       p, reads[p]/1024,
                       writes[p]/1024)
               printf("\n")
}

************** Script #2 Output **************
         lspci r:      449 KiB w:        6 KiB
            sh r:       35 KiB w:        0 KiB
     wcstatusd r:       10 KiB w:        0 KiB
      ifconfig r:        7 KiB w:        0 KiB
          Xvnc r:        4 KiB w:        3 KiB
         xterm r:        0 KiB w:        4 KiB
      mii-tool r:        4 KiB w:        0 KiB
       staprun r:        0 KiB w:        0 KiB
         klogd r:        0 KiB w:        0 KiB
      metacity r:        0 KiB w:        0 KiB

         lspci r:      898 KiB w:       13 KiB
            sh r:       70 KiB w:        0 KiB
     wcstatusd r:       21 KiB w:        0 KiB
      ifconfig r:       15 KiB w:        1 KiB
          Xvnc r:        9 KiB w:        5 KiB
         xterm r:        1 KiB w:        9 KiB
      mii-tool r:        9 KiB w:        0 KiB
       staprun r:        0 KiB w:        0 KiB
      metacity r:        0 KiB w:        0 KiB
         klogd r:        0 KiB w:        0 KiB



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]