diff options
author | William Cohen <wcohen@redhat.com> | 2009-02-12 15:58:24 -0500 |
---|---|---|
committer | William Cohen <wcohen@redhat.com> | 2009-02-12 16:00:20 -0500 |
commit | 413996e0c3b55047e12272678627f7833228d892 (patch) | |
tree | bbf169e936cc2e9d4b48f34f9609fa40ff3df1bc /testsuite/systemtap.examples/memory/pfaults.stp | |
parent | 8df79eb6046f2fa2e1aed736b2adac4eaaf3a2f5 (diff) | |
download | systemtap-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.stp | 35 |
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] +} |