Skip to contentSkip to conversation

kselftests/ftrace : Add event trigger testcases

PATCH In review Masami Hiramatsu 3 participants 4 messages Jul 25, 2015 – Oct 16, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 kselftests/ftrace : Add event trigger testcases

This adds simple event trigger testcases for ftracetest, which covers following triggers.
- traceon-traceoff trigger
- enable/disable_event trigger
- snapshot trigger
- stacktrace trigger
- trigger filters

Cc Steven Rostedt <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Shuah Khan <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Tom Zanussi <tom.zanussi-VuQAYsv1563Yd54FQh9/[email protected]>
---
 tools/testing/selftests/ftrace/test.d/functions    |    9 +++
 .../ftrace/test.d/trigger/trigger-eventonoff.tc    |   64 ++++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-filter.tc        |   59 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-snapshot.tc      |   56 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-stacktrace.tc    |   53 +++++++++++++++++
 .../ftrace/test.d/trigger/trigger-traceonoff.tc    |   58 ++++++++++++++++++
 6 files changed, 299 insertions(+)
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc
tools/testing/selftests/ftrace/test.d/functions +9 -0
index 5d8cd06..36ca18e 100644
@@ -14,3 +14,12 @@ enable_tracing() { # start trace recording
 reset_tracer() { # reset the current tracer
     echo nop > current_tracer
 }
+
+reset_trigger() { # reset all current setting triggers
+    grep -v ^# events/*/*/trigger |
+    while read line; do
+        cmd=`echo $line | cut -f2- -d:`
+	echo "!$cmd" > `echo $line | cut -f1 -d:`
+    done
+}
+
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +64 -0

64 lines not on this page · raw message

tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +59 -0

59 lines not on this page · raw message

tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc new file +56 -0

56 lines not on this page · raw message

tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc new file +53 -0

53 lines not on this page · raw message

tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc new file +58 -0

58 lines not on this page · raw message

#1 lore raw

Hi Masami,

Quoted 33 lines · Masami Hiramatsu

This adds simple event trigger testcases for ftracetest, which covers following triggers.
- traceon-traceoff trigger
- enable/disable_event trigger
- snapshot trigger
- stacktrace trigger
- trigger filters

Cc Steven Rostedt <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Shuah Khan <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Tom Zanussi <tom.zanussi-VuQAYsv1563Yd54FQh9/[email protected]>
---
 tools/testing/selftests/ftrace/test.d/functions    |    9 +++
 .../ftrace/test.d/trigger/trigger-eventonoff.tc    |   64 ++++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-filter.tc        |   59 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-snapshot.tc      |   56 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-stacktrace.tc    |   53 +++++++++++++++++
 .../ftrace/test.d/trigger/trigger-traceonoff.tc    |   58 ++++++++++++++++++
 6 files changed, 299 insertions(+)
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc
tools/testing/selftests/ftrace/test.d/functions +0 -0
index 5d8cd06..36ca18e 100644

tools/testing/selftests/ftrace/test.d/functions enable_tracing() { # start trace recording · line 22

Quoted 9 lines
tools/testing/selftests/ftrace/test.d/functions +6 -0
@@ -14,3 +14,12 @@ enable_tracing() { # start trace recording
 reset_tracer() { # reset the current tracer
     echo nop > current_tracer
 }
+
+reset_trigger() { # reset all current setting triggers
+    grep -v ^# events/*/*/trigger |
+    while read line; do
+        cmd=`echo $line | cut -f2- -d:`
+	echo "!$cmd" > `echo $line | cut -f1 -d:`

Broken whitespaces?

Quoted 59 lines
tools/testing/selftests/ftrace/test.d/functions +3 -0
+    done
+}
+
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +50 -0
new file mode 100644
index 0000000..1a94450
@@ -0,0 +1,64 @@
+#!/bin/sh
+# description: event trigger - test event enable/disable 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 enable_event events/sched/sched_process_fork/trigger`
+if [ -z "$FEATURE" ]; then
+    echo "event enable/disable trigger is not supported"
+    exit_unsupported
+fi
+
+echo "Test enable_event trigger"
+echo 0 > events/sched/sched_switch/enable
+echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat events/sched/sched_switch/enable` != '1*' ]; then
+    fail "enable_event trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test disable_event trigger"
+echo 1 > events/sched/sched_switch/enable
+echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat events/sched/sched_switch/enable` != '0*' ]; then
+    fail "disable_event trigger on sched_process_fork did not work"

tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc line 60

Quoted 10 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +10 -0
+fi
+
+reset_trigger
+
+echo "Test semantic error for event enable/disable trigger"
+! echo 'enable_event:nogroup:noevent' > events/sched/sched_process_fork/trigger
+! echo 'disable_event+1' > events/sched/sched_process_fork/trigger
+echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+! echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+! echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger

I don't know whether the '!' sign works for all shells. Btw, what is the last two lines for?

Quoted 31 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +4 -0
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +21 -0
new file mode 100644
index 0000000..514e466
@@ -0,0 +1,59 @@
+#!/bin/sh
+# description: event trigger - test trigger filter
+
+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

tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc line 31

Quoted 10 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +10 -0
+    echo "event trigger is not supported"
+    exit_unsupported
+fi
+
+reset_tracer
+do_reset
+
+echo "Test trigger filter"
+echo 1 > tracing_on
+echo 'traceoff if child_pid == 0' > events/sched/sched_process_fork/trigger

What about checking child_comm too to verify complex filter pattern with string type? Maybe something like below (not tested..)?

echo 'traceoff if child_pid != 0 && child_comm ~ '*sh' > events/.../trigger

Thanks,
Namhyung

Quoted 214 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +28 -0
+( echo "forked")
+if [ `cat tracing_on` -ne 1 ]; then
+    fail "traceoff trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test semantic error for trigger filter"
+! echo 'traceoff if a' > events/sched/sched_process_fork/trigger
+! echo 'traceoff if common_pid=0' > events/sched/sched_process_fork/trigger
+! echo 'traceoff if common_pid==b' > events/sched/sched_process_fork/trigger
+echo 'traceoff if common_pid == 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+! echo 'traceoff if common_pid == child_pid' > events/sched/sched_process_fork/trigger
+echo 'traceoff if common_pid <= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+echo 'traceoff if common_pid >= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+echo 'traceoff if parent_pid >= 0 && child_pid >= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+echo 'traceoff if parent_pid >= 0 || child_pid >= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+
+
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc new file +56 -0
new file mode 100644
index 0000000..f84b80d
@@ -0,0 +1,56 @@
+#!/bin/sh
+# description: event trigger - test snapshot-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 snapshot events/sched/sched_process_fork/trigger`
+if [ -z "$FEATURE" ]; then
+    echo "snapshot trigger is not supported"
+    exit_unsupported
+fi
+
+echo "Test snapshot tigger"
+echo 0 > snapshot
+echo 1 > events/sched/sched_process_fork/enable
+( echo "forked")
+echo 'snapshot:1' > events/sched/sched_process_fork/trigger
+( echo "forked")
+grep sched_process_fork snapshot > /dev/null || \
+    fail "snapshot trigger on sched_process_fork did not work"
+
+reset_trigger
+echo 0 > snapshot
+echo 0 > events/sched/sched_process_fork/enable
+
+echo "Test snapshot semantic errors"
+
+! echo "snapshot+1" > events/sched/sched_process_fork/trigger
+echo "snapshot" > events/sched/sched_process_fork/trigger
+! echo "snapshot" > events/sched/sched_process_fork/trigger
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc new file +53 -0
new file mode 100644
index 0000000..9fa23b0
@@ -0,0 +1,53 @@
+#!/bin/sh
+# description: event trigger - test stacktrace-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 stacktrace events/sched/sched_process_fork/trigger`
+if [ -z "$FEATURE" ]; then
+    echo "stacktrace trigger is not supported"
+    exit_unsupported
+fi
+
+echo "Test stacktrace tigger"
+echo 0 > trace
+echo 0 > options/stacktrace
+echo 'stacktrace' > events/sched/sched_process_fork/trigger
+( echo "forked")
+grep "<stack trace>" trace > /dev/null || \
+    fail "stacktrace trigger on sched_process_fork did not work"
+
+reset_trigger
+
+echo "Test stacktrace semantic errors"
+
+! echo "stacktrace:foo" > events/sched/sched_process_fork/trigger
+echo "stacktrace" > events/sched/sched_process_fork/trigger
+! echo "stacktrace" > events/sched/sched_process_fork/trigger
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc new file +58 -0
new file mode 100644
index 0000000..87648e5
@@ -0,0 +1,58 @@
+#!/bin/sh
+# description: event trigger - test traceon/off 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
+
+echo "Test traceoff trigger"
+echo 1 > tracing_on
+echo 'traceoff' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat tracing_on` -ne 0 ]; then
+    fail "traceoff trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test traceon trigger"
+echo 0 > tracing_on
+echo 'traceon' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat tracing_on` -ne 1 ]; then
+    fail "traceoff trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test semantic error for traceoff/on trigger"
+! echo 'traceoff:badparam' > events/sched/sched_process_fork/trigger
+! echo 'traceoff+0' > events/sched/sched_process_fork/trigger
+echo 'traceon' > events/sched/sched_process_fork/trigger
+! echo 'traceon' > events/sched/sched_process_fork/trigger
+! echo 'traceoff' > events/sched/sched_process_fork/trigger
+
+do_reset
+
+exit 0
#2 lore raw
Quoted 31 lines · Namhyung Kim

Hi Masami,

Quoted 28 lines · Masami Hiramatsu

This adds simple event trigger testcases for ftracetest, which covers following triggers.
- traceon-traceoff trigger
- enable/disable_event trigger
- snapshot trigger
- stacktrace trigger
- trigger filters

Cc Steven Rostedt <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Shuah Khan <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Tom Zanussi <[email protected]>
---
 tools/testing/selftests/ftrace/test.d/functions    |    9 +++
 .../ftrace/test.d/trigger/trigger-eventonoff.tc    |   64 ++++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-filter.tc        |   59 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-snapshot.tc      |   56 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-stacktrace.tc    |   53 +++++++++++++++++
 .../ftrace/test.d/trigger/trigger-traceonoff.tc    |   58 ++++++++++++++++++
 6 files changed, 299 insertions(+)
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc
Quoted 16 lines
Quoted 5 lines
tools/testing/selftests/ftrace/test.d/functions +0 -0
index 5d8cd06..36ca18e 100644

tools/testing/selftests/ftrace/test.d/functions enable_tracing() { # start trace recording · line 22

Quoted 9 lines
tools/testing/selftests/ftrace/test.d/functions +6 -0
@@ -14,3 +14,12 @@ enable_tracing() { # start trace recording
 reset_tracer() { # reset the current tracer
     echo nop > current_tracer
 }
+
+reset_trigger() { # reset all current setting triggers
+    grep -v ^# events/*/*/trigger |
+    while read line; do
+        cmd=`echo $line | cut -f2- -d:`
+	echo "!$cmd" > `echo $line | cut -f1 -d:`

Broken whitespaces?

Right, I'll fix that.

Quoted 64 lines
Quoted 64 lines
tools/testing/selftests/ftrace/test.d/functions +3 -0
+    done
+}
+
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +55 -0
new file mode 100644
index 0000000..1a94450
@@ -0,0 +1,64 @@
+#!/bin/sh
+# description: event trigger - test event enable/disable 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 enable_event events/sched/sched_process_fork/trigger`
+if [ -z "$FEATURE" ]; then
+    echo "event enable/disable trigger is not supported"
+    exit_unsupported
+fi
+
+echo "Test enable_event trigger"
+echo 0 > events/sched/sched_switch/enable
+echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat events/sched/sched_switch/enable` != '1*' ]; then
+    fail "enable_event trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test disable_event trigger"
+echo 1 > events/sched/sched_switch/enable
+echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat events/sched/sched_switch/enable` != '0*' ]; then
+    fail "disable_event trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test semantic error for event enable/disable trigger"
Quoted 8 lines

tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc line 60

Quoted 5 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +5 -0
+! echo 'enable_event:nogroup:noevent' > events/sched/sched_process_fork/trigger
+! echo 'disable_event+1' > events/sched/sched_process_fork/trigger
+echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+! echo 'enable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger
+! echo 'disable_event:sched:sched_switch' > events/sched/sched_process_fork/trigger

I don't know whether the '!' sign works for all shells. Btw, what is the last two lines for?

"!" means that the line must fail. And the last 2 lines means that the enable/disable event trigger on same target event cannot be registered at once.

Quoted 45 lines
Quoted 31 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc new file +4 -0
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +21 -0
new file mode 100644
index 0000000..514e466
@@ -0,0 +1,59 @@
+#!/bin/sh
+# description: event trigger - test trigger filter
+
+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

tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc line 31

Quoted 10 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +10 -0
+    echo "event trigger is not supported"
+    exit_unsupported
+fi
+
+reset_tracer
+do_reset
+
+echo "Test trigger filter"
+echo 1 > tracing_on
+echo 'traceoff if child_pid == 0' > events/sched/sched_process_fork/trigger

What about checking child_comm too to verify complex filter pattern with string type? Maybe something like below (not tested..)?

Quoted 1 line

echo 'traceoff if child_pid != 0 && child_comm ~ '*sh' > events/.../trigger

OK, I'll add more complex patterns.

Thanks!

Quoted 219 lines

Thanks,
Namhyung

Quoted 214 lines
tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc new file +28 -0
+( echo "forked")
+if [ `cat tracing_on` -ne 1 ]; then
+    fail "traceoff trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test semantic error for trigger filter"
+! echo 'traceoff if a' > events/sched/sched_process_fork/trigger
+! echo 'traceoff if common_pid=0' > events/sched/sched_process_fork/trigger
+! echo 'traceoff if common_pid==b' > events/sched/sched_process_fork/trigger
+echo 'traceoff if common_pid == 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+! echo 'traceoff if common_pid == child_pid' > events/sched/sched_process_fork/trigger
+echo 'traceoff if common_pid <= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+echo 'traceoff if common_pid >= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+echo 'traceoff if parent_pid >= 0 && child_pid >= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+echo 'traceoff if parent_pid >= 0 || child_pid >= 0' > events/sched/sched_process_fork/trigger
+echo '!traceoff' > events/sched/sched_process_fork/trigger
+
+
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc new file +56 -0
new file mode 100644
index 0000000..f84b80d
@@ -0,0 +1,56 @@
+#!/bin/sh
+# description: event trigger - test snapshot-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 snapshot events/sched/sched_process_fork/trigger`
+if [ -z "$FEATURE" ]; then
+    echo "snapshot trigger is not supported"
+    exit_unsupported
+fi
+
+echo "Test snapshot tigger"
+echo 0 > snapshot
+echo 1 > events/sched/sched_process_fork/enable
+( echo "forked")
+echo 'snapshot:1' > events/sched/sched_process_fork/trigger
+( echo "forked")
+grep sched_process_fork snapshot > /dev/null || \
+    fail "snapshot trigger on sched_process_fork did not work"
+
+reset_trigger
+echo 0 > snapshot
+echo 0 > events/sched/sched_process_fork/enable
+
+echo "Test snapshot semantic errors"
+
+! echo "snapshot+1" > events/sched/sched_process_fork/trigger
+echo "snapshot" > events/sched/sched_process_fork/trigger
+! echo "snapshot" > events/sched/sched_process_fork/trigger
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc new file +53 -0
new file mode 100644
index 0000000..9fa23b0
@@ -0,0 +1,53 @@
+#!/bin/sh
+# description: event trigger - test stacktrace-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 stacktrace events/sched/sched_process_fork/trigger`
+if [ -z "$FEATURE" ]; then
+    echo "stacktrace trigger is not supported"
+    exit_unsupported
+fi
+
+echo "Test stacktrace tigger"
+echo 0 > trace
+echo 0 > options/stacktrace
+echo 'stacktrace' > events/sched/sched_process_fork/trigger
+( echo "forked")
+grep "<stack trace>" trace > /dev/null || \
+    fail "stacktrace trigger on sched_process_fork did not work"
+
+reset_trigger
+
+echo "Test stacktrace semantic errors"
+
+! echo "stacktrace:foo" > events/sched/sched_process_fork/trigger
+echo "stacktrace" > events/sched/sched_process_fork/trigger
+! echo "stacktrace" > events/sched/sched_process_fork/trigger
+
+do_reset
+
+exit 0
tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc new file +58 -0
new file mode 100644
index 0000000..87648e5
@@ -0,0 +1,58 @@
+#!/bin/sh
+# description: event trigger - test traceon/off 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
+
+echo "Test traceoff trigger"
+echo 1 > tracing_on
+echo 'traceoff' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat tracing_on` -ne 0 ]; then
+    fail "traceoff trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test traceon trigger"
+echo 0 > tracing_on
+echo 'traceon' > events/sched/sched_process_fork/trigger
+( echo "forked")
+if [ `cat tracing_on` -ne 1 ]; then
+    fail "traceoff trigger on sched_process_fork did not work"
+fi
+
+reset_trigger
+
+echo "Test semantic error for traceoff/on trigger"
+! echo 'traceoff:badparam' > events/sched/sched_process_fork/trigger
+! echo 'traceoff+0' > events/sched/sched_process_fork/trigger
+echo 'traceon' > events/sched/sched_process_fork/trigger
+! echo 'traceon' > events/sched/sched_process_fork/trigger
+! echo 'traceoff' > events/sched/sched_process_fork/trigger
+
+do_reset
+
+exit 0
Signature · 5 lines
Masami HIRAMATSU
Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering
Hitachi, Ltd., Research & Development Group
E-mail: [email protected]
maintainer
#3 lore raw
Quoted 51 lines · On Sun, 02 Aug 2015 07:40:05 +0900 Masami Hiramatsu…
Quoted 31 lines · Namhyung Kim

Hi Masami,

Quoted 28 lines · Masami Hiramatsu

This adds simple event trigger testcases for ftracetest, which covers following triggers.
- traceon-traceoff trigger
- enable/disable_event trigger
- snapshot trigger
- stacktrace trigger
- trigger filters

Cc Steven Rostedt <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Shuah Khan <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Tom Zanussi <[email protected]>
---
 tools/testing/selftests/ftrace/test.d/functions    |    9 +++
 .../ftrace/test.d/trigger/trigger-eventonoff.tc    |   64 ++++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-filter.tc        |   59 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-snapshot.tc      |   56 ++++++++++++++++++
 .../ftrace/test.d/trigger/trigger-stacktrace.tc    |   53 +++++++++++++++++
 .../ftrace/test.d/trigger/trigger-traceonoff.tc    |   58 ++++++++++++++++++
 6 files changed, 299 insertions(+)
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-eventonoff.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-filter.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-snapshot.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-stacktrace.tc
 create mode 100644 tools/testing/selftests/ftrace/test.d/trigger/trigger-traceonoff.tc
Quoted 16 lines
Quoted 5 lines
tools/testing/selftests/ftrace/test.d/functions +0 -0
index 5d8cd06..36ca18e 100644

tools/testing/selftests/ftrace/test.d/functions enable_tracing() { # start trace recording · line 22

Quoted 9 lines
tools/testing/selftests/ftrace/test.d/functions +6 -0
@@ -14,3 +14,12 @@ enable_tracing() { # start trace recording
 reset_tracer() { # reset the current tracer
     echo nop > current_tracer
 }
+
+reset_trigger() { # reset all current setting triggers
+    grep -v ^# events/*/*/trigger |
+    while read line; do
+        cmd=`echo $line | cut -f2- -d:`
+	echo "!$cmd" > `echo $line | cut -f1 -d:`

Broken whitespaces?

Right, I'll fix that.

[..]

Quoted 6 lines
Quoted 4 lines

What about checking child_comm too to verify complex filter pattern with string type? Maybe something like below (not tested..)?

echo 'traceoff if child_pid != 0 && child_comm ~ '*sh' > events/.../trigger

OK, I'll add more complex patterns.

Hi Masami,

Did you ever send an updated patch?

-- Steve