Skip to content

Commit

Permalink
kselftests/ftrace: Add hist trigger testcases
Browse files Browse the repository at this point in the history
Add the hist trigger testcases for ftracetest.
This checks the basic histogram trigger behaviors like as;
 - Histogram trigger itself
 - Histogram with string key
 - Histogram with compound keys
 - Histogram with sort key
 - Histogram trigger modifiers (execname, hex, syscall)
 - Multiple histograms on an event
 - Named histogram
 - Named histogram on multi events

Here is the test result.
  ----
  # ./ftracetest test.d/trigger/*hist*.tc
  === Ftrace unit tests ===
  [1] event trigger - test histogram modifiers    [PASS]
  [2] event trigger - test histogram trigger      [PASS]
  [3] event trigger - test multiple histogram triggers    [PASS]

  # of passed:  3
  # of failed:  0
  # of unresolved:  0
  # of untested:  0
  # of unsupported:  0
  # of xfailed:  0
  # of undefined(test bug):  0
  ----

Link: http://lkml.kernel.org/r/17cb3a3d9eeadc3282645147905455a298e7fbeb.1457029949.git.tom.zanussi@linux.intel.com

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Shuah Khan <shuahkh@osg.samsung.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
[Tom Zanussi: Change multihist test from truncate ('>') to append ('>>')]
Reviewed-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
mhiramathitachi authored and rostedt committed Apr 19, 2016
1 parent cfa0963 commit 76929ab
Show file tree
Hide file tree
Showing 3 changed files with 221 additions and 0 deletions.
65 changes: 65 additions & 0 deletions tools/testing/selftests/ftrace/test.d/trigger/trigger-hist-mod.tc
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/bin/sh
# description: event trigger - test histogram modifiers

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

reset_tracer
do_reset

FEATURE=`grep hist events/sched/sched_process_fork/trigger`
if [ -z "$FEATURE" ]; then
echo "hist trigger is not supported"
exit_unsupported
fi

echo "Test histogram with execname modifier"

echo 'hist:keys=common_pid.execname' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
COMM=`cat /proc/$$/comm`
grep "common_pid: $COMM" events/sched/sched_process_fork/hist > /dev/null || \
fail "execname modifier on sched_process_fork did not work"

reset_trigger

echo "Test histogram with hex modifier"

echo 'hist:keys=parent_pid.hex' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
# Note that $$ is the parent pid. $PID is current PID.
HEX=`printf %x $PID`
grep "parent_pid: $HEX" events/sched/sched_process_fork/hist > /dev/null || \
fail "hex modifier on sched_process_fork did not work"

reset_trigger

echo "Test histogram with syscall modifier"

echo 'hist:keys=id.syscall' > events/raw_syscalls/sys_exit/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
grep "id: sys_" events/raw_syscalls/sys_exit/hist > /dev/null || \
fail "syscall modifier on raw_syscalls/sys_exit did not work"

do_reset

exit 0
83 changes: 83 additions & 0 deletions tools/testing/selftests/ftrace/test.d/trigger/trigger-hist.tc
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!/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

reset_tracer
do_reset

FEATURE=`grep hist events/sched/sched_process_fork/trigger`
if [ -z "$FEATURE" ]; then
echo "hist trigger is not supported"
exit_unsupported
fi

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
73 changes: 73 additions & 0 deletions tools/testing/selftests/ftrace/test.d/trigger/trigger-multihist.tc
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/bin/sh
# description: event trigger - test multiple histogram triggers

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

reset_tracer
do_reset

FEATURE=`grep hist events/sched/sched_process_fork/trigger`
if [ -z "$FEATURE" ]; then
echo "hist trigger is not supported"
exit_unsupported
fi

reset_trigger

echo "Test histogram multiple tiggers"

echo 'hist:keys=parent_pid:vals=child_pid' > events/sched/sched_process_fork/trigger
echo 'hist:keys=parent_comm: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"
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 its name"

echo 'hist:name=test_hist:keys=common_pid' > events/sched/sched_process_fork/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
grep test_hist events/sched/sched_process_fork/hist > /dev/null || \
fail "named event on sched_process_fork did not work"

echo "Test same named histogram on different events"

echo 'hist:name=test_hist:keys=common_pid' > events/sched/sched_process_exit/trigger
for i in `seq 1 10` ; do ( echo "forked" > /dev/null); done
grep test_hist events/sched/sched_process_exit/hist > /dev/null || \
fail "named event on sched_process_fork did not work"

diffs=`diff events/sched/sched_process_exit/hist events/sched/sched_process_fork/hist | wc -l`
test $diffs -eq 0 || fail "Same name histograms are not same"

reset_trigger

do_reset

exit 0

0 comments on commit 76929ab

Please sign in to comment.