Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1647657 > unrolled thread

[PATCH 0/7] selftests/ftrace: Some improvements of ftracetest

Started byMasami Hiramatsu <mhiramat@kernel.org>
First post2017-05-23 08:10 +0200
Last post2017-05-23 08:20 +0200
Articles 8 — 1 participant

Back to article view | Back to linux.kernel


Contents

  [PATCH 0/7] selftests/ftrace: Some improvements of ftracetest Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:10 +0200
    [PATCH 5/7] selftests/ftrace: Add instance indication in test log Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:10 +0200
    [PATCH 3/7] ftrace/kprobes: selftests: Check kretprobe maxactive is supported Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:10 +0200
    [PATCH 4/7] selftests/ftrace: Reset ftrace filter on older kernel Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:10 +0200
    [PATCH 2/7] selftests/ftrace: Reduce trace buffer checking overhead Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:10 +0200
    [PATCH 1/7] selftests/ftrace: Skip full-glob-matching filter test on older kernel Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:10 +0200
    [PATCH 7/7] selftests/ftrace: Return unsupported if it detects older kernel Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:20 +0200
    [PATCH 6/7] selftests/ftrace: Use top-level available_filter_function Masami Hiramatsu <mhiramat@kernel.org> - 2017-05-23 08:20 +0200

#1647657 — [PATCH 0/7] selftests/ftrace: Some improvements of ftracetest

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:10 +0200
Subject[PATCH 0/7] selftests/ftrace: Some improvements of ftracetest
Message-ID<tKbb3-7G0-3@gated-at.bofh.it>
Hi,

This series improves ftracetest mainly to run on 4.9 stable
tree kernel. There still some issues remains (it seems some
fixes are not merged), but a half of issues are fixed.

NOTE: One patch will modify ftrace README to check the
availability of the maxactive option, which should have
been implemented with the function-added patch.

With this series, only 1 test actually failed on 4.9.29.
(and 3 unsupported, since it is too old to support it)

Tue May 23 05:56:24 UTC 2017
=== Ftrace unit tests ===
[1] Basic trace file check      [PASS]
[2] Basic test for tracers      [PASS]
[3] Basic trace clock test      [PASS]
[4] Basic event tracing check   [PASS]
[5] event tracing - enable/disable with event level files       [PASS]
[6] event tracing - restricts events based on pid       [PASS]
[7] event tracing - enable/disable with subsystem level files   [PASS]
[8] event tracing - enable/disable with top level files [PASS]
[9] ftrace - function graph filters with stack tracer   [PASS]
[10] ftrace - function graph filters    [PASS]
[11] ftrace - function glob filters     [PASS]
[12] ftrace - function pid filters      [PASS]
[13] ftrace - test for function event triggers  [PASS]
[14] ftrace - function profiler with function tracing   [PASS]
[15] ftrace - test reading of set_ftrace_filter [FAIL]
[16] ftrace - test for function traceon/off triggers    [PASS]
[17] Test creation and deletion of trace instances while setting an event       [PASS]
[18] Test creation and deletion of trace instances      [PASS]
[19] Kprobe dynamic event - adding and removing [PASS]
[20] Kprobe dynamic event - busy event check    [PASS]
[21] Kprobe dynamic event with arguments        [PASS]
[22] Kprobes event arguments with types [PASS]
[23] Kprobe dynamic event with function tracer  [PASS]
[24] Kretprobe dynamic event with arguments     [PASS]
[25] Kretprobe dynamic event with maxactive     [UNSUPPORTED]
[26] event trigger - test event enable/disable trigger  [PASS]
[27] event trigger - test trigger filter        [PASS]
[28] event trigger - test histogram modifiers   [PASS]
[29] event trigger - test histogram trigger     [PASS]
[30] event trigger - test multiple histogram triggers   [PASS]
[31] event trigger - test snapshot-trigger      [PASS]
[32] event trigger - test stacktrace-trigger    [PASS]
[33] event trigger - test traceon/off trigger   [PASS]
[34] (instance)  Basic test for tracers [PASS]
[35] (instance)  Basic trace clock test [PASS]
[36] (instance)  event tracing - enable/disable with event level files  [PASS]
[37] (instance)  event tracing - restricts events based on pid  [PASS]
[38] (instance)  event tracing - enable/disable with subsystem level files      [PASS]
[39] (instance)  ftrace - test for function event triggers      [UNSUPPORTED]
[40] (instance)  ftrace - test for function traceon/off triggers        [UNSUPPORTED]
[41] (instance)  event trigger - test event enable/disable trigger      [PASS]
[42] (instance)  event trigger - test trigger filter    [PASS]
[43] (instance)  event trigger - test histogram modifiers       [PASS]
[44] (instance)  event trigger - test histogram trigger [PASS]
[45] (instance)  event trigger - test multiple histogram triggers       [PASS]

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


> [15] ftrace - test reading of set_ftrace_filter [FAIL]
was caused by the difference of the result of 
"dd bs=1 if=set_ftrace_filter" and "cat set_ftrace_filter",
which has been fixed on upstream by commit fcdc71257923
("ftrace: Fix indexing of t_hash_start() from t_next()")
but backporting it onto 4.9.y stable tree didn't fix that.


Thank you,

---

Masami Hiramatsu (7):
      selftests/ftrace: Skip full-glob-matching filter test on older kernel
      selftests/ftrace: Reduce trace buffer checking overhead
      ftrace/kprobes: selftests: Check kretprobe maxactive is supported
      selftests/ftrace: Reset ftrace filter on older kernel
      selftests/ftrace: Add instance indication in test log
      selftests/ftrace: Use top-level available_filter_function
      selftests/ftrace: Return unsupported if it detects older kernel


 kernel/trace/trace.c                               |    3 +-
 tools/testing/selftests/ftrace/ftracetest          |    2 +
 .../ftrace/test.d/event/toplevel-enable.tc         |    8 ++++--
 .../ftrace/test.d/ftrace/func-filter-glob.tc       |   28 ++++++++++++--------
 .../ftrace/test.d/ftrace/func_event_triggers.tc    |    9 ++++++
 .../test.d/ftrace/func_traceonoff_triggers.tc      |   13 +++++++++
 .../ftrace/test.d/instances/instance-event.tc      |    5 +++-
 .../ftrace/test.d/kprobe/kretprobe_maxactive.tc    |    1 +
 8 files changed, 53 insertions(+), 16 deletions(-)

--
Masami Hiramatsu (Linaro) <mhiramat@kernel.org>

[toc] | [next] | [standalone]


#1647658 — [PATCH 5/7] selftests/ftrace: Add instance indication in test log

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:10 +0200
Subject[PATCH 5/7] selftests/ftrace: Add instance indication in test log
Message-ID<tKbb4-7G0-5@gated-at.bofh.it>
In reply to#1647657
Add instance test indication in test log too.
Current ftracetest shows instance test indication on
the list of test, but not in the log for each test.

This adds instance test indication on the top of
each log, like below;

execute (instance) : /ftrace/test.d/ftrace/func_set_ftrace_file.tc

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 tools/testing/selftests/ftrace/ftracetest |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest
index 7175811..14a03ea 100755
--- a/tools/testing/selftests/ftrace/ftracetest
+++ b/tools/testing/selftests/ftrace/ftracetest
@@ -250,7 +250,7 @@ run_test() { # testfile
   local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
   export TMPDIR=`mktemp -d /tmp/ftracetest-dir.XXXXXX`
   testcase $1
-  echo "execute: "$1 > $testlog
+  echo "execute$INSTANCE: "$1 > $testlog
   SIG_RESULT=0
   if [ $VERBOSE -ge 2 ]; then
     __run_test $1 2>> $testlog | tee -a $testlog

[toc] | [prev] | [next] | [standalone]


#1647659 — [PATCH 3/7] ftrace/kprobes: selftests: Check kretprobe maxactive is supported

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:10 +0200
Subject[PATCH 3/7] ftrace/kprobes: selftests: Check kretprobe maxactive is supported
Message-ID<tKbb4-7G0-7@gated-at.bofh.it>
In reply to#1647657
Check the kretprobe maxactive is supported by kprobe_events
interface. To ensure the kernel feature, this changes ftrace
README to describe it.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 kernel/trace/trace.c                               |    3 ++-
 .../ftrace/test.d/kprobe/kretprobe_maxactive.tc    |    1 +
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 1122f15..dc3f91e 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -4473,7 +4473,8 @@ static const char readme_msg[] =
 #endif
 #if defined(CONFIG_KPROBE_EVENTS) || defined(CONFIG_UPROBE_EVENTS)
 	"\t  accepts: event-definitions (one definition per line)\n"
-	"\t   Format: p|r[:[<group>/]<event>] <place> [<args>]\n"
+	"\t   Format: p[:[<group>/]<event>] <place> [<args>]\n"
+	"\t           r[maxactive][:[<group>/]<event>] <place> [<args>]\n"
 	"\t           -:[<group>/]<event>\n"
 #ifdef CONFIG_KPROBE_EVENTS
 	"\t    place: [<module>:]<symbol>[+<offset>]|<memaddr>\n"
diff --git a/tools/testing/selftests/ftrace/test.d/kprobe/kretprobe_maxactive.tc b/tools/testing/selftests/ftrace/test.d/kprobe/kretprobe_maxactive.tc
index 57abdf1..7ec6f26 100644
--- a/tools/testing/selftests/ftrace/test.d/kprobe/kretprobe_maxactive.tc
+++ b/tools/testing/selftests/ftrace/test.d/kprobe/kretprobe_maxactive.tc
@@ -2,6 +2,7 @@
 # description: Kretprobe dynamic event with maxactive
 
 [ -f kprobe_events ] || exit_unsupported # this is configurable
+grep -q 'r\[maxactive\]' README || exit_unsupported # this is older version
 
 echo > kprobe_events
 

[toc] | [prev] | [next] | [standalone]


#1647660 — [PATCH 4/7] selftests/ftrace: Reset ftrace filter on older kernel

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:10 +0200
Subject[PATCH 4/7] selftests/ftrace: Reset ftrace filter on older kernel
Message-ID<tKbb4-7G0-11@gated-at.bofh.it>
In reply to#1647657
Since older kernel didn't support separated instance of
set_ftrace_filter, if the test case set the filter in
an instance, it will propagate to top-level instance.
This means that the filter setting remains even if we
remove the instance, and will cause other tests failure.
To avoid this issue, reset the ftrace filter if we
detect the propagation.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 .../ftrace/test.d/instances/instance-event.tc      |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc b/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc
index c73db78..8a35331 100644
--- a/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc
+++ b/tools/testing/selftests/ftrace/test.d/instances/instance-event.tc
@@ -82,7 +82,10 @@ rmdir foo
 if [ -d foo ]; then
         fail "foo still exists"
 fi
-
+if grep -q "schedule:enable_event:sched:sched_switch" ../set_ftrace_filter; then
+	echo "Older kernel detected. Cleanup filter"
+	echo '!schedule:enable_event:sched:sched_switch' > ../set_ftrace_filter
+fi
 
 instance_slam() {
     while :; do

[toc] | [prev] | [next] | [standalone]


#1647662 — [PATCH 2/7] selftests/ftrace: Reduce trace buffer checking overhead

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:10 +0200
Subject[PATCH 2/7] selftests/ftrace: Reduce trace buffer checking overhead
Message-ID<tKbb4-7G0-13@gated-at.bofh.it>
In reply to#1647657
Current event/toplevel-enable.tc checking the trace
buffer by dumping all events while recording events.
However, this makes system very busy.

To reduce this overhead comes from reading trace buffer
and recording trace buffer, use head instead of cat
and stop tracing while reading.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 .../ftrace/test.d/event/toplevel-enable.tc         |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/ftrace/test.d/event/toplevel-enable.tc b/tools/testing/selftests/ftrace/test.d/event/toplevel-enable.tc
index 0bb5df3..15e2d3f 100644
--- a/tools/testing/selftests/ftrace/test.d/event/toplevel-enable.tc
+++ b/tools/testing/selftests/ftrace/test.d/event/toplevel-enable.tc
@@ -28,7 +28,9 @@ echo '*:*' > set_event
 
 yield
 
-count=`cat trace | grep -v ^# | wc -l`
+echo 0 > tracing_on
+
+count=`head -n 128 trace | grep -v ^# | wc -l`
 if [ $count -eq 0 ]; then
     fail "none of events are recorded"
 fi
@@ -36,10 +38,12 @@ fi
 do_reset
 
 echo 1 > events/enable
+echo 1 > tracing_on
 
 yield
 
-count=`cat trace | grep -v ^# | wc -l`
+echo 0 > tracing_on
+count=`head -n 128 trace | grep -v ^# | wc -l`
 if [ $count -eq 0 ]; then
     fail "none of events are recorded"
 fi

[toc] | [prev] | [next] | [standalone]


#1647664 — [PATCH 1/7] selftests/ftrace: Skip full-glob-matching filter test on older kernel

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:10 +0200
Subject[PATCH 1/7] selftests/ftrace: Skip full-glob-matching filter test on older kernel
Message-ID<tKbb4-7G0-17@gated-at.bofh.it>
In reply to#1647657
Skip a part of ftrace filter test related to full-glob
matching if we are sure that the testing kernel is so old
that it does not support full-glob-matching yet.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 .../ftrace/test.d/ftrace/func-filter-glob.tc       |   28 ++++++++++++--------
 1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/tools/testing/selftests/ftrace/test.d/ftrace/func-filter-glob.tc b/tools/testing/selftests/ftrace/test.d/ftrace/func-filter-glob.tc
index 9dcd0ca..8095e12 100644
--- a/tools/testing/selftests/ftrace/test.d/ftrace/func-filter-glob.tc
+++ b/tools/testing/selftests/ftrace/test.d/ftrace/func-filter-glob.tc
@@ -11,17 +11,6 @@ fi
 disable_tracing
 clear_trace
 
-# filter by ?, schedule is always good
-if ! echo "sch?dule" > set_ftrace_filter; then
-    # test for powerpc 64
-    if ! echo ".sch?dule" > set_ftrace_filter; then
-	fail "can not enable schedule filter"
-    fi
-    cat set_ftrace_filter | grep '^.schedule$'
-else
-    cat set_ftrace_filter | grep '^schedule$'
-fi
-
 ftrace_filter_check() { # glob grep
   echo "$1" > set_ftrace_filter
   cut -f1 -d" " set_ftrace_filter > $TMPDIR/actual
@@ -39,11 +28,28 @@ ftrace_filter_check '*schedule*' '^.*schedule.*$'
 # filter by *, end match
 ftrace_filter_check 'schedule*' '^schedule.*$'
 
+# Advanced full-glob matching feature is recently supported.
+# Skip the tests if we are sure the kernel does not support it.
+if grep -q 'accepts: .* glob-matching-pattern' README ; then
+
 # filter by *, both side match
 ftrace_filter_check 'sch*ule' '^sch.*ule$'
 
 # filter by char class.
 ftrace_filter_check '[Ss]y[Ss]_*' '^[Ss]y[Ss]_.*$'
 
+# filter by ?, schedule is always good
+if ! echo "sch?dule" > set_ftrace_filter; then
+    # test for powerpc 64
+    if ! echo ".sch?dule" > set_ftrace_filter; then
+	fail "can not enable schedule filter"
+    fi
+    cat set_ftrace_filter | grep '^.schedule$'
+else
+    cat set_ftrace_filter | grep '^schedule$'
+fi
+
+fi
+
 echo > set_ftrace_filter
 enable_tracing

[toc] | [prev] | [next] | [standalone]


#1647665 — [PATCH 7/7] selftests/ftrace: Return unsupported if it detects older kernel

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:20 +0200
Subject[PATCH 7/7] selftests/ftrace: Return unsupported if it detects older kernel
Message-ID<tKbkJ-7J8-1@gated-at.bofh.it>
In reply to#1647657
Return unsupported if the kernel is too old to support
instance independent ftrace filter for some testcases.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 .../ftrace/test.d/ftrace/func_event_triggers.tc    |    9 +++++++++
 .../test.d/ftrace/func_traceonoff_triggers.tc      |    9 +++++++++
 2 files changed, 18 insertions(+)

diff --git a/tools/testing/selftests/ftrace/test.d/ftrace/func_event_triggers.tc b/tools/testing/selftests/ftrace/test.d/ftrace/func_event_triggers.tc
index aa31368..77dfb6b 100644
--- a/tools/testing/selftests/ftrace/test.d/ftrace/func_event_triggers.tc
+++ b/tools/testing/selftests/ftrace/test.d/ftrace/func_event_triggers.tc
@@ -72,6 +72,15 @@ run_enable_disable() {
     test_event_enabled $check_disable
 
     echo "schedule:${enable}_event:$EVENT" > set_ftrace_filter
+    if [ -d ../../instances ]; then # Check instances
+	cur=`cat set_ftrace_filter`
+	top=`cat ../../set_ftrace_filter`
+	if [ "$cur" = "$top" ]; then
+	    echo "This kernel is too old to support per instance filter"
+	    reset_ftrace_filter
+	    exit_unsupported
+	fi
+    fi
 
     echo " make sure it works 5 times"
 
diff --git a/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc b/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
index 1b0817b..9cf3852 100644
--- a/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
+++ b/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
@@ -75,6 +75,15 @@ fi
 echo '** SET TRACEOFF'
 
 echo "$func:traceoff" > set_ftrace_filter
+if [ -d ../../instances ]; then # Check instances
+    cur=`cat set_ftrace_filter`
+    top=`cat ../../set_ftrace_filter`
+    if [ "$cur" = "$top" ]; then
+	echo "This kernel is too old to support per instance filter"
+	reset_ftrace_filter
+	exit_unsupported
+    fi
+fi
 
 cnt=`grep schedule set_ftrace_filter | wc -l`
 if [ $cnt -ne 1 ]; then

[toc] | [prev] | [next] | [standalone]


#1647666 — [PATCH 6/7] selftests/ftrace: Use top-level available_filter_function

FromMasami Hiramatsu <mhiramat@kernel.org>
Date2017-05-23 08:20 +0200
Subject[PATCH 6/7] selftests/ftrace: Use top-level available_filter_function
Message-ID<tKbkJ-7J8-3@gated-at.bofh.it>
In reply to#1647657
Use top-level available_filter_function if the test case
is running under an instance.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
---
 .../test.d/ftrace/func_traceonoff_triggers.tc      |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc b/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
index c8e02ec..1b0817b 100644
--- a/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
+++ b/tools/testing/selftests/ftrace/test.d/ftrace/func_traceonoff_triggers.tc
@@ -63,6 +63,10 @@ fi
 
 # powerpc uses .schedule
 func="schedule"
+available_file=available_filter_functions
+if [ -d ../../instances -a -f ../../available_filter_functions ]; then
+   available_file=../../available_filter_functions
+fi
 x=`grep '^\.schedule$' available_filter_functions | wc -l`
 if [ "$x" -eq 1 ]; then
    func=".schedule"

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web