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]

while we're showing off


Hi -

The following systemtap script prints a little report about page fault
activity.  It may satisfy an old request by Ingo Molnar.  The output from
a brief run:

Page fault tracking, start time=1126640463
stpd[3941] reads=0 writes=1 oom=0 sigbus=0 minor=1 major=0
xfce4-panel[3648] reads=0 writes=433 oom=0 sigbus=0 minor=431 major=0
X[3576] reads=12 writes=8114 oom=0 sigbus=0 minor=8126 major=0
xfce4-panel[3943] reads=1 writes=19 oom=0 sigbus=0 minor=20 major=0
kghostview[3944] reads=3343 writes=1510 oom=0 sigbus=0 minor=4817 major=12
xfce4-session[3636] reads=0 writes=2 oom=0 sigbus=0 minor=2 major=0
kdeinit[3945] reads=2118 writes=383 oom=0 sigbus=0 minor=2501 major=0
kdeinit[3946] reads=346 writes=540 oom=0 sigbus=0 minor=886 major=0
dcopserver[3947] reads=85 writes=138 oom=0 sigbus=0 minor=223 major=0
dcopserver[3948] reads=14 writes=105 oom=0 sigbus=0 minor=119 major=0
dcopserver[3949] reads=94 writes=88 oom=0 sigbus=0 minor=182 major=0
iceauth[3950] reads=346 writes=64 oom=0 sigbus=0 minor=410 major=0
klauncher[3951] reads=219 writes=82 oom=0 sigbus=0 minor=301 major=0
kded[3952] reads=123 writes=171 oom=0 sigbus=0 minor=294 major=0
kded[3953] reads=504 writes=489 oom=0 sigbus=0 minor=993 major=0
kded[3954] reads=0 writes=19 oom=0 sigbus=0 minor=19 major=0
gam_server[3955] reads=229 writes=177 oom=0 sigbus=0 minor=406 major=0
kbuildsycoca[3956] reads=220 writes=190 oom=0 sigbus=0 minor=410 major=0
gnome-terminal[3683] reads=0 writes=2 oom=0 sigbus=0 minor=2 major=0
kconf_update[3957] reads=80 writes=122 oom=0 sigbus=0 minor=202 major=0
xfs[2394] reads=0 writes=177 oom=0 sigbus=0 minor=177 major=0
xfce4-panel[3958] reads=1 writes=19 oom=0 sigbus=0 minor=20 major=0
gnumeric[3959] reads=35 writes=16 oom=0 sigbus=0 minor=49 major=2
Page fault tracking, end time=1126640473


The script is checked into /tests/testsuite/systemtap.samples (where
the other ones should go too, hint!).  It demonstrates a variety of
anticipated systemtap script "design patterns":


#! stap

global pidnames, faults, fault_types

probe kernel.function("handle_mm_fault") {

   # Maintain a pid-to-execname mapping.  This logic should get transplanted
   # into a tapset script that is automatically included upon reference to
   # its exported global variable.
   pidnames[pid()] = execname()

   faults [pid(), $write_access ? 1 : 0] ++
}

# (needed only until bug 1132 supports $retvalue)
function get_ax:long () %{ THIS->__retvalue = CONTEXT->regs->eax; %}

probe kernel.function("handle_mm_fault").return {
  fault_types [pid(), get_ax()] ++
}


# Some constants, to come from a future "VM tapset"

global VM_FAULT_OOM, VM_FAULT_SIGBUS, VM_FAULT_MINOR, VM_FAULT_MAJOR
probe begin {
  VM_FAULT_OOM=-1
  VM_FAULT_SIGBUS=0
  VM_FAULT_MINOR=1
  VM_FAULT_MAJOR=2
}


# Shut down the probing session after a while
probe timer.jiffies(10000) { exit() }


function _(n) { return string(n) } # let's abbreviate

probe begin {
  print ("Page fault tracking, start time=" . _(gettimeofday_s()) . "\n")
}
probe end {
  foreach ([pid] in pidnames)
    print (pidnames[pid] . "[" . _(pid) . "]" .
           " reads=" . _(faults[pid,0]) . 
           " writes=" . _(faults[pid,1]) .
           " oom=" . _(fault_types[pid,VM_FAULT_OOM]) .
           " sigbus=" . _(fault_types[pid,VM_FAULT_SIGBUS]) .
           " minor=" . _(fault_types[pid,VM_FAULT_MINOR]) .
           " major=" . _(fault_types[pid,VM_FAULT_MAJOR]) .
           "\n")
  print ("Page fault tracking, end time=" . _(gettimeofday_s()) . "\n")
}


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