5c93296a03a2f8b7a440f1bd9aeacba6c1c8377f
[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 fi
60 }
61
62 function test_kernel_local_snapshot_append_to_metadata ()
63 {
64 local EVENT1=sched_switch
65 local EVENT2=sched_process_exit
66
67 diag "Test local kernel snapshots with one event $EVENT1"
68 create_lttng_session_no_output $SESSION_NAME
69 enable_lttng_mmap_overwrite_kernel_channel $SESSION_NAME $CHANNEL_NAME
70 lttng_enable_kernel_event $SESSION_NAME $EVENT1 $CHANNEL_NAME
71 start_lttng_tracing_ok $SESSION_NAME
72 lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
73
74 # first snapshot with only 1 event
75 lttng_snapshot_record $SESSION_NAME
76 validate_trace $EVENT_NAME $TRACE_PATH/
77 if [ $? -eq 0 ]; then
78 # Only delete if successful
79 rm -rf $TRACE_PATH
80 fi
81
82 diag "Adding event $EVENT2"
83 # second snapshot with 2 events
84 lttng_enable_kernel_event $SESSION_NAME $EVENT2 $CHANNEL_NAME
85 rm -rf $TRACE_PATH/snapshot/* 2>/dev/null
86 lttng_snapshot_record $SESSION_NAME
87 validate_trace "${EVENT1},${EVENT2}" $TRACE_PATH/
88 if [ $? -eq 0 ]; then
89 # Only delete if successful
90 rm -rf $TRACE_PATH
91 fi
92
93 stop_lttng_tracing_ok $SESSION_NAME
94 destroy_lttng_session_ok $SESSION_NAME
95 }
96
97 function generate_filter_events_cpu0()
98 {
99 # Generate many events (fill buffers) on CPU 0
100 taskset 0x00000001 /bin/echo -n "$1" > /proc/lttng-test-filter-event 2> /dev/null
101 }
102
103 function test_kernel_local_snapshot_discard ()
104 {
105 diag "Test local kernel snapshots with small discard buffers"
106
107 local event_name="lttng_test_filter_event"
108
109 modprobe lttng-test
110 create_lttng_session_no_output $SESSION_NAME
111 enable_lttng_mmap_discard_small_kernel_channel $SESSION_NAME \
112 $CHANNEL_NAME
113 enable_kernel_lttng_event_ok $SESSION_NAME $event_name $CHANNEL_NAME
114 start_lttng_tracing_ok $SESSION_NAME
115 lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
116
117 generate_filter_events_cpu0 10000
118
119 # Take first snapshot, remember first line.
120 lttng_snapshot_record $SESSION_NAME
121 FIRST_LINE="$(trace_first_line $TRACE_PATH/)"
122 diag "First line (1st snapshot): $FIRST_LINE"
123
124 rm -rf $TRACE_PATH
125
126 generate_filter_events_cpu0 10000
127
128 # Take 2nd snapshot, compare first line. In discard mode, they
129 # should still be the same.
130 lttng_snapshot_record $SESSION_NAME
131 FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)"
132 diag "First line (2nd snapshot): $FIRST_LINE"
133 rm -rf $TRACE_PATH
134
135 if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
136 fail "First snapshot event do not match"
137 else
138 pass "First snapshot event match"
139 fi
140
141 stop_lttng_tracing_ok $SESSION_NAME
142 destroy_lttng_session_ok $SESSION_NAME
143 modprobe --remove lttng-test
144 }
145
146 function test_kernel_local_snapshot_overwrite_small_buffers ()
147 {
148 diag "Test local kernel snapshot with small overwrite buffers"
149
150 local event_name="lttng_test_filter_event"
151
152 modprobe lttng-test
153 create_lttng_session_no_output $SESSION_NAME
154 enable_lttng_mmap_overwrite_small_kernel_channel $SESSION_NAME \
155 $CHANNEL_NAME
156 enable_kernel_lttng_event_ok $SESSION_NAME $event_name $CHANNEL_NAME
157 start_lttng_tracing_ok $SESSION_NAME
158 lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
159
160 generate_filter_events_cpu0 10000
161
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"
166
167 rm -rf $TRACE_PATH
168
169 generate_filter_events_cpu0 10000
170
171 # Take 2nd snapshot, compare first line. In overwrite mode, they
172 # WILL be different.
173 lttng_snapshot_record $SESSION_NAME
174 FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)"
175 diag "First line (2nd snapshot): $FIRST_LINE_2"
176 rm -rf $TRACE_PATH
177
178 if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
179 pass "First snapshot event do not match"
180 else
181 fail "First snapshot event match"
182 fi
183
184 stop_lttng_tracing_ok $SESSION_NAME
185 destroy_lttng_session_ok $SESSION_NAME
186 modprobe --remove lttng-test
187 }
188
189 function test_kernel_1000_local_snapshots ()
190 {
191 NB_SNAP=1000
192
193 diag "Test local kernel snapshots"
194 create_lttng_session_no_output $SESSION_NAME
195 enable_lttng_mmap_overwrite_kernel_channel $SESSION_NAME $CHANNEL_NAME
196 lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
197 start_lttng_tracing_ok $SESSION_NAME
198 lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
199 for i in $(seq 1 $NB_SNAP); do
200 diag "Snapshot $i/$NB_SNAP"
201 rm -rf $TRACE_PATH/snapshot/* 2>/dev/null
202 lttng_snapshot_record $SESSION_NAME
203 # Validate test
204 validate_trace $EVENT_NAME $TRACE_PATH/
205 if [ $? -eq 0 ]; then
206 # Only delete if successful
207 rm -rf $TRACE_PATH
208 else
209 break
210 fi
211 done
212 stop_lttng_tracing_ok $SESSION_NAME
213 destroy_lttng_session_ok $SESSION_NAME
214 }
215
216 plan_tests $NUM_TESTS
217
218 print_test_banner "$TEST_DESC"
219
220 if [ "$(id -u)" == "0" ]; then
221 isroot=1
222 else
223 isroot=0
224 fi
225
226 skip $isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS ||
227 {
228
229 validate_lttng_modules_present
230
231 start_lttng_sessiond
232
233 #tests=( test_kernel_1000_local_snapshots )
234 tests=( test_kernel_local_snapshot
235 test_kernel_local_snapshot_after_stop
236 test_kernel_local_snapshot_append_to_metadata
237 test_kernel_local_snapshot_discard
238 test_kernel_local_snapshot_overwrite_small_buffers
239 test_kernel_1000_local_snapshots
240 )
241
242 for fct_test in ${tests[@]};
243 do
244 SESSION_NAME=$(randstring 16 0)
245 ${fct_test}
246
247 done
248
249 stop_lttng_sessiond
250 }
This page took 0.040843 seconds and 3 git commands to generate.