3 # Copyright (C) 2013 Julien Desfossez <jdesfossez@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 TEST_DESC
="Snapshots - Kernel tracing"
10 TESTDIR
=$CURDIR/..
/..
/..
11 EVENT_NAME
="sched_switch"
13 CHANNEL_NAME
="snapchan"
15 TRACE_PATH
=$
(mktemp
--tmpdir -d tmp.test_snapshots_kernel_trace_path.XXXXXX
)
19 source $TESTDIR/utils
/utils.sh
21 function test_kernel_local_snapshot
()
23 diag
"Test local kernel snapshots"
24 create_lttng_session_no_output
$SESSION_NAME
25 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
26 lttng_enable_kernel_event
$SESSION_NAME $EVENT_NAME $CHANNEL_NAME
27 start_lttng_tracing_ok
$SESSION_NAME
28 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
29 lttng_snapshot_record
$SESSION_NAME
30 stop_lttng_tracing_ok
$SESSION_NAME
31 destroy_lttng_session_ok
$SESSION_NAME
34 validate_trace_path_kernel_snapshot
"$TRACE_PATH" "" "snapshot-1" 0 ""
35 validate_trace
$EVENT_NAME $TRACE_PATH/
37 # Only delete if successful
42 function test_kernel_local_snapshot_after_stop
()
44 diag
"Test local kernel snapshots after stop"
45 create_lttng_session_no_output
$SESSION_NAME
46 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
47 lttng_enable_kernel_event
$SESSION_NAME $EVENT_NAME $CHANNEL_NAME
48 start_lttng_tracing_ok
$SESSION_NAME
49 stop_lttng_tracing_ok
$SESSION_NAME
50 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
51 lttng_snapshot_record
$SESSION_NAME
52 destroy_lttng_session_ok
$SESSION_NAME
55 validate_trace
$EVENT_NAME $TRACE_PATH/
57 # Only delete if successful
64 function test_kernel_local_snapshot_append_to_metadata
()
66 local EVENT1
=sched_switch
67 local EVENT2
=sched_process_exit
69 diag
"Test local kernel snapshots with one event $EVENT1"
70 create_lttng_session_no_output
$SESSION_NAME
71 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
72 lttng_enable_kernel_event
$SESSION_NAME $EVENT1 $CHANNEL_NAME
73 start_lttng_tracing_ok
$SESSION_NAME
74 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
76 # first snapshot with only 1 event
77 lttng_snapshot_record
$SESSION_NAME
78 validate_trace
$EVENT_NAME $TRACE_PATH/
80 # Only delete if successful
86 diag
"Adding event $EVENT2"
87 # second snapshot with 2 events
88 lttng_enable_kernel_event
$SESSION_NAME $EVENT2 $CHANNEL_NAME
89 rm -rf $TRACE_PATH/snapshot
/* 2>/dev
/null
90 lttng_snapshot_record
$SESSION_NAME
91 validate_trace
"${EVENT1},${EVENT2}" $TRACE_PATH/
93 # Only delete if successful
99 stop_lttng_tracing_ok
$SESSION_NAME
100 destroy_lttng_session_ok
$SESSION_NAME
103 function generate_filter_events_cpu0
()
105 # Generate many events (fill buffers) on CPU 0
106 taskset
0x00000001 /bin
/echo -n "$1" > /proc
/lttng-test-filter-event
2> /dev
/null
109 function test_kernel_local_snapshot_discard
()
111 diag
"Test local kernel snapshots with small discard buffers"
113 local event_name
="lttng_test_filter_event"
116 create_lttng_session_no_output
$SESSION_NAME
117 enable_lttng_mmap_discard_small_kernel_channel
$SESSION_NAME \
119 enable_kernel_lttng_event_ok
$SESSION_NAME $event_name $CHANNEL_NAME
120 start_lttng_tracing_ok
$SESSION_NAME
121 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
123 generate_filter_events_cpu0
10000
125 # Take first snapshot, remember first line.
126 lttng_snapshot_record
$SESSION_NAME
127 FIRST_LINE
="$(trace_first_line $TRACE_PATH/)"
128 diag
"First line (1st snapshot): $FIRST_LINE"
132 generate_filter_events_cpu0
10000
134 # Take 2nd snapshot, compare first line. In discard mode, they
135 # should still be the same.
136 lttng_snapshot_record
$SESSION_NAME
137 FIRST_LINE_2
="$(trace_first_line $TRACE_PATH/)"
138 diag
"First line (2nd snapshot): $FIRST_LINE"
141 if [ x
"$FIRST_LINE" != x
"$FIRST_LINE_2" ]; then
142 fail
"First snapshot event do not match"
144 pass
"First snapshot event match"
147 stop_lttng_tracing_ok
$SESSION_NAME
148 destroy_lttng_session_ok
$SESSION_NAME
149 modprobe
--remove lttng-test
152 function test_kernel_local_snapshot_overwrite_small_buffers
()
154 diag
"Test local kernel snapshot with small overwrite buffers"
156 local event_name
="lttng_test_filter_event"
159 create_lttng_session_no_output
$SESSION_NAME
160 enable_lttng_mmap_overwrite_small_kernel_channel
$SESSION_NAME \
162 enable_kernel_lttng_event_ok
$SESSION_NAME $event_name $CHANNEL_NAME
163 start_lttng_tracing_ok
$SESSION_NAME
164 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
166 generate_filter_events_cpu0
10000
168 # Take first snapshot, remember first line.
169 lttng_snapshot_record
$SESSION_NAME
170 FIRST_LINE
="$(trace_first_line $TRACE_PATH/)"
171 diag
"First line (1st snapshot): $FIRST_LINE"
175 generate_filter_events_cpu0
10000
177 # Take 2nd snapshot, compare first line. In overwrite mode, they
179 lttng_snapshot_record
$SESSION_NAME
180 FIRST_LINE_2
="$(trace_first_line $TRACE_PATH/)"
181 diag
"First line (2nd snapshot): $FIRST_LINE_2"
184 if [ x
"$FIRST_LINE" != x
"$FIRST_LINE_2" ]; then
185 pass
"First snapshot event do not match"
187 fail
"First snapshot event match"
190 stop_lttng_tracing_ok
$SESSION_NAME
191 destroy_lttng_session_ok
$SESSION_NAME
192 modprobe
--remove lttng-test
195 function test_kernel_1000_local_snapshots
()
199 diag
"Test local kernel snapshots"
200 create_lttng_session_no_output
$SESSION_NAME
201 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
202 lttng_enable_kernel_event
$SESSION_NAME $EVENT_NAME $CHANNEL_NAME
203 start_lttng_tracing_ok
$SESSION_NAME
204 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
205 for i
in $
(seq 1 $NB_SNAP); do
206 diag
"Snapshot $i/$NB_SNAP"
207 rm -rf $TRACE_PATH/snapshot
/* 2>/dev
/null
208 lttng_snapshot_record
$SESSION_NAME
210 validate_trace
$EVENT_NAME $TRACE_PATH/
211 if [ $?
-eq 0 ]; then
212 # Only delete if successful
218 stop_lttng_tracing_ok
$SESSION_NAME
219 destroy_lttng_session_ok
$SESSION_NAME
222 plan_tests
$NUM_TESTS
224 print_test_banner
"$TEST_DESC"
226 if [ "$(id -u)" == "0" ]; then
232 skip
$isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS ||
235 validate_lttng_modules_present
239 #tests=( test_kernel_1000_local_snapshots )
240 tests
=( test_kernel_local_snapshot
241 test_kernel_local_snapshot_after_stop
242 test_kernel_local_snapshot_append_to_metadata
243 test_kernel_local_snapshot_discard
244 test_kernel_local_snapshot_overwrite_small_buffers
245 test_kernel_1000_local_snapshots
248 for fct_test
in ${tests[@]};
250 SESSION_NAME
=$
(randstring
16 0)