From: jistone Date: Thu, 10 Aug 2006 01:43:44 +0000 (+0000) Subject: 2006-08-09 Josh Stone X-Git-Tag: release-0.5.10~118 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=ccd0c53f3e8b163fd2f0e4bec2c77b20d7422b13;p=systemtap.git 2006-08-09 Josh Stone * stapprobes.5.in, testsuite/buildok/memory.stp: move pagefault to vm.* namespace tapset/ * memory.stp: move pagefault to vm.* namespace, and add many other virtual-memory themed probes. tapset/LKET/ * pagefault.stp: move pagefault to vm.* namespace --- diff --git a/ChangeLog b/ChangeLog index 6dcbeb089..a8d193f88 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 diff --git a/stapprobes.5.in b/stapprobes.5.in index 098a2bf06..d18237142 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 c9f9a1937..db4765da5 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 diff --git a/tapset/LKET/Changelog b/tapset/LKET/Changelog index f5cae33ed..a81cb0cdf 100644 --- a/tapset/LKET/Changelog +++ b/tapset/LKET/Changelog @@ -1,3 +1,7 @@ +2006-08-09 Josh Stone + + * pagefault.stp: move pagefault to vm.* namespace + 2006-07-14 Li Guanglei * aio.stp: bugfix to make each aio sub event hook diff --git a/tapset/LKET/pagefault.stp b/tapset/LKET/pagefault.stp index 3f15cf62b..1dcca518c 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 2682b5a7f..2c36f83e5 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 c184e4875..ce9f28cb6 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) }