ftracetest: Add a couple of ftrace test cases

Added three test cases to get the feel of adding tests to ftracetest.
The three cases are:

  function profiling test, to make sure function profiling still works
   with function tracing (was a regression)

  function graph filter test to make sure that function graph filtering works.

  function graph filter with stack tracing test to make sure that the function
   graph filter does filter and also continues to filter when another function tracer
   is running (like the stack tracer)

Link: http://lkml.kernel.org/r/20141103212737.696365174@goodmis.org
Link: http://lkml.kernel.org/r/20141104153028.602754370@goodmis.org

Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Steven Rostedt (Red Hat) 2014-09-23 17:33:36 -04:00 committed by Steven Rostedt
parent ee3988c77e
commit c6c93242db
3 changed files with 221 additions and 0 deletions

View file

@ -0,0 +1,89 @@
#!/bin/sh
# description: ftrace - function graph filters with stack tracer
# Make sure that function graph filtering works, and is not
# affected by other tracers enabled (like stack tracer)
if ! grep -q function_graph available_tracers; then
echo "no function graph tracer configured"
exit_unsupported
fi
if [ ! -f set_ftrace_filter ]; then
echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
exit_unsupported
fi
do_reset() {
reset_tracer
echo 0 > /proc/sys/kernel/stack_tracer_enabled
enable_tracing
clear_trace
echo > set_ftrace_filter
}
fail() { # msg
do_reset
echo $1
exit -1
}
disable_tracing
clear_trace;
# filter something, schedule is always good
if ! echo "schedule" > set_ftrace_filter; then
# test for powerpc 64
if ! echo ".schedule" > set_ftrace_filter; then
fail "can not enable schedule filter"
fi
fi
echo function_graph > current_tracer
if [ ! -f stack_trace ]; then
echo "Stack tracer not configured"
do_reset
exit_unsupported;
fi
echo "Now testing with stack tracer"
echo 1 > /proc/sys/kernel/stack_tracer_enabled
disable_tracing
clear_trace
enable_tracing
sleep 1
count=`cat trace | grep '()' | grep -v schedule | wc -l`
if [ $count -ne 0 ]; then
fail "Graph filtering not working with stack tracer?"
fi
# Make sure we did find something
count=`cat trace | grep 'schedule()' | wc -l`
if [ $count -eq 0 ]; then
fail "No schedule traces found?"
fi
echo 0 > /proc/sys/kernel/stack_tracer_enabled
clear_trace
sleep 1
count=`cat trace | grep '()' | grep -v schedule | wc -l`
if [ $count -ne 0 ]; then
fail "Graph filtering not working after stack tracer disabled?"
fi
count=`cat trace | grep 'schedule()' | wc -l`
if [ $count -eq 0 ]; then
fail "No schedule traces found?"
fi
do_reset
exit 0

View file

@ -0,0 +1,52 @@
#!/bin/sh
# description: ftrace - function graph filters
# Make sure that function graph filtering works
if ! grep -q function_graph available_tracers; then
echo "no function graph tracer configured"
exit_unsupported
fi
do_reset() {
reset_tracer
enable_tracing
clear_trace
}
fail() { # msg
do_reset
echo $1
exit -1
}
disable_tracing
clear_trace
# filter something, schedule is always good
if ! echo "schedule" > set_ftrace_filter; then
# test for powerpc 64
if ! echo ".schedule" > set_ftrace_filter; then
fail "can not enable schedule filter"
fi
fi
echo function_graph > current_tracer
enable_tracing
sleep 1
# search for functions (has "()" on the line), and make sure
# that only the schedule function was found
count=`cat trace | grep '()' | grep -v schedule | wc -l`
if [ $count -ne 0 ]; then
fail "Graph filtering not working by itself?"
fi
# Make sure we did find something
count=`cat trace | grep 'schedule()' | wc -l`
if [ $count -eq 0 ]; then
fail "No schedule traces found?"
fi
do_reset
exit 0

View file

@ -0,0 +1,80 @@
#!/bin/sh
# description: ftrace - function profiler with function tracing
# There was a bug after a rewrite of the ftrace infrastructure that
# caused the function_profiler not to be able to run with the function
# tracer, because the function_profiler used the function_graph tracer
# and it was assumed the two could not run simultaneously.
#
# There was another related bug where the solution to the first bug
# broke the way filtering of the function tracer worked.
#
# This test triggers those bugs on those kernels.
#
# We need function_graph and profiling to to run this test
if ! grep -q function_graph available_tracers; then
echo "no function graph tracer configured"
exit_unsupported;
fi
if [ ! -f set_ftrace_filter ]; then
echo "set_ftrace_filter not found? Is dynamic ftrace not set?"
exit_unsupported
fi
if [ ! -f function_profile_enabled ]; then
echo "function_profile_enabled not found, function profiling enabled?"
exit_unsupported
fi
fail() { # mesg
reset_tracer
echo > set_ftrace_filter
echo $1
exit -1
}
echo "Testing function tracer with profiler:"
echo "enable function tracer"
echo function > current_tracer
echo "enable profiler"
echo 1 > function_profile_enabled
sleep 1
echo "Now filter on just schedule"
echo '*schedule' > set_ftrace_filter
clear_trace
echo "Now disable function profiler"
echo 0 > function_profile_enabled
sleep 1
# make sure only schedule functions exist
echo "testing if only schedule is being traced"
if grep -v -e '^#' -e 'schedule' trace; then
fail "more than schedule was found"
fi
echo "Make sure schedule was traced"
if ! grep -e 'schedule' trace > /dev/null; then
cat trace
fail "can not find schedule in trace"
fi
echo > set_ftrace_filter
clear_trace
sleep 1
echo "make sure something other than scheduler is being traced"
if ! grep -v -e '^#' -e 'schedule' trace > /dev/null; then
cat trace
fail "no other functions besides schedule was found"
fi
reset_tracer
exit 0