From 1cc8a4c78bff79ea8b60e916e5cd01571b469b03 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Fri, 30 Jan 2009 12:33:14 -0500 Subject: Move the scf.stp example from systemtap.samples to systemtap.examples. --- testsuite/systemtap.examples/interrupt/scf.meta | 13 +++++++++++++ testsuite/systemtap.examples/interrupt/scf.stp | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 testsuite/systemtap.examples/interrupt/scf.meta create mode 100644 testsuite/systemtap.examples/interrupt/scf.stp (limited to 'testsuite/systemtap.examples/interrupt') diff --git a/testsuite/systemtap.examples/interrupt/scf.meta b/testsuite/systemtap.examples/interrupt/scf.meta new file mode 100644 index 00000000..1d6ec3d8 --- /dev/null +++ b/testsuite/systemtap.examples/interrupt/scf.meta @@ -0,0 +1,13 @@ +title: Tally Backtraces for Inter-Processor Interrupt (IPI) +name: scf.stp +version: 1.0 +author: William Cohen +keywords: interrupt backtrace +subsystem: kernel +status: production +exit: user-controlled +output: sorted-list +scope: system-wide +description: The Linux kernel function smp_call_function causes expensive inter-processor interrupts (IPIs). The scf.stp script tallies the processes and backtraces causing the interprocessor interrupts to identify the cause of the expensive IPI. On exit the script prints the tallies in descending frequency. +test_check: stap -p4 scf.stp +test_installcheck: stap scf.stp -c "sleep 1" diff --git a/testsuite/systemtap.examples/interrupt/scf.stp b/testsuite/systemtap.examples/interrupt/scf.stp new file mode 100644 index 00000000..f84c2494 --- /dev/null +++ b/testsuite/systemtap.examples/interrupt/scf.stp @@ -0,0 +1,21 @@ +#! /usr/bin/env stap +# scf.stp +# A reimplementation of user script:smp_call_function example given at OLS 2005 +# in the current language. + +global traces + +probe begin { print("Starting probe, type control-c to stop.\n") } + +probe kernel.function("smp_call_function") +{ + traces[pid(), pexecname(), backtrace()] ++ +} + +probe end { + foreach ([pid, name, stack] in traces-) { # sort by frequency encountered + printf ("traces[%d,%s,\n", pid, name) + print_stack (stack) + printf ("] = %d\n", traces[pid, name, stack]); + } +} -- cgit