Commit | Line | Data |
---|---|---|
07b86b52 JD |
1 | #!/bin/bash |
2 | # | |
9d16b343 | 3 | # Copyright (C) 2013 Julien Desfossez <jdesfossez@efficios.com> |
07b86b52 | 4 | # |
9d16b343 MJ |
5 | # SPDX-License-Identifier: LGPL-2.1-only |
6 | ||
07b86b52 JD |
7 | TEST_DESC="Snapshots - Kernel tracing" |
8 | ||
9 | CURDIR=$(dirname $0)/ | |
10 | TESTDIR=$CURDIR/../../.. | |
11 | EVENT_NAME="sched_switch" | |
07b86b52 JD |
12 | SESSION_NAME="" |
13 | CHANNEL_NAME="snapchan" | |
14 | ||
8d5a3312 | 15 | TRACE_PATH=$(mktemp -d -t tmp.test_snapshots_kernel_trace_path.XXXXXX) |
07b86b52 | 16 | |
bd666153 | 17 | NUM_TESTS=2061 |
07b86b52 JD |
18 | |
19 | source $TESTDIR/utils/utils.sh | |
20 | ||
07b86b52 JD |
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 | |
e563bbdb | 27 | start_lttng_tracing_ok $SESSION_NAME |
9f0e230a | 28 | lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH |
07b86b52 | 29 | lttng_snapshot_record $SESSION_NAME |
96340a01 | 30 | stop_lttng_tracing_ok $SESSION_NAME |
67b4c664 | 31 | destroy_lttng_session_ok $SESSION_NAME |
07b86b52 JD |
32 | |
33 | # Validate test | |
bd666153 | 34 | validate_trace_path_kernel_snapshot "$TRACE_PATH" "" "snapshot-1" 0 "" |
78435723 | 35 | validate_trace $EVENT_NAME $TRACE_PATH/ |
07b86b52 JD |
36 | if [ $? -eq 0 ]; then |
37 | # Only delete if successful | |
38 | rm -rf $TRACE_PATH | |
07b86b52 JD |
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 | |
e563bbdb | 48 | start_lttng_tracing_ok $SESSION_NAME |
96340a01 | 49 | stop_lttng_tracing_ok $SESSION_NAME |
9f0e230a | 50 | lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH |
07b86b52 | 51 | lttng_snapshot_record $SESSION_NAME |
67b4c664 | 52 | destroy_lttng_session_ok $SESSION_NAME |
07b86b52 JD |
53 | |
54 | # Validate test | |
78435723 | 55 | validate_trace $EVENT_NAME $TRACE_PATH/ |
07b86b52 JD |
56 | if [ $? -eq 0 ]; then |
57 | # Only delete if successful | |
58 | rm -rf $TRACE_PATH | |
07b86b52 JD |
59 | fi |
60 | } | |
61 | ||
62 | function test_kernel_local_snapshot_append_to_metadata () | |
63 | { | |
78435723 JD |
64 | local EVENT1=sched_switch |
65 | local EVENT2=sched_process_exit | |
07b86b52 JD |
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 | |
e563bbdb | 71 | start_lttng_tracing_ok $SESSION_NAME |
9f0e230a | 72 | lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH |
07b86b52 JD |
73 | |
74 | # first snapshot with only 1 event | |
75 | lttng_snapshot_record $SESSION_NAME | |
78435723 | 76 | validate_trace $EVENT_NAME $TRACE_PATH/ |
07b86b52 JD |
77 | if [ $? -eq 0 ]; then |
78 | # Only delete if successful | |
79 | rm -rf $TRACE_PATH | |
07b86b52 JD |
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 | |
78435723 | 87 | validate_trace "${EVENT1},${EVENT2}" $TRACE_PATH/ |
07b86b52 JD |
88 | if [ $? -eq 0 ]; then |
89 | # Only delete if successful | |
90 | rm -rf $TRACE_PATH | |
07b86b52 JD |
91 | fi |
92 | ||
96340a01 | 93 | stop_lttng_tracing_ok $SESSION_NAME |
67b4c664 | 94 | destroy_lttng_session_ok $SESSION_NAME |
07b86b52 JD |
95 | } |
96 | ||
0cb9c473 | 97 | function generate_filter_events_cpu0() |
086e6add | 98 | { |
2a05e025 OD |
99 | # Generate many events (fill buffers) on a single CPU |
100 | taskset --cpu-list "$(get_any_available_cpu)" /bin/echo -n "$1" > /proc/lttng-test-filter-event 2> /dev/null | |
086e6add MD |
101 | } |
102 | ||
103 | function test_kernel_local_snapshot_discard () | |
104 | { | |
105 | diag "Test local kernel snapshots with small discard buffers" | |
0cb9c473 MD |
106 | |
107 | local event_name="lttng_test_filter_event" | |
108 | ||
109 | modprobe lttng-test | |
086e6add MD |
110 | create_lttng_session_no_output $SESSION_NAME |
111 | enable_lttng_mmap_discard_small_kernel_channel $SESSION_NAME \ | |
112 | $CHANNEL_NAME | |
0cb9c473 | 113 | enable_kernel_lttng_event_ok $SESSION_NAME $event_name $CHANNEL_NAME |
086e6add | 114 | start_lttng_tracing_ok $SESSION_NAME |
9f0e230a | 115 | lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH |
086e6add | 116 | |
0cb9c473 | 117 | generate_filter_events_cpu0 10000 |
086e6add MD |
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 | ||
dcab3877 | 126 | # Fill CPU 0's buffer and overwrite previous contents |
0cb9c473 | 127 | generate_filter_events_cpu0 10000 |
086e6add MD |
128 | |
129 | # Take 2nd snapshot, compare first line. In discard mode, they | |
130 | # should still be the same. | |
131 | lttng_snapshot_record $SESSION_NAME | |
132 | FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)" | |
133 | diag "First line (2nd snapshot): $FIRST_LINE" | |
134 | rm -rf $TRACE_PATH | |
135 | ||
136 | if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then | |
ce83431d | 137 | fail "First snapshot event do not match" |
086e6add | 138 | else |
ce83431d | 139 | pass "First snapshot event match" |
086e6add MD |
140 | fi |
141 | ||
142 | stop_lttng_tracing_ok $SESSION_NAME | |
143 | destroy_lttng_session_ok $SESSION_NAME | |
0cb9c473 | 144 | modprobe --remove lttng-test |
086e6add MD |
145 | } |
146 | ||
147 | function test_kernel_local_snapshot_overwrite_small_buffers () | |
148 | { | |
149 | diag "Test local kernel snapshot with small overwrite buffers" | |
0cb9c473 MD |
150 | |
151 | local event_name="lttng_test_filter_event" | |
152 | ||
153 | modprobe lttng-test | |
086e6add MD |
154 | create_lttng_session_no_output $SESSION_NAME |
155 | enable_lttng_mmap_overwrite_small_kernel_channel $SESSION_NAME \ | |
156 | $CHANNEL_NAME | |
0cb9c473 | 157 | enable_kernel_lttng_event_ok $SESSION_NAME $event_name $CHANNEL_NAME |
086e6add | 158 | start_lttng_tracing_ok $SESSION_NAME |
9f0e230a | 159 | lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH |
086e6add | 160 | |
0cb9c473 | 161 | generate_filter_events_cpu0 10000 |
086e6add MD |
162 | |
163 | # Take first snapshot, remember first line. | |
164 | lttng_snapshot_record $SESSION_NAME | |
165 | FIRST_LINE="$(trace_first_line $TRACE_PATH/)" | |
166 | diag "First line (1st snapshot): $FIRST_LINE" | |
167 | ||
168 | rm -rf $TRACE_PATH | |
169 | ||
dcab3877 | 170 | # Fill CPU 0's buffer and overwrite previous contents |
0cb9c473 | 171 | generate_filter_events_cpu0 10000 |
086e6add MD |
172 | |
173 | # Take 2nd snapshot, compare first line. In overwrite mode, they | |
174 | # WILL be different. | |
175 | lttng_snapshot_record $SESSION_NAME | |
176 | FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)" | |
177 | diag "First line (2nd snapshot): $FIRST_LINE_2" | |
178 | rm -rf $TRACE_PATH | |
179 | ||
180 | if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then | |
ce83431d | 181 | pass "First snapshot event do not match" |
086e6add | 182 | else |
ce83431d | 183 | fail "First snapshot event match" |
086e6add MD |
184 | fi |
185 | ||
186 | stop_lttng_tracing_ok $SESSION_NAME | |
187 | destroy_lttng_session_ok $SESSION_NAME | |
0cb9c473 | 188 | modprobe --remove lttng-test |
086e6add MD |
189 | } |
190 | ||
07b86b52 JD |
191 | function test_kernel_1000_local_snapshots () |
192 | { | |
193 | NB_SNAP=1000 | |
194 | ||
195 | diag "Test local kernel snapshots" | |
196 | create_lttng_session_no_output $SESSION_NAME | |
197 | enable_lttng_mmap_overwrite_kernel_channel $SESSION_NAME $CHANNEL_NAME | |
198 | lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME $CHANNEL_NAME | |
e563bbdb | 199 | start_lttng_tracing_ok $SESSION_NAME |
9f0e230a | 200 | lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH |
07b86b52 JD |
201 | for i in $(seq 1 $NB_SNAP); do |
202 | diag "Snapshot $i/$NB_SNAP" | |
203 | rm -rf $TRACE_PATH/snapshot/* 2>/dev/null | |
204 | lttng_snapshot_record $SESSION_NAME | |
205 | # Validate test | |
78435723 | 206 | validate_trace $EVENT_NAME $TRACE_PATH/ |
07b86b52 JD |
207 | if [ $? -eq 0 ]; then |
208 | # Only delete if successful | |
209 | rm -rf $TRACE_PATH | |
210 | else | |
211 | break | |
212 | fi | |
213 | done | |
96340a01 | 214 | stop_lttng_tracing_ok $SESSION_NAME |
67b4c664 | 215 | destroy_lttng_session_ok $SESSION_NAME |
07b86b52 JD |
216 | } |
217 | ||
218 | plan_tests $NUM_TESTS | |
219 | ||
220 | print_test_banner "$TEST_DESC" | |
221 | ||
c125de8f FD |
222 | bail_out_if_no_babeltrace |
223 | ||
224 | ||
07b86b52 JD |
225 | if [ "$(id -u)" == "0" ]; then |
226 | isroot=1 | |
227 | else | |
228 | isroot=0 | |
229 | fi | |
230 | ||
ce83431d | 231 | skip $isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS || |
07b86b52 | 232 | { |
9c8a3964 JR |
233 | |
234 | validate_lttng_modules_present | |
235 | ||
07b86b52 JD |
236 | start_lttng_sessiond |
237 | ||
238 | #tests=( test_kernel_1000_local_snapshots ) | |
086e6add MD |
239 | tests=( test_kernel_local_snapshot |
240 | test_kernel_local_snapshot_after_stop | |
241 | test_kernel_local_snapshot_append_to_metadata | |
242 | test_kernel_local_snapshot_discard | |
243 | test_kernel_local_snapshot_overwrite_small_buffers | |
244 | test_kernel_1000_local_snapshots | |
245 | ) | |
07b86b52 JD |
246 | |
247 | for fct_test in ${tests[@]}; | |
248 | do | |
249 | SESSION_NAME=$(randstring 16 0) | |
250 | ${fct_test} | |
251 | ||
252 | done | |
253 | ||
254 | stop_lttng_sessiond | |
255 | } |