From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: akpm@linux-foundation.org, Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org,
Peter Zijlstra <peterz@infradead.org>,
"Frank Ch. Eigler" <fche@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Hideo AOKI <haoki@redhat.com>,
Takashi Nishiie <t-nishiie@np.css.fujitsu.com>,
Masami Hiramatsu <mhiramat@redhat.com>
Subject: [RFC patch 11/12] LTTng instrumentation mm tracepoint probes
Date: Fri, 04 Jul 2008 19:52:18 -0400 [thread overview]
Message-ID: <20080704235428.930802653@polymtl.ca> (raw)
In-Reply-To: 20080704235207.147809973@polymtl.ca
[-- Attachment #1: lttng-instrumentation-mm-tracepoints-probes.patch --]
[-- Type: text/plain, Size: 6510 bytes --]
Create a module which declares mm tracepoint probes, using markers.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
CC: Alexander Viro <viro@zeniv.linux.org.uk>
CC: 'Peter Zijlstra' <peterz@infradead.org>
CC: "Frank Ch. Eigler" <fche@redhat.com>
CC: 'Ingo Molnar' <mingo@elte.hu>
CC: 'Hideo AOKI' <haoki@redhat.com>
CC: Takashi Nishiie <t-nishiie@np.css.fujitsu.com>
CC: 'Steven Rostedt' <rostedt@goodmis.org>
CC: Masami Hiramatsu <mhiramat@redhat.com>
---
include/linux/swapops.h | 8 ++
mm/Makefile | 1
mm/mm-trace.c | 150 ++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 159 insertions(+)
Index: linux-2.6-lttng/mm/Makefile
===================================================================
--- linux-2.6-lttng.orig/mm/Makefile 2008-07-04 18:26:42.000000000 -0400
+++ linux-2.6-lttng/mm/Makefile 2008-07-04 18:27:00.000000000 -0400
@@ -33,4 +33,5 @@ obj-$(CONFIG_MIGRATION) += migrate.o
obj-$(CONFIG_SMP) += allocpercpu.o
obj-$(CONFIG_QUICKLIST) += quicklist.o
obj-$(CONFIG_CGROUP_MEM_RES_CTLR) += memcontrol.o
+obj-$(CONFIG_TRACEPROBES) += mm-trace.o
Index: linux-2.6-lttng/mm/mm-trace.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6-lttng/mm/mm-trace.c 2008-07-04 18:27:00.000000000 -0400
@@ -0,0 +1,150 @@
+/*
+ * mm/mm-trace.c
+ *
+ * MM tracepoint probes.
+ */
+
+#include <linux/module.h>
+#include <linux/mm.h>
+#include <linux/swap.h>
+
+#include <asm/pgtable.h>
+#include <asm/tlbflush.h>
+#include <linux/swapops.h>
+#include "mm-trace.h"
+
+static void probe_mm_filemap_wait_start(struct page *page, int bit_nr)
+{
+ trace_mark(mm_filemap_wait_start, "pfn %lu bit_nr %d",
+ page_to_pfn(page), bit_nr);
+}
+
+static void probe_mm_filemap_wait_end(struct page *page, int bit_nr)
+{
+ trace_mark(mm_filemap_wait_end, "pfn %lu bit_nr %d",
+ page_to_pfn(page), bit_nr);
+}
+
+static void probe_mm_huge_page_free(struct page *page)
+{
+ trace_mark(mm_huge_page_free, "pfn %lu", page_to_pfn(page));
+}
+
+static void probe_mm_huge_page_alloc(struct page *page)
+{
+ trace_mark(mm_huge_page_alloc, "pfn %lu", page_to_pfn(page));
+}
+
+#ifdef CONFIG_SWAP
+static void probe_mm_swap_in(struct page *page, swp_entry_t entry)
+{
+ trace_mark(mm_swap_in, "pfn %lu filp %p offset %lu",
+ page_to_pfn(page),
+ get_swap_info_struct(swp_type(entry))->swap_file,
+ swp_offset(entry));
+}
+#endif
+
+static void probe_mm_handle_fault_entry(unsigned long address, int write_access)
+{
+ trace_mark(mm_handle_fault_entry,
+ "address %lu ip #p%ld write_access %d",
+ address, KSTK_EIP(current), write_access);
+}
+
+static void probe_mm_handle_fault_exit(void)
+{
+ trace_mark(mm_handle_fault_exit, MARK_NOARGS);
+}
+
+static void probe_mm_page_free(struct page *page, unsigned int order)
+{
+ trace_mark(mm_page_free, "order %u pfn %lu", order, page_to_pfn(page));
+}
+
+static void probe_mm_page_alloc(struct page *page, unsigned int order)
+{
+ if (page)
+ trace_mark(mm_page_alloc, "order %u pfn %lu", order,
+ page_to_pfn(page));
+}
+
+static void probe_mm_swap_out(struct page *page)
+{
+ trace_mark(mm_swap_out, "pfn %lu filp %p offset %lu",
+ page_to_pfn(page),
+ get_swap_info_struct(swp_type(
+ page_swp_entry(page)))->swap_file,
+ swp_offset(page_swp_entry(page)));
+}
+
+static void probe_mm_swap_file_close(struct file *file)
+{
+ trace_mark(mm_swap_file_close, "filp %p", file);
+}
+
+static void probe_mm_swap_file_open(struct file *file, char *filename)
+{
+ trace_mark(mm_swap_file_open, "filp %p filename %s",
+ file, filename);
+}
+
+int __init mm_trace_init(void)
+{
+ int ret;
+
+ ret = register_trace_mm_filemap_wait_start(probe_mm_filemap_wait_start);
+ WARN_ON(ret);
+ ret = register_trace_mm_filemap_wait_end(probe_mm_filemap_wait_end);
+ WARN_ON(ret);
+ ret = register_trace_mm_huge_page_free(probe_mm_huge_page_free);
+ WARN_ON(ret);
+ ret = register_trace_mm_huge_page_alloc(probe_mm_huge_page_alloc);
+ WARN_ON(ret);
+#ifdef CONFIG_SWAP
+ ret = register_trace_mm_swap_in(probe_mm_swap_in);
+ WARN_ON(ret);
+#endif
+ ret = register_trace_mm_handle_fault_entry(probe_mm_handle_fault_entry);
+ WARN_ON(ret);
+ ret = register_trace_mm_handle_fault_exit(probe_mm_handle_fault_exit);
+ WARN_ON(ret);
+ ret = register_trace_mm_page_free(probe_mm_page_free);
+ WARN_ON(ret);
+ ret = register_trace_mm_page_alloc(probe_mm_page_alloc);
+ WARN_ON(ret);
+ ret = register_trace_mm_swap_out(probe_mm_swap_out);
+ WARN_ON(ret);
+ ret = register_trace_mm_swap_file_close(probe_mm_swap_file_close);
+ WARN_ON(ret);
+ ret = register_trace_mm_swap_file_open(probe_mm_swap_file_open);
+ WARN_ON(ret);
+
+ return 0;
+}
+
+module_init(mm_trace_init);
+
+void __exit mm_trace_exit(void)
+{
+ unregister_trace_mm_swap_file_open(probe_mm_swap_file_open);
+ unregister_trace_mm_swap_file_close(probe_mm_swap_file_close);
+ unregister_trace_mm_swap_out(probe_mm_swap_out);
+ unregister_trace_mm_page_alloc(probe_mm_page_alloc);
+ unregister_trace_mm_page_free(probe_mm_page_free);
+ unregister_trace_mm_handle_fault_exit(probe_mm_handle_fault_exit);
+ unregister_trace_mm_handle_fault_entry(probe_mm_handle_fault_entry);
+#ifdef CONFIG_SWAP
+ unregister_trace_mm_swap_in(probe_mm_swap_in);
+#endif
+ unregister_trace_mm_huge_page_alloc(probe_mm_huge_page_alloc);
+ unregister_trace_mm_huge_page_free(probe_mm_huge_page_free);
+ unregister_trace_mm_filemap_wait_end(probe_mm_filemap_wait_end);
+ unregister_trace_mm_filemap_wait_start(probe_mm_filemap_wait_start);
+}
+
+module_exit(mm_trace_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Mathieu Desnoyers");
+MODULE_DESCRIPTION("MM Tracepoint Probes");
Index: linux-2.6-lttng/include/linux/swapops.h
===================================================================
--- linux-2.6-lttng.orig/include/linux/swapops.h 2008-07-04 18:26:02.000000000 -0400
+++ linux-2.6-lttng/include/linux/swapops.h 2008-07-04 18:27:00.000000000 -0400
@@ -76,6 +76,14 @@ static inline pte_t swp_entry_to_pte(swp
return __swp_entry_to_pte(arch_entry);
}
+static inline swp_entry_t page_swp_entry(struct page *page)
+{
+ swp_entry_t entry;
+ VM_BUG_ON(!PageSwapCache(page));
+ entry.val = page_private(page);
+ return entry;
+}
+
#ifdef CONFIG_MIGRATION
static inline swp_entry_t make_migration_entry(struct page *page, int write)
{
--
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next prev parent reply other threads:[~2008-07-04 23:57 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-04 23:52 [RFC patch 00/12] Tracepoints v2 Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 01/12] Kernel Tracepoints Mathieu Desnoyers
2008-07-07 16:27 ` Masami Hiramatsu
2008-07-08 20:37 ` Masami Hiramatsu
2008-07-09 3:03 ` Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 02/12] LTTng tracepoint instrumentation fs Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 03/12] LTTng instrumentation ipc Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 04/12] LTTng instrumentation kernel Mathieu Desnoyers
2008-07-07 16:36 ` Masami Hiramatsu
2008-07-04 23:52 ` [RFC patch 05/12] LTTng instrumentation mm Mathieu Desnoyers
2008-07-04 23:52 ` Mathieu Desnoyers
2008-07-05 9:42 ` KOSAKI Motohiro
2008-07-05 9:42 ` KOSAKI Motohiro
2008-07-07 20:38 ` Mathieu Desnoyers
2008-07-07 20:38 ` Mathieu Desnoyers
2008-07-11 8:36 ` KOSAKI Motohiro
2008-07-11 8:36 ` KOSAKI Motohiro
2008-07-11 14:17 ` Mathieu Desnoyers
2008-07-11 14:17 ` Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 06/12] LTTng instrumentation net Mathieu Desnoyers
2008-07-04 23:52 ` Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 07/12] Traceprobes Mathieu Desnoyers
2008-07-07 16:28 ` Masami Hiramatsu
2008-07-04 23:52 ` [RFC patch 08/12] LTTng instrumentation FS tracepoint probes Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 09/12] LTTng instrumentation ipc " Mathieu Desnoyers
2008-07-04 23:52 ` [RFC patch 10/12] LTTng instrumentation kernel " Mathieu Desnoyers
2008-07-04 23:52 ` Mathieu Desnoyers [this message]
2008-07-04 23:52 ` [RFC patch 12/12] LTTng instrumentation net " Mathieu Desnoyers
2008-07-05 23:27 ` [RFC patch 00/12] Tracepoints v2 Eduard - Gabriel Munteanu
2008-07-07 13:43 ` Mathieu Desnoyers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080704235428.930802653@polymtl.ca \
--to=mathieu.desnoyers@polymtl.ca \
--cc=akpm@linux-foundation.org \
--cc=fche@redhat.com \
--cc=haoki@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=t-nishiie@np.css.fujitsu.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.