summaryrefslogtreecommitdiffstats
path: root/testsuite/systemtap.examples/memory/pfaults.stp
diff options
context:
space:
mode:
authorWilliam Cohen <wcohen@redhat.com>2009-02-12 15:58:24 -0500
committerWilliam Cohen <wcohen@redhat.com>2009-02-12 16:00:20 -0500
commit413996e0c3b55047e12272678627f7833228d892 (patch)
treebbf169e936cc2e9d4b48f34f9609fa40ff3df1bc /testsuite/systemtap.examples/memory/pfaults.stp
parent8df79eb6046f2fa2e1aed736b2adac4eaaf3a2f5 (diff)
downloadsystemtap-steved-413996e0c3b55047e12272678627f7833228d892.tar.gz
systemtap-steved-413996e0c3b55047e12272678627f7833228d892.tar.xz
systemtap-steved-413996e0c3b55047e12272678627f7833228d892.zip
Function to determine page fault type and have pfaults.stp exercise it.
Diffstat (limited to 'testsuite/systemtap.examples/memory/pfaults.stp')
-rw-r--r--testsuite/systemtap.examples/memory/pfaults.stp35
1 files changed, 35 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/memory/pfaults.stp b/testsuite/systemtap.examples/memory/pfaults.stp
new file mode 100644
index 00000000..5bf1a8a6
--- /dev/null
+++ b/testsuite/systemtap.examples/memory/pfaults.stp
@@ -0,0 +1,35 @@
+#! /usr/bin/env stap
+
+global fault_entry_time, fault_address, fault_access
+global time_offset
+
+probe begin { time_offset = gettimeofday_us() }
+
+probe vm.pagefault {
+ t = gettimeofday_us()
+ p = pid()
+ fault_entry_time[p] = t
+ fault_address[p] = address
+ fault_access[p] = write_access ? "w" : "r"
+}
+
+probe vm.pagefault.return {
+ t=gettimeofday_us()
+ p = pid()
+ if (!(p in fault_entry_time)) next
+ e = t - fault_entry_time[p]
+ if (vm_fault_contains(fault_type,VM_FAULT_MINOR)) {
+ ftype="minor"
+ } else if (vm_fault_contains(fault_type,VM_FAULT_MAJOR)) {
+ ftype="major"
+ } else {
+ next #only want to deal with minor and major page faults
+ }
+
+ printf("%d:%d:%p:%s:%s:%d\n",
+ t - time_offset, p, fault_address[p], fault_access[p], ftype, e)
+ #free up memory
+ delete fault_entry_time[p]
+ delete fault_address[p]
+ delete fault_access[p]
+}