Skip to content

Commit 7ae4ba7

Browse files
committed
ftrace/scripts: Update the instructions for ftrace-bisect.sh
The instructions for the ftrace-bisect.sh script, which is used to find what function is being traced that is causing a kernel crash, and possibly a triple fault reboot, uses the old method. In 5.1, a new feature was added that let the user write in the index into available_filter_functions that maps to the function a user wants to set in set_ftrace_filter (or set_ftrace_notrace). This takes O(1) to set, as suppose to writing a function name, which takes O(n) (where n is the number of functions in available_filter_functions). The ftrace-bisect.sh requires setting half of the functions in available_filter_functions, which is O(n^2) using the name method to enable and can take several minutes to complete. The number method is O(n) which takes less than a second to complete. Using the number method for any kernel 5.1 and after is the proper way to do the bisect. Update the usage to reflect the new change, as well as using the /sys/kernel/tracing path instead of the obsolete debugfs path. Link: https://lkml.kernel.org/r/[email protected] Cc: [email protected] Cc: Masami Hiramatsu <[email protected]> Acked-by: Mark Rutland <[email protected]> Fixes: f79b3f3 ("ftrace: Allow enabling of filters via index of available_filter_functions") Signed-off-by: Steven Rostedt (Google) <[email protected]>
1 parent 3bb06eb commit 7ae4ba7

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

scripts/tracing/ftrace-bisect.sh

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,48 @@
1212
# (note, if this is a problem with function_graph tracing, then simply
1313
# replace "function" with "function_graph" in the following steps).
1414
#
15-
# # cd /sys/kernel/debug/tracing
15+
# # cd /sys/kernel/tracing
1616
# # echo schedule > set_ftrace_filter
1717
# # echo function > current_tracer
1818
#
1919
# If this works, then we know that something is being traced that shouldn't be.
2020
#
2121
# # echo nop > current_tracer
2222
#
23-
# # cat available_filter_functions > ~/full-file
23+
# Starting with v5.1 this can be done with numbers, making it much faster:
24+
#
25+
# The old (slow) way, for kernels before v5.1.
26+
#
27+
# [old-way] # cat available_filter_functions > ~/full-file
28+
#
29+
# [old-way] *** Note *** this process will take several minutes to update the
30+
# [old-way] filters. Setting multiple functions is an O(n^2) operation, and we
31+
# [old-way] are dealing with thousands of functions. So go have coffee, talk
32+
# [old-way] with your coworkers, read facebook. And eventually, this operation
33+
# [old-way] will end.
34+
#
35+
# The new way (using numbers) is an O(n) operation, and usually takes less than a second.
36+
#
37+
# seq `wc -l available_filter_functions | cut -d' ' -f1` > ~/full-file
38+
#
39+
# This will create a sequence of numbers that match the functions in
40+
# available_filter_functions, and when echoing in a number into the
41+
# set_ftrace_filter file, it will enable the corresponding function in
42+
# O(1) time. Making enabling all functions O(n) where n is the number of
43+
# functions to enable.
44+
#
45+
# For either the new or old way, the rest of the operations remain the same.
46+
#
2447
# # ftrace-bisect ~/full-file ~/test-file ~/non-test-file
2548
# # cat ~/test-file > set_ftrace_filter
2649
#
27-
# *** Note *** this will take several minutes. Setting multiple functions is
28-
# an O(n^2) operation, and we are dealing with thousands of functions. So go
29-
# have coffee, talk with your coworkers, read facebook. And eventually, this
30-
# operation will end.
31-
#
3250
# # echo function > current_tracer
3351
#
3452
# If it crashes, we know that ~/test-file has a bad function.
3553
#
3654
# Reboot back to test kernel.
3755
#
38-
# # cd /sys/kernel/debug/tracing
56+
# # cd /sys/kernel/tracing
3957
# # mv ~/test-file ~/full-file
4058
#
4159
# If it didn't crash.

0 commit comments

Comments
 (0)