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
-d)
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
$EVENT_NAME $TRACE_PATH/
36 # Only delete if successful
43 function test_kernel_local_snapshot_after_stop
()
45 diag
"Test local kernel snapshots after stop"
46 create_lttng_session_no_output
$SESSION_NAME
47 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
48 lttng_enable_kernel_event
$SESSION_NAME $EVENT_NAME $CHANNEL_NAME
49 start_lttng_tracing_ok
$SESSION_NAME
50 stop_lttng_tracing_ok
$SESSION_NAME
51 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
52 lttng_snapshot_record
$SESSION_NAME
53 destroy_lttng_session_ok
$SESSION_NAME
56 validate_trace
$EVENT_NAME $TRACE_PATH/
58 # Only delete if successful
65 function test_kernel_local_snapshot_append_to_metadata
()
67 local EVENT1
=sched_switch
68 local EVENT2
=sched_process_exit
70 diag
"Test local kernel snapshots with one event $EVENT1"
71 create_lttng_session_no_output
$SESSION_NAME
72 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
73 lttng_enable_kernel_event
$SESSION_NAME $EVENT1 $CHANNEL_NAME
74 start_lttng_tracing_ok
$SESSION_NAME
75 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
77 # first snapshot with only 1 event
78 lttng_snapshot_record
$SESSION_NAME
79 validate_trace
$EVENT_NAME $TRACE_PATH/
81 # Only delete if successful
87 diag
"Adding event $EVENT2"
88 # second snapshot with 2 events
89 lttng_enable_kernel_event
$SESSION_NAME $EVENT2 $CHANNEL_NAME
90 rm -rf $TRACE_PATH/snapshot
/* 2>/dev
/null
91 lttng_snapshot_record
$SESSION_NAME
92 validate_trace
"${EVENT1},${EVENT2}" $TRACE_PATH/
94 # Only delete if successful
100 stop_lttng_tracing_ok
$SESSION_NAME
101 destroy_lttng_session_ok
$SESSION_NAME
104 function true_loop_cpu0
()
106 # Generate many system call events (fill buffers) on CPU 0
107 for a
in $
(seq 1 $1); do
108 taskset
0x00000001 /bin
/true
;
112 function test_kernel_local_snapshot_discard
()
114 diag
"Test local kernel snapshots with small discard buffers"
115 create_lttng_session_no_output
$SESSION_NAME
116 enable_lttng_mmap_discard_small_kernel_channel
$SESSION_NAME \
118 lttng_enable_kernel_syscall_ok
$SESSION_NAME -a $CHANNEL_NAME
119 start_lttng_tracing_ok
$SESSION_NAME
120 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
124 # Take first snapshot, remember first line.
125 lttng_snapshot_record
$SESSION_NAME
126 FIRST_LINE
="$(trace_first_line $TRACE_PATH/)"
127 diag
"First line (1st snapshot): $FIRST_LINE"
133 # Take 2nd snapshot, compare first line. In discard mode, they
134 # should still be the same.
135 lttng_snapshot_record
$SESSION_NAME
136 FIRST_LINE_2
="$(trace_first_line $TRACE_PATH/)"
137 diag
"First line (2nd snapshot): $FIRST_LINE"
140 if [ x
"$FIRST_LINE" != x
"$FIRST_LINE_2" ]; then
141 fail
"First snapshot event do not match"
143 pass
"First snapshot event match"
146 stop_lttng_tracing_ok
$SESSION_NAME
147 destroy_lttng_session_ok
$SESSION_NAME
150 function test_kernel_local_snapshot_overwrite_small_buffers
()
152 diag
"Test local kernel snapshot with small overwrite buffers"
153 create_lttng_session_no_output
$SESSION_NAME
154 enable_lttng_mmap_overwrite_small_kernel_channel
$SESSION_NAME \
156 lttng_enable_kernel_syscall_ok
$SESSION_NAME -a $CHANNEL_NAME
157 start_lttng_tracing_ok
$SESSION_NAME
158 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
162 # Take first snapshot, remember first line.
163 lttng_snapshot_record
$SESSION_NAME
164 FIRST_LINE
="$(trace_first_line $TRACE_PATH/)"
165 diag
"First line (1st snapshot): $FIRST_LINE"
171 # Take 2nd snapshot, compare first line. In overwrite mode, they
173 lttng_snapshot_record
$SESSION_NAME
174 FIRST_LINE_2
="$(trace_first_line $TRACE_PATH/)"
175 diag
"First line (2nd snapshot): $FIRST_LINE_2"
178 if [ x
"$FIRST_LINE" != x
"$FIRST_LINE_2" ]; then
179 pass
"First snapshot event do not match"
181 fail
"First snapshot event match"
184 stop_lttng_tracing_ok
$SESSION_NAME
185 destroy_lttng_session_ok
$SESSION_NAME
188 function test_kernel_1000_local_snapshots
()
192 diag
"Test local kernel snapshots"
193 create_lttng_session_no_output
$SESSION_NAME
194 enable_lttng_mmap_overwrite_kernel_channel
$SESSION_NAME $CHANNEL_NAME
195 lttng_enable_kernel_event
$SESSION_NAME $EVENT_NAME $CHANNEL_NAME
196 start_lttng_tracing_ok
$SESSION_NAME
197 lttng_snapshot_add_output_ok
$SESSION_NAME file://$TRACE_PATH
198 for i
in $
(seq 1 $NB_SNAP); do
199 diag
"Snapshot $i/$NB_SNAP"
200 rm -rf $TRACE_PATH/snapshot
/* 2>/dev
/null
201 lttng_snapshot_record
$SESSION_NAME
203 validate_trace
$EVENT_NAME $TRACE_PATH/
204 if [ $?
-eq 0 ]; then
205 # Only delete if successful
211 stop_lttng_tracing_ok
$SESSION_NAME
212 destroy_lttng_session_ok
$SESSION_NAME
215 plan_tests
$NUM_TESTS
217 print_test_banner
"$TEST_DESC"
219 if [ "$(id -u)" == "0" ]; then
225 skip
$isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS ||
228 validate_lttng_modules_present
232 #tests=( test_kernel_1000_local_snapshots )
233 tests
=( test_kernel_local_snapshot
234 test_kernel_local_snapshot_after_stop
235 test_kernel_local_snapshot_append_to_metadata
236 test_kernel_local_snapshot_discard
237 test_kernel_local_snapshot_overwrite_small_buffers
238 test_kernel_1000_local_snapshots
241 for fct_test
in ${tests[@]};
243 SESSION_NAME
=$
(randstring
16 0)