selftests/ftrace: Add fgraph-multi.tc test
Add a test that creates 3 instances and enables function_graph tracer in each as well as the top instance, where each will enable a filter (but one that traces all functions) and check that they are filtering properly. Link: https://lore.kernel.org/linux-trace-kernel/20240603190825.252845939@goodmis.org Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com> Cc: Florent Revest <revest@chromium.org> Cc: Martin KaFai Lau <martin.lau@linux.dev> Cc: bpf <bpf@vger.kernel.org> Cc: Sven Schnelle <svens@linux.ibm.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: Alan Maguire <alan.maguire@oracle.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Guo Ren <guoren@kernel.org> Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: ftrace - function graph filters
|
||||
# requires: set_ftrace_filter function_graph:tracer
|
||||
|
||||
# Make sure that function graph filtering works
|
||||
|
||||
INSTANCE1="instances/test1_$$"
|
||||
INSTANCE2="instances/test2_$$"
|
||||
INSTANCE3="instances/test3_$$"
|
||||
|
||||
WD=`pwd`
|
||||
|
||||
do_reset() {
|
||||
cd $WD
|
||||
if [ -d $INSTANCE1 ]; then
|
||||
echo nop > $INSTANCE1/current_tracer
|
||||
rmdir $INSTANCE1
|
||||
fi
|
||||
if [ -d $INSTANCE2 ]; then
|
||||
echo nop > $INSTANCE2/current_tracer
|
||||
rmdir $INSTANCE2
|
||||
fi
|
||||
if [ -d $INSTANCE3 ]; then
|
||||
echo nop > $INSTANCE3/current_tracer
|
||||
rmdir $INSTANCE3
|
||||
fi
|
||||
}
|
||||
|
||||
mkdir $INSTANCE1
|
||||
if ! grep -q function_graph $INSTANCE1/available_tracers; then
|
||||
echo "function_graph not allowed with instances"
|
||||
rmdir $INSTANCE1
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
mkdir $INSTANCE2
|
||||
mkdir $INSTANCE3
|
||||
|
||||
fail() { # msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
disable_tracing
|
||||
clear_trace
|
||||
|
||||
do_test() {
|
||||
REGEX=$1
|
||||
TEST=$2
|
||||
|
||||
# filter something, schedule is always good
|
||||
if ! echo "$REGEX" > set_ftrace_filter; then
|
||||
fail "can not enable filter $REGEX"
|
||||
fi
|
||||
|
||||
echo > trace
|
||||
echo function_graph > current_tracer
|
||||
enable_tracing
|
||||
sleep 1
|
||||
# search for functions (has "{" or ";" on the line)
|
||||
echo 0 > tracing_on
|
||||
count=`cat trace | grep -v '^#' | grep -e '{' -e ';' | grep -v "$TEST" | wc -l`
|
||||
echo 1 > tracing_on
|
||||
if [ $count -ne 0 ]; then
|
||||
fail "Graph filtering not working by itself against $TEST?"
|
||||
fi
|
||||
|
||||
# Make sure we did find something
|
||||
echo 0 > tracing_on
|
||||
count=`cat trace | grep -v '^#' | grep -e '{' -e ';' | grep "$TEST" | wc -l`
|
||||
echo 1 > tracing_on
|
||||
if [ $count -eq 0 ]; then
|
||||
fail "No traces found with $TEST?"
|
||||
fi
|
||||
}
|
||||
|
||||
do_test '*sched*' 'sched'
|
||||
cd $INSTANCE1
|
||||
do_test '*lock*' 'lock'
|
||||
cd $WD
|
||||
cd $INSTANCE2
|
||||
do_test '*rcu*' 'rcu'
|
||||
cd $WD
|
||||
cd $INSTANCE3
|
||||
echo function_graph > current_tracer
|
||||
|
||||
sleep 1
|
||||
count=`cat trace | grep -v '^#' | grep -e '{' -e ';' | grep "$TEST" | wc -l`
|
||||
if [ $count -eq 0 ]; then
|
||||
fail "No traces found with all tracing?"
|
||||
fi
|
||||
|
||||
cd $WD
|
||||
echo nop > current_tracer
|
||||
echo nop > $INSTANCE1/current_tracer
|
||||
echo nop > $INSTANCE2/current_tracer
|
||||
echo nop > $INSTANCE3/current_tracer
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user