rcutorture: Copy out ftrace into its own console file
authorJoel Fernandes (Google) <joel@joelfernandes.org>
Tue, 15 Aug 2023 19:09:49 +0000 (19:09 +0000)
committerFrederic Weisbecker <frederic@kernel.org>
Sun, 24 Sep 2023 15:24:01 +0000 (17:24 +0200)
When debugging, it can be difficult to quickly find the ftrace dump
within the console log, which in turn makes it difficult to process it
independent of the rest of the console output.  This commit therefore
copies the contents of the buffers into its own file to make it easier
to locate and process the ftrace dump. The original ftrace dump is still
available in the console log in cases because it can be more convenient
to process it in situ, for example, for scripts that process console
output as well as ftrace-dump data.

Also handle the case of multiple ftrace dumps potentially showing up in the
log. Example for a file like [1], it will extract as [2].

[1]:
foo
foo
Dumping ftrace buffer:
---------------------------------
blah
blah
---------------------------------
more
bar
baz
Dumping ftrace buffer:
---------------------------------
blah2
blah2
---------------------------------
bleh
bleh

[2]:

Ftrace dump 1:
blah
blah

Ftrace dump 2:
blah2
blah2

[ paulmck: Fixed awk indentation, input up front. ]

Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
tools/testing/selftests/rcutorture/bin/functions.sh [changed mode: 0644->0755]
tools/testing/selftests/rcutorture/bin/parse-console.sh

old mode 100644 (file)
new mode 100755 (executable)
index b8e2ea2..6e415dd
@@ -331,3 +331,32 @@ specify_qemu_net () {
                echo $1 -net none
        fi
 }
+
+# Extract the ftrace output from the console log output
+# The ftrace output in the original logs look like:
+# Dumping ftrace buffer:
+# ---------------------------------
+# [...]
+# ---------------------------------
+extract_ftrace_from_console() {
+       awk < "$1" '
+
+       /Dumping ftrace buffer:/ {
+               buffer_count++
+               print "Ftrace dump " buffer_count ":"
+               capture = 1
+               next
+       }
+
+       /---------------------------------/ {
+               if(capture == 1) {
+                       capture = 2
+                       next
+               } else if(capture == 2) {
+                       capture = 0
+                       print ""
+               }
+       }
+
+       capture == 2'
+}
index 9ab0f6b..e3d2f69 100755 (executable)
@@ -182,3 +182,10 @@ if ! test -s $file.diags
 then
        rm -f $file.diags
 fi
+
+# Call extract_ftrace_from_console function, if the output is empty,
+# don't create $file.ftrace. Otherwise output the results to $file.ftrace
+extract_ftrace_from_console $file > $file.ftrace
+if [ ! -s $file.ftrace ]; then
+       rm -f $file.ftrace
+fi