rcutorture: Copy out ftrace into its own console file

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>
This commit is contained in:
Joel Fernandes (Google) 2023-08-15 19:09:49 +00:00 committed by Frederic Weisbecker
parent e3bdaefbcc
commit fcc7a329a7
2 changed files with 36 additions and 0 deletions

29
tools/testing/selftests/rcutorture/bin/functions.sh Normal file → Executable file
View File

@ -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'
}

View File

@ -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