When histograms are not configured in the kernel, the ftracetest histogram
selftests should return "unsupported" and not "Failed". To detect this, the
test scripts have:
FEATURE=`grep hist events/sched/sched_process_fork/trigger`
if [ -z "$FEATURE" ]; then
echo "hist trigger is not supported"
exit_unsupported
fi
The problem is that '-e' is in effect and any error will cause the program
to terminate. The grep for 'hist' fails, because it is not compiled it (thus
unsupported), but because grep has an error code for failing to find the
string, it causes the program to terminate, and is marked as a failed test.
Namhyung Kim recommended to test for the "hist" file located in
events/sched/sched_process_fork/hist instead, as it is more inline with the
other checks. As the hist file is only created if the histogram feature is
enabled, that is a valid check.
Link: http://lkml.kernel.org/r/20160523151538.4ea9ce0c@gandalf.local.home
Suggested-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Fixes: 76929ab51f
("kselftests/ftrace: Add hist trigger testcases")
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
82 lines
2.2 KiB
Bash
82 lines
2.2 KiB
Bash
#!/bin/sh
|
|
# description: event trigger - test histogram trigger
|
|
|
|
do_reset() {
|
|
reset_trigger
|
|
echo > set_event
|
|
clear_trace
|
|
}
|
|
|
|
fail() { #msg
|
|
do_reset
|
|
echo $1
|
|
exit $FAIL
|
|
}
|
|
|
|
if [ ! -f set_event -o ! -d events/sched ]; then
|
|
echo "event tracing is not supported"
|
|
exit_unsupported
|
|
fi
|
|
|
|
if [ ! -f events/sched/sched_process_fork/trigger ]; then
|
|
echo "event trigger is not supported"
|
|
exit_unsupported
|
|
fi
|
|
|
|
if [ ! -f events/sched/sched_process_fork/hist ]; then
|
|
echo "hist trigger is not supported"
|
|
exit_unsupported
|
|
fi
|
|
|
|
reset_tracer
|
|
do_reset
|
|
|
|
echo "Test histogram basic tigger"
|
|
|
|
echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
|
|
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
|
|
grep parent_pid events/sched/sched_process_fork/hist > /dev/null || \
|
|
fail "hist trigger on sched_process_fork did not work"
|
|
grep child events/sched/sched_process_fork/hist > /dev/null || \
|
|
fail "hist trigger on sched_process_fork did not work"
|
|
|
|
reset_trigger
|
|
|
|
echo "Test histogram with compound keys"
|
|
|
|
echo 'hist:keys=parent_pid,child_pid' > events/sched/sched_process_fork/trigger
|
|
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
|
|
grep '^{ parent_pid:.*, child_pid:.*}' events/sched/sched_process_fork/hist > /dev/null || \
|
|
fail "compound keys on sched_process_fork did not work"
|
|
|
|
reset_trigger
|
|
|
|
echo "Test histogram with string key"
|
|
|
|
echo 'hist:keys=parent_comm' > events/sched/sched_process_fork/trigger
|
|
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
|
|
COMM=`cat /proc/$$/comm`
|
|
grep "parent_comm: $COMM" events/sched/sched_process_fork/hist > /dev/null || \
|
|
fail "string key on sched_process_fork did not work"
|
|
|
|
reset_trigger
|
|
|
|
echo "Test histogram with sort key"
|
|
|
|
echo 'hist:keys=parent_pid,child_pid:sort=child_pid.ascending' > events/sched/sched_process_fork/trigger
|
|
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
|
|
|
|
check_inc() {
|
|
while [ $# -gt 1 ]; do
|
|
[ $1 -gt $2 ] && return 1
|
|
shift 1
|
|
done
|
|
return 0
|
|
}
|
|
check_inc `grep -o "child_pid:[[:space:]]*[[:digit:]]*" \
|
|
events/sched/sched_process_fork/hist | cut -d: -f2 ` ||
|
|
fail "sort param on sched_process_fork did not work"
|
|
|
|
do_reset
|
|
|
|
exit 0
|