From 5b23a4f5b9150b1c9c07f759d0529a1f4b34261b Mon Sep 17 00:00:00 2001 From: ddomingo Date: Tue, 7 Oct 2008 14:07:23 +1000 Subject: added para-callgraph.stp --- .../en-US/Useful_Scripts-paracallgraph.xml | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml (limited to 'doc/SystemTap_Beginners_Guide/en-US') diff --git a/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml b/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml new file mode 100644 index 00000000..781145f7 --- /dev/null +++ b/doc/SystemTap_Beginners_Guide/en-US/Useful_Scripts-paracallgraph.xml @@ -0,0 +1,97 @@ + + + + +
+ Call Graph Tracing + + + + WAR STORY: Call graph tracing http://sourceware.org/systemtap/wiki/WSCallGraph?highlight=((WarStories)) + + + + script: http://sourceware.org/systemtap/examples/general/para-callgraph.stp + + + + This section describes how to trace incoming and outgoing function calls. + + + para-callgraph.stp + + +function trace(entry_p) { + if(tid() in trace) + printf("%s%s%s\n",thread_indent(entry_p), + (entry_p>0?"->":"<-"), + probefunc()) +} + +global trace +probe kernel.function(@1).call { + if (execname() == "stapio") next # skip our own helper process + trace[tid()] = 1 + trace(1) +} +probe kernel.function(@1).return { + trace(-1) + delete trace[tid()] +} + +probe kernel.function(@2).call { trace(1) } +probe kernel.function(@2).return { trace(-1) } + + + + + takes two command-line arguments: + + + A trigger function (@1), which enables or disables tracing on a per-thread basis. + The probe function whose entry/exit you'd like to trace (@2). + + + uses thread_indent(); as such, its output contains the timestamp, process name, and thread ID of @2 (i.e. the probe function you are tracing). For more information about thread_indent(), refer to its entry in . + + The following example contains a snippet of the output for stap sys_read '*@fs/*.c': + + + + <xref linkend="scriptcallgraph"/> Sample Output + +[...] + 0 klogd(1391):->sys_read + 14 klogd(1391): ->fget_light + 22 klogd(1391): <-fget_light + 27 klogd(1391): ->vfs_read + 35 klogd(1391): ->rw_verify_area + 43 klogd(1391): <-rw_verify_area + 49 klogd(1391): ->kmsg_read + 0 sendmail(1696):->sys_read + 17 sendmail(1696): ->fget_light + 26 sendmail(1696): <-fget_light + 34 sendmail(1696): ->vfs_read + 44 sendmail(1696): ->rw_verify_area + 52 sendmail(1696): <-rw_verify_area + 58 sendmail(1696): ->proc_file_read + 70 sendmail(1696): ->loadavg_read_proc + 84 sendmail(1696): ->proc_calc_metrics + 92 sendmail(1696): <-proc_calc_metrics + 95 sendmail(1696): <-loadavg_read_proc + 101 sendmail(1696): <-proc_file_read + 106 sendmail(1696): ->dnotify_parent + 115 sendmail(1696): <-dnotify_parent + 119 sendmail(1696): ->inotify_dentry_parent_queue_event + 127 sendmail(1696): <-inotify_dentry_parent_queue_event + 133 sendmail(1696): ->inotify_inode_queue_event + 141 sendmail(1696): <-inotify_inode_queue_event + 146 sendmail(1696): <-vfs_read + 151 sendmail(1696):<-sys_read + + + + +
+ -- cgit