d77ed220adb6cd289557b98d9f7916168b637336
[lttng-tools.git] / tests / regression / tools / snapshots / test_kernel
1 #!/bin/bash
2 #
3 # Copyright (C) 2013 Julien Desfossez <jdesfossez@efficios.com>
4 #
5 # SPDX-License-Identifier: LGPL-2.1-only
6
7 TEST_DESC="Snapshots - Kernel tracing"
8
9 CURDIR=$(dirname $0)/
10 TESTDIR=$CURDIR/../../..
11 EVENT_NAME="sched_switch"
12 SESSION_NAME=""
13 CHANNEL_NAME="snapchan"
14
15 TRACE_PATH=$(mktemp --tmpdir -d tmp.test_snapshots_kernel_trace_path.XXXXXX)
16
17 NUM_TESTS=2061
18
19 source $TESTDIR/utils/utils.sh
20
21 function test_kernel_local_snapshot ()
22 {
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
32
33 # Validate test
34 validate_trace_path_kernel_snapshot "$TRACE_PATH" "" "snapshot-1" 0 ""
35 validate_trace $EVENT_NAME $TRACE_PATH/
36 if [ $? -eq 0 ]; then
37 # Only delete if successful
38 rm -rf $TRACE_PATH
39 fi
40 }
41
42 function test_kernel_local_snapshot_after_stop ()
43 {
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
53
54 # Validate test
55 validate_trace $EVENT_NAME $TRACE_PATH/
56 if [ $? -eq 0 ]; then
57 # Only delete if successful
58 rm -rf $TRACE_PATH
59 else
60 break
61 fi
62 }
63
64 function test_kernel_local_snapshot_append_to_metadata ()
65 {
66 local EVENT1=sched_switch
67 local EVENT2=sched_process_exit
68
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
75
76 # first snapshot with only 1 event
77 lttng_snapshot_record $SESSION_NAME
78 validate_trace $EVENT_NAME $TRACE_PATH/
79 if [ $? -eq 0 ]; then
80 # Only delete if successful
81 rm -rf $TRACE_PATH
82 else
83 break
84 fi
85
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/
92 if [ $? -eq 0 ]; then
93 # Only delete if successful
94 rm -rf $TRACE_PATH
95 else
96 break
97 fi
98
99 stop_lttng_tracing_ok $SESSION_NAME
100 destroy_lttng_session_ok $SESSION_NAME
101 }
102
103 function generate_filter_events_cpu0()
104 {
105 # Generate many events (fill buffers) on CPU 0
106 taskset 0x00000001 /bin/echo -n "$1" > /proc/lttng-test-filter-event 2> /dev/null
107 }
108
109 function test_kernel_local_snapshot_discard ()
110 {
111 diag "Test local kernel snapshots with small discard buffers"
112
113 local event_name="lttng_test_filter_event"
114
115 modprobe lttng-test
116 create_lttng_session_no_output $SESSION_NAME
117 enable_lttng_mmap_discard_small_kernel_channel $SESSION_NAME \
118 $CHANNEL_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
122
123 generate_filter_events_cpu0 10000
124
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"
129
130 rm -rf $TRACE_PATH
131
132 generate_filter_events_cpu0 10000
133
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"
139 rm -rf $TRACE_PATH
140
141 if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
142 fail "First snapshot event do not match"
143 else
144 pass "First snapshot event match"
145 fi
146
147 stop_lttng_tracing_ok $SESSION_NAME
148 destroy_lttng_session_ok $SESSION_NAME
149 modprobe --remove lttng-test
150 }
151
152 function test_kernel_local_snapshot_overwrite_small_buffers ()
153 {
154 diag "Test local kernel snapshot with small overwrite buffers"
155
156 local event_name="lttng_test_filter_event"
157
158 modprobe lttng-test
159 create_lttng_session_no_output $SESSION_NAME
160 enable_lttng_mmap_overwrite_small_kernel_channel $SESSION_NAME \
161 $CHANNEL_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
165
166 generate_filter_events_cpu0 10000
167
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"
172
173 rm -rf $TRACE_PATH
174
175 generate_filter_events_cpu0 10000
176
177 # Take 2nd snapshot, compare first line. In overwrite mode, they
178 # WILL be different.
179 lttng_snapshot_record $SESSION_NAME
180 FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)"
181 diag "First line (2nd snapshot): $FIRST_LINE_2"
182 rm -rf $TRACE_PATH
183
184 if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
185 pass "First snapshot event do not match"
186 else
187 fail "First snapshot event match"
188 fi
189
190 stop_lttng_tracing_ok $SESSION_NAME
191 destroy_lttng_session_ok $SESSION_NAME
192 modprobe --remove lttng-test
193 }
194
195 function test_kernel_1000_local_snapshots ()
196 {
197 NB_SNAP=1000
198
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
209 # Validate test
210 validate_trace $EVENT_NAME $TRACE_PATH/
211 if [ $? -eq 0 ]; then
212 # Only delete if successful
213 rm -rf $TRACE_PATH
214 else
215 break
216 fi
217 done
218 stop_lttng_tracing_ok $SESSION_NAME
219 destroy_lttng_session_ok $SESSION_NAME
220 }
221
222 plan_tests $NUM_TESTS
223
224 print_test_banner "$TEST_DESC"
225
226 bail_out_if_no_babeltrace
227
228
229 if [ "$(id -u)" == "0" ]; then
230 isroot=1
231 else
232 isroot=0
233 fi
234
235 skip $isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS ||
236 {
237
238 validate_lttng_modules_present
239
240 start_lttng_sessiond
241
242 #tests=( test_kernel_1000_local_snapshots )
243 tests=( test_kernel_local_snapshot
244 test_kernel_local_snapshot_after_stop
245 test_kernel_local_snapshot_append_to_metadata
246 test_kernel_local_snapshot_discard
247 test_kernel_local_snapshot_overwrite_small_buffers
248 test_kernel_1000_local_snapshots
249 )
250
251 for fct_test in ${tests[@]};
252 do
253 SESSION_NAME=$(randstring 16 0)
254 ${fct_test}
255
256 done
257
258 stop_lttng_sessiond
259 }
This page took 0.035447 seconds and 3 git commands to generate.