summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--stapprobes.5.in2
-rw-r--r--tapset/ChangeLog2
-rw-r--r--tapset/LKET/Changelog4
-rwxr-xr-xtapset/LKET/pagefault.stp2
-rw-r--r--tapset/memory.stp125
-rwxr-xr-xtestsuite/buildok/memory.stp2
7 files changed, 131 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 6dcbeb08..a8d193f8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
* examples/small_demos/proc_snoop.stp,
testsuite/buildok/process_test.stp: Rename process.signal_* to
new signal.* tapset.
+ * stapprobes.5.in, testsuite/buildok/memory.stp: move pagefault
+ to vm.* namespace
2006-08-08 Eugene Teo <eteo@redhat.com>
diff --git a/stapprobes.5.in b/stapprobes.5.in
index 098a2bf0..d1823714 100644
--- a/stapprobes.5.in
+++ b/stapprobes.5.in
@@ -476,7 +476,7 @@ It contains the following probe points:
.P
.TP
-.B pagefault
+.B vm.pagefault
Fires when there is a pagefault
.B Arguments:
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index c9f9a193..db4765da 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -3,6 +3,8 @@
* signal.stp: Create a new tapset that addresses process signals.
Much of this was contributed by Manoj Pattabhiraman (IBM).
* process.stp: Remove aliases that now belong in signal tapset
+ * memory.stp: move pagefault to vm.* namespace, and add many other
+ virtual-memory themed probes.
2006-08-09 David Smith <dsmith@redhat.com>
diff --git a/tapset/LKET/Changelog b/tapset/LKET/Changelog
index f5cae33e..a81cb0cd 100644
--- a/tapset/LKET/Changelog
+++ b/tapset/LKET/Changelog
@@ -1,3 +1,7 @@
+2006-08-09 Josh Stone <joshua.i.stone@intel.com>
+
+ * pagefault.stp: move pagefault to vm.* namespace
+
2006-07-14 Li Guanglei <guanglei@cn.ibm.com>
* aio.stp: bugfix to make each aio sub event hook
diff --git a/tapset/LKET/pagefault.stp b/tapset/LKET/pagefault.stp
index 3f15cf62..1dcca518 100755
--- a/tapset/LKET/pagefault.stp
+++ b/tapset/LKET/pagefault.stp
@@ -19,7 +19,7 @@ probe addevent.pagefault
}
probe _addevent.pagefault
- = pagefault
+ = vm.pagefault
{
if(filter_by_pid() == 1 ) {
log_pagefault_tracedata(HOOKID_PAGEFAULT, $address, $write_access)
diff --git a/tapset/memory.stp b/tapset/memory.stp
index 2682b5a7..2c36f83e 100644
--- a/tapset/memory.stp
+++ b/tapset/memory.stp
@@ -1,15 +1,26 @@
-// memory related tapset
+// memory/vm related tapset
// Copyright (C) 2005, 2006 IBM Corp.
+// Copyright (C) 2006 Intel Corporation.
//
// This file is part of systemtap, and is free software. You can
// redistribute it and/or modify it under the terms of the GNU General
// Public License (GPL); either version 2, or (at your option) any
// later version.
-/* Record the page fault event */
-probe pagefault
- = kernel.function(%( kernel_v >= "2.6.13" %? "__handle_mm_fault"
- %: "handle_mm_fault" %))
+/* probe vm.pagefault
+ *
+ * Records that a page fault occurred.
+ *
+ * Context:
+ * The process which triggered the fault.
+ *
+ * Arguments:
+ * address - the address of the faulting memory access.
+ * write_access - indicates whether this was a write
+ */
+probe vm.pagefault = kernel.function(
+ %( kernel_v >= "2.6.13" %? "__handle_mm_fault" %: "handle_mm_fault" %)
+ )
{
write_access = $write_access
address = $address
@@ -28,5 +39,109 @@ function addr_to_node:long(addr:long) /* pure */
THIS->__retvalue = nid;
break;
}
+%}
+/* Return whether a page to be copied is a zero page. */
+function _IS_ZERO_PAGE:long(from:long, vaddr:long) %{ /* pure */
+ THIS->__retvalue = (from == ZERO_PAGE(vaddr));
%}
+
+
+/* probe vm.write_shared
+ *
+ * Fires when a process attempts to write to a shared page. If a
+ * copy is necessary, this will be followed by a vm.write_shared_copy.
+ *
+ * Context:
+ * The process attempting the write.
+ *
+ * Arguments:
+ * address - the address of the shared write.
+ */
+probe vm.write_shared = kernel.function("do_wp_page") {
+ address = $address
+}
+
+
+/* probe vm.write_shared_copy
+ *
+ * Fires when a write to a shared page requires a page copy. This is
+ * always preceded by a vm.shared_write.
+ *
+ * Context:
+ * The process attempting the write.
+ *
+ * Arguments:
+ * address - the address of the shared write.
+ * zero - boolean indicating whether it is a zero page
+ * (can do a clear instead of a copy).
+ */
+probe vm.write_shared_copy = kernel.inline("copy_cow_page") {
+ address = $address
+ zero = _IS_ZERO_PAGE($from, address);
+}
+
+
+/* probe vm.mmap
+ *
+ * Fires when an mmap is requested.
+ *
+ * Context:
+ * The process calling mmap.
+ *
+ * Arguments:
+ * address - the requested address
+ * length - the length of the memory segment
+ */
+probe vm.mmap = kernel.inline("do_mmap"), kernel.inline("do_mmap2") {
+ address = $addr
+ length = $len
+}
+
+
+/* probe vm.munmap
+ *
+ * Fires when an munmap is requested.
+ *
+ * Context:
+ * The process calling munmap.
+ *
+ * Arguments:
+ * address - the requested address
+ * length - the length of the memory segment
+ */
+probe vm.munmap = kernel.function("do_munmap") {
+ address = $start
+ length = $len
+}
+
+/* probe vm.brk
+ *
+ * Fires when a brk is requested (resizing a heap).
+ *
+ * Context:
+ * The process calling brk.
+ *
+ * Arguments:
+ * address - the requested address
+ * length - the length of the memory segment
+ */
+probe vm.brk = kernel.function("do_brk") {
+ address = $addr
+ length = $len
+}
+
+/* probe vm.oom_kill
+ *
+ * Fires when a thread is targetted by the OOM killer.
+ *
+ * Context:
+ * The process that tried to consume more memory, and thus
+ * triggered the OOM. (correct?)
+ *
+ * Arguments:
+ * task - the task being killed
+ */
+probe vm.oom_kill = kernel.function("__oom_kill_task") {
+ task = $p
+}
diff --git a/testsuite/buildok/memory.stp b/testsuite/buildok/memory.stp
index c184e487..ce9f28cb 100755
--- a/testsuite/buildok/memory.stp
+++ b/testsuite/buildok/memory.stp
@@ -1,5 +1,5 @@
#! stap -p4
-probe pagefault
+probe vm.pagefault
{
printf("ppname: %s, %d, %p\n", probefunc(), write_access, address)
}