Merge tag 'trace-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt: "New tracing features: - The ring buffer is no longer disabled when reading the trace file. The trace_pipe file was made to be used for live tracing and reading as it acted like the normal producer/consumer. As the trace file would not consume the data, the easy way of handling it was to just disable writes to the ring buffer. This came to a surprise to the BPF folks who complained about lost events due to reading. This is no longer an issue. If someone wants to keep the old disabling there's a new option "pause-on-trace" that can be set. - New set_ftrace_notrace_pid file. PIDs in this file will not be traced by the function tracer. Similar to set_ftrace_pid, which makes the function tracer only trace those tasks with PIDs in the file, the set_ftrace_notrace_pid does the reverse. - New set_event_notrace_pid file. PIDs in this file will cause events not to be traced if triggered by a task with a matching PID. Similar to the set_event_pid file but will not be traced. Note, sched_waking and sched_switch events may still be traced if one of the tasks referenced by those events contains a PID that is allowed to be traced. Tracing related features: - New bootconfig option, that is attached to the initrd file. If bootconfig is on the command line, then the initrd file is searched looking for a bootconfig appended at the end. - New GPU tracepoint infrastructure to help the gfx drivers to get off debugfs (acked by Greg Kroah-Hartman) And other minor updates and fixes" * tag 'trace-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (27 commits) tracing: Do not allocate buffer in trace_find_next_entry() in atomic tracing: Add documentation on set_ftrace_notrace_pid and set_event_notrace_pid selftests/ftrace: Add test to test new set_event_notrace_pid file selftests/ftrace: Add test to test new set_ftrace_notrace_pid file tracing: Create set_event_notrace_pid to not trace tasks ftrace: Create set_ftrace_notrace_pid to not trace tasks ftrace: Make function trace pid filtering a bit more exact ftrace/kprobe: Show the maxactive number on kprobe_events tracing: Have the document reflect that the trace file keeps tracing enabled ring-buffer/tracing: Have iterator acknowledge dropped events tracing: Do not disable tracing when reading the trace file ring-buffer: Do not disable recording when there is an iterator ring-buffer: Make resize disable per cpu buffer instead of total buffer ring-buffer: Optimize rb_iter_head_event() ring-buffer: Do not die if rb_iter_peek() fails more than thrice ring-buffer: Have rb_iter_head_event() handle concurrent writer ring-buffer: Add page_stamp to iterator for synchronization ring-buffer: Rename ring_buffer_read() to read_buffer_iter_advance() ring-buffer: Have ring_buffer_empty() not depend on tracing stopped tracing: Save off entry when peeking at next entry ...
This commit is contained in:
125
tools/testing/selftests/ftrace/test.d/event/event-no-pid.tc
Normal file
125
tools/testing/selftests/ftrace/test.d/event/event-no-pid.tc
Normal file
@@ -0,0 +1,125 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: event tracing - restricts events based on pid notrace filtering
|
||||
# flags: instance
|
||||
|
||||
do_reset() {
|
||||
echo > set_event
|
||||
echo > set_event_pid
|
||||
echo > set_event_notrace_pid
|
||||
echo 0 > options/event-fork
|
||||
echo 0 > events/enable
|
||||
clear_trace
|
||||
echo 1 > tracing_on
|
||||
}
|
||||
|
||||
fail() { #msg
|
||||
cat trace
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
count_pid() {
|
||||
pid=$@
|
||||
cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep $pid | wc -l
|
||||
}
|
||||
|
||||
count_no_pid() {
|
||||
pid=$1
|
||||
cat trace | grep -v '^#' | sed -e 's/[^-]*-\([0-9]*\).*/\1/' | grep -v $pid | wc -l
|
||||
}
|
||||
|
||||
enable_system() {
|
||||
system=$1
|
||||
|
||||
if [ -d events/$system ]; then
|
||||
echo 1 > events/$system/enable
|
||||
fi
|
||||
}
|
||||
|
||||
enable_events() {
|
||||
echo 0 > tracing_on
|
||||
# Enable common groups of events, as all events can allow for
|
||||
# events to be traced via scheduling that we don't care to test.
|
||||
enable_system syscalls
|
||||
enable_system rcu
|
||||
enable_system block
|
||||
enable_system exceptions
|
||||
enable_system irq
|
||||
enable_system net
|
||||
enable_system power
|
||||
enable_system signal
|
||||
enable_system sock
|
||||
enable_system timer
|
||||
enable_system thermal
|
||||
echo 1 > tracing_on
|
||||
}
|
||||
|
||||
if [ ! -f set_event -o ! -d events/sched ]; then
|
||||
echo "event tracing is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f set_event_pid -o ! -f set_event_notrace_pid ]; then
|
||||
echo "event pid notrace filtering is not supported"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
echo 0 > options/event-fork
|
||||
|
||||
do_reset
|
||||
|
||||
read mypid rest < /proc/self/stat
|
||||
|
||||
echo $mypid > set_event_notrace_pid
|
||||
grep -q $mypid set_event_notrace_pid
|
||||
|
||||
enable_events
|
||||
|
||||
yield
|
||||
|
||||
echo 0 > tracing_on
|
||||
|
||||
cnt=`count_pid $mypid`
|
||||
if [ $cnt -ne 0 ]; then
|
||||
fail "Filtered out task has events"
|
||||
fi
|
||||
|
||||
cnt=`count_no_pid $mypid`
|
||||
if [ $cnt -eq 0 ]; then
|
||||
fail "No other events were recorded"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
echo $mypid > set_event_notrace_pid
|
||||
echo 1 > options/event-fork
|
||||
|
||||
enable_events
|
||||
|
||||
yield &
|
||||
child=$!
|
||||
echo "child = $child"
|
||||
wait $child
|
||||
|
||||
echo 0 > tracing_on
|
||||
|
||||
cnt=`count_pid $mypid`
|
||||
if [ $cnt -ne 0 ]; then
|
||||
fail "Filtered out task has events"
|
||||
fi
|
||||
|
||||
cnt=`count_pid $child`
|
||||
if [ $cnt -ne 0 ]; then
|
||||
fail "Child of filtered out taskhas events"
|
||||
fi
|
||||
|
||||
cnt=`count_no_pid $mypid`
|
||||
if [ $cnt -eq 0 ]; then
|
||||
fail "No other events were recorded"
|
||||
fi
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
@@ -0,0 +1,108 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
# description: ftrace - function pid notrace filters
|
||||
# flags: instance
|
||||
|
||||
# Make sure that function pid matching filter with notrace works.
|
||||
|
||||
if ! grep -q function available_tracers; then
|
||||
echo "no function tracer configured"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f set_ftrace_notrace_pid ]; then
|
||||
echo "set_ftrace_notrace_pid not found? Is function tracer not set?"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
if [ ! -f set_ftrace_filter ]; then
|
||||
echo "set_ftrace_filter not found? Is function tracer not set?"
|
||||
exit_unsupported
|
||||
fi
|
||||
|
||||
do_function_fork=1
|
||||
|
||||
if [ ! -f options/function-fork ]; then
|
||||
do_function_fork=0
|
||||
echo "no option for function-fork found. Option will not be tested."
|
||||
fi
|
||||
|
||||
read PID _ < /proc/self/stat
|
||||
|
||||
if [ $do_function_fork -eq 1 ]; then
|
||||
# default value of function-fork option
|
||||
orig_value=`grep function-fork trace_options`
|
||||
fi
|
||||
|
||||
do_reset() {
|
||||
if [ $do_function_fork -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo > set_ftrace_notrace_pid
|
||||
echo $orig_value > trace_options
|
||||
}
|
||||
|
||||
fail() { # msg
|
||||
do_reset
|
||||
echo $1
|
||||
exit_fail
|
||||
}
|
||||
|
||||
do_test() {
|
||||
disable_tracing
|
||||
|
||||
echo do_execve* > set_ftrace_filter
|
||||
echo *do_fork >> set_ftrace_filter
|
||||
|
||||
echo $PID > set_ftrace_notrace_pid
|
||||
echo function > current_tracer
|
||||
|
||||
if [ $do_function_fork -eq 1 ]; then
|
||||
# don't allow children to be traced
|
||||
echo nofunction-fork > trace_options
|
||||
fi
|
||||
|
||||
enable_tracing
|
||||
yield
|
||||
|
||||
count_pid=`cat trace | grep -v ^# | grep $PID | wc -l`
|
||||
count_other=`cat trace | grep -v ^# | grep -v $PID | wc -l`
|
||||
|
||||
# count_pid should be 0
|
||||
if [ $count_pid -ne 0 -o $count_other -eq 0 ]; then
|
||||
fail "PID filtering not working? traced task = $count_pid; other tasks = $count_other "
|
||||
fi
|
||||
|
||||
disable_tracing
|
||||
clear_trace
|
||||
|
||||
if [ $do_function_fork -eq 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# allow children to be traced
|
||||
echo function-fork > trace_options
|
||||
|
||||
# With pid in both set_ftrace_pid and set_ftrace_notrace_pid
|
||||
# there should not be any tasks traced.
|
||||
|
||||
echo $PID > set_ftrace_pid
|
||||
|
||||
enable_tracing
|
||||
yield
|
||||
|
||||
count_pid=`cat trace | grep -v ^# | grep $PID | wc -l`
|
||||
count_other=`cat trace | grep -v ^# | grep -v $PID | wc -l`
|
||||
|
||||
# both should be zero
|
||||
if [ $count_pid -ne 0 -o $count_other -ne 0 ]; then
|
||||
fail "PID filtering not following fork? traced task = $count_pid; other tasks = $count_other "
|
||||
fi
|
||||
}
|
||||
|
||||
do_test
|
||||
|
||||
do_reset
|
||||
|
||||
exit 0
|
@@ -41,7 +41,7 @@ fi
|
||||
|
||||
echo '** ENABLE EVENTS'
|
||||
|
||||
echo 1 > events/enable
|
||||
echo 1 > events/sched/enable
|
||||
|
||||
echo '** ENABLE TRACING'
|
||||
enable_tracing
|
||||
|
Reference in New Issue
Block a user