tests: test ust snapshot with discard buffers
[lttng-tools.git] / tests / regression / tools / snapshots / ust_test
CommitLineData
ebaaaf5e
JD
1#!/bin/bash
2#
3# Copyright (C) - 2013 Julien Desfossez <jdesfossez@efficios.com>
4#
5# This library is free software; you can redistribute it and/or modify it under
6# the terms of the GNU Lesser General Public License as published by the Free
7# Software Foundation; version 2.1 of the License.
8#
9# This library is distributed in the hope that it will be useful, but WITHOUT
10# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12# details.
13#
14# You should have received a copy of the GNU Lesser General Public License
15# along with this library; if not, write to the Free Software Foundation, Inc.,
16# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17TEST_DESC="Snapshots - UST tracing"
18
19CURDIR=$(dirname $0)/
20TESTDIR=$CURDIR/../../..
21EVENT_NAME="tp:tptest"
ebaaaf5e
JD
22PID_RELAYD=0
23SESSION_NAME=""
24CHANNEL_NAME="snapchan"
25TESTAPP_PATH="$TESTDIR/utils/testapp"
26TESTAPP_NAME="gen-ust-events"
27TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
0fc2834c 28APPS_PID=
ebaaaf5e 29
ae779dd6 30NUM_TESTS=100
ebaaaf5e 31
1d20c959 32TRACE_PATH=$(mktemp -d)
ebaaaf5e
JD
33
34source $TESTDIR/utils/utils.sh
35
36if [ ! -x "$TESTAPP_BIN" ]; then
37 BAIL_OUT "No UST events binary detected."
38fi
39
1d20c959
DG
40# Need the number of snapshot to do.
41if [ -z $1 ]; then
42 BAIL_OUT "A number of snapshot is needed."
43fi
44NR_SNAPSHOT=$1
45
46NUM_TESTS=$(($NUM_TESTS + ($NR_SNAPSHOT * 2)))
47
209b934f
DG
48function start_test_app()
49{
5fcaccbc 50 local tmp_file=$(mktemp -u)
209b934f
DG
51
52 # Start application with a temporary file.
53 $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT $tmp_file &
0fc2834c
MD
54 ret=$?
55 APPS_PID="${APPS_PID} ${!}"
56 ok $ret "Start application to trace"
209b934f
DG
57
58 # Wait for the application file to appear indicating that at least one
59 # tracepoint has been fired.
60 while [ ! -f "$tmp_file" ]; do
61 sleep 0.5
62 done
63 diag "Removing test app temporary file $tmp_file"
64 rm -f $tmp_file
65}
66
ae779dd6
MD
67function wait_test_apps()
68{
69 diag "Waiting for $TESTAPP_NAME"
70 for p in ${APPS_PID}; do
71 wait ${p} 2>/dev/null
72 done
73}
74
0fc2834c 75function stop_test_apps()
209b934f 76{
0fc2834c
MD
77 diag "Stopping $TESTAPP_NAME"
78 for p in ${APPS_PID}; do
79 kill ${p}
5402fe87 80 wait ${p} 2>/dev/null
0fc2834c 81 done
c7613334 82 APPS_PID=
209b934f
DG
83}
84
5e83c405
CB
85function snapshot_add_output ()
86{
87 local sess_name=$1
88 local trace_path=$2
89 local name=$3
90 local max_size=$4
91 local extra_opt=""
92
93 if [ ! -z $name ]; then
94 extra_opt+=" -n $name "
95 fi
96
97 if [ ! -z $max_size ]; then
98 extra_opt+=" -m $max_size "
99 fi
100
101 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot add-output \
102 -s $sess_name $extra_opt $trace_path > /dev/null 2>&1
103
104 ok $? "Added snapshot output $trace_path ($extra_opt)"
105}
106
107function snapshot_del_output ()
108{
109 local sess_name=$1
110 local name=$2
111
112 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot del-output \
113 -s $sess_name $name > /dev/null 2>&1
114
115 ok $? "Deleted snapshot output named $name"
116}
117
118function enable_mmap_overwrite_subbuf_ust_channel ()
119{
120 local sess_name=$1
121 local chan_name=$2
122 local subbuf_size=$3
123
124 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name \
125 $chan_name -u --output mmap --overwrite \
126 --subbuf-size $subbuf_size > /dev/null 2>&1
127
128 ok $? "Enable channel $channel_name for session $sess_name with subbuf size $subbuf_size"
129}
130
ae779dd6
MD
131function enable_mmap_small_discard_ust_channel ()
132{
133 local sess_name=$1
134 local chan_name=$2
135
136 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name \
137 $chan_name -u --output mmap --discard \
138 --subbuf-size $(getconf PAGE_SIZE) --num-subbuf 2 \
139 > /dev/null 2>&1
140
141 ok $? "Enable channel $channel_name for session $sess_name with small discard buffers"
142}
143
144function enable_mmap_small_overwrite_ust_channel ()
145{
146 local sess_name=$1
147 local chan_name=$2
148
149 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel -s $sess_name \
150 $chan_name -u --output mmap --overwrite \
151 --subbuf-size $(getconf PAGE_SIZE) --num-subbuf 2 \
152 > /dev/null 2>&1
153
154 ok $? "Enable channel $channel_name for session $sess_name with small discard buffers"
155}
5e83c405
CB
156
157function test_ust_list_output ()
158{
159 output_names=("randomname" "somesnapshot")
ae779dd6
MD
160 NR_ITER=2000000
161 NR_USEC_WAIT=100
5e83c405
CB
162
163 diag "Test UST snapshot output listing"
164 create_lttng_session_no_output $SESSION_NAME
165 enable_lttng_mmap_overwrite_ust_channel $SESSION_NAME $CHANNEL_NAME
c4926bb5 166 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
5e83c405 167
e563bbdb 168 start_lttng_tracing_ok $SESSION_NAME
5e83c405
CB
169
170 snapshot_add_output $SESSION_NAME "file://$TRACE_PATH" ${output_names[0]}
171
172 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot list-output \
173 -s $SESSION_NAME 2>&1 | grep ${output_names[0]} > /dev/null
174 ok $? "Snapshot named ${output_names[0]} present in list-output listing"
175
176 snapshot_del_output $SESSION_NAME ${output_names[0]}
177
178 snapshot_add_output $SESSION_NAME "file://$TRACE_PATH" ${output_names[1]}
179
180 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot list-output \
181 -s $SESSION_NAME 2>&1 | grep ${output_names[1]} > /dev/null
182
183 ok $? "Snapshot named ${output_names[1]} present in list-output listing"
184
96340a01 185 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 186 destroy_lttng_session_ok $SESSION_NAME
5e83c405
CB
187}
188
ebaaaf5e
JD
189function test_ust_local_snapshot ()
190{
ae779dd6
MD
191 NR_ITER=2000000
192 NR_USEC_WAIT=100
193
ebaaaf5e
JD
194 diag "Test local UST snapshots"
195 create_lttng_session_no_output $SESSION_NAME
196 enable_lttng_mmap_overwrite_ust_channel $SESSION_NAME $CHANNEL_NAME
c4926bb5 197 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
e563bbdb 198 start_lttng_tracing_ok $SESSION_NAME
b5633831 199 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
209b934f
DG
200
201 # Returns once the application has at least fired ONE tracepoint.
202 start_test_app
203
ebaaaf5e 204 lttng_snapshot_record $SESSION_NAME
96340a01 205 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 206 destroy_lttng_session_ok $SESSION_NAME
ebaaaf5e
JD
207
208 # Validate test
209 validate_trace $EVENT_NAME $TRACE_PATH/
210 if [ $? -eq 0 ]; then
211 # Only delete if successful
212 rm -rf $TRACE_PATH
ebaaaf5e 213 fi
209b934f 214
0fc2834c 215 stop_test_apps
ebaaaf5e
JD
216}
217
ae779dd6
MD
218function test_ust_local_snapshot_small_discard_buffers ()
219{
220 NR_ITER=10000
221 NR_USEC_WAIT=0
222 OLDCPUSET=$(taskset -p $$)
223
224 diag "Test local UST snapshots with small discard buffers"
225 taskset -p 0x1 $$ 1>/dev/null 2>&1 # CPU 0 only
226 create_lttng_session_no_output $SESSION_NAME
227 enable_mmap_small_discard_ust_channel $SESSION_NAME $CHANNEL_NAME
228 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
229 start_lttng_tracing_ok $SESSION_NAME
230 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
231
232 # Run test apps, wait for them to complete.
233 start_test_app
234 wait_test_apps
235
236 # Take first snapshot, remember first line.
237 lttng_snapshot_record $SESSION_NAME
238 FIRST_LINE="$(trace_first_line $TRACE_PATH/)"
239 diag "First line (1st snapshot): $FIRST_LINE"
240 rm -rf $TRACE_PATH/
241
242 # Run test apps, wait for them to complete.
243 start_test_app
244 wait_test_apps
245
246 # Take second snapshot, remember first line.
247 lttng_snapshot_record $SESSION_NAME
248 FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)"
249 diag "First line (2nd snapshot): $FIRST_LINE_2"
250 rm -rf $TRACE_PATH/
251
252 if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
253 fail "First snapshot event do not match."
254 else
255 pass "First snapshot event match."
256 fi
257
258 stop_lttng_tracing_ok $SESSION_NAME
259 destroy_lttng_session_ok $SESSION_NAME
260 taskset -p $OLDCPUSET $$ 1>/dev/null 2>&1
261}
262
263function test_ust_local_snapshot_small_overwrite_buffers ()
264{
265 NR_ITER=10000
266 NR_USEC_WAIT=0
267 OLDCPUSET=$(taskset -p $$)
268
269 diag "Test local UST snapshots with small overwrite buffers"
270 taskset -p 0x1 $$ 1>/dev/null 2>&1 # CPU 0 only
271 create_lttng_session_no_output $SESSION_NAME
272 enable_mmap_small_overwrite_ust_channel $SESSION_NAME $CHANNEL_NAME
273 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
274 start_lttng_tracing_ok $SESSION_NAME
275 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
276
277 # Run test apps, wait for them to complete.
278 start_test_app
279 wait_test_apps
280
281 # Take first snapshot, remember first line.
282 lttng_snapshot_record $SESSION_NAME
283 FIRST_LINE="$(trace_first_line $TRACE_PATH/)"
284 diag "First line (1st snapshot): $FIRST_LINE"
285 rm -rf $TRACE_PATH/
286
287 # Run test apps, wait for them to complete.
288 start_test_app
289 wait_test_apps
290
291 # Take second snapshot, remember first line.
292 lttng_snapshot_record $SESSION_NAME
293 FIRST_LINE_2="$(trace_first_line $TRACE_PATH/)"
294 diag "First line (2nd snapshot): $FIRST_LINE_2"
295 rm -rf $TRACE_PATH/
296
297 if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
298 pass "First snapshot event do not match."
299 else
300 fail "First snapshot event match."
301 fi
302
303 stop_lttng_tracing_ok $SESSION_NAME
304 destroy_lttng_session_ok $SESSION_NAME
305 taskset -p $OLDCPUSET $$ 1>/dev/null 2>&1
306}
307
5e83c405
CB
308function test_ust_local_snapshot_max_size ()
309{
ae779dd6
MD
310 NR_ITER=2000000
311 NR_USEC_WAIT=100
034a7848 312 page_size=`getconf PAGE_SIZE`
1901f874 313 num_cpus=$(conf_proc_count)
5e83c405 314
034a7848
MJ
315 # The minimum subbuf size is the platform PAGE_SIZE
316 subbuf_size=$(($page_size*2))
317
5e83c405
CB
318 # The minimum size limit is min(subbuf_size) * nb_streams
319 max_size=$(($subbuf_size*$num_cpus))
320
321 diag "Test local UST snapshots with max size $max_size"
322 create_lttng_session_no_output $SESSION_NAME
323
324 enable_mmap_overwrite_subbuf_ust_channel $SESSION_NAME $CHANNEL_NAME $subbuf_size
325
c4926bb5 326 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
e563bbdb 327 start_lttng_tracing_ok $SESSION_NAME
5e83c405
CB
328
329 snapshot_add_output $SESSION_NAME "file://$TRACE_PATH" "" $max_size
330
209b934f
DG
331 # Returns once the application has at least fired ONE tracepoint.
332 start_test_app
5e83c405
CB
333
334 lttng_snapshot_record $SESSION_NAME
335
336 # Check file size
337 sum_size_tracefiles=$(find $TRACE_PATH -name "${CHANNEL_NAME}_*" \
338 -exec stat -c '%s' {} \; | awk '{s = s + $1}END{print s}')
339
340 if [ "$sum_size_tracefiles" -gt "$max_size" ]; then
341 fail "Tracefiles size sum validation"
342 diag "Tracefiles size sum: $sum_size_tracefiles Expected max: $max_size"
343 fi
344
345 pass "Tracefiles size sum validation"
346
96340a01 347 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 348 destroy_lttng_session_ok $SESSION_NAME
5e83c405
CB
349
350 # Validate test
351 validate_trace $EVENT_NAME $TRACE_PATH/
352
353 if [ $? -eq 0 ]; then
354 # Only delete if successful
355 rm -rf $TRACE_PATH
356 fi
357
0fc2834c 358 stop_test_apps
5e83c405
CB
359}
360
a54047ec
JD
361function test_ust_local_snapshot_large_metadata ()
362{
ae779dd6
MD
363 NR_ITER=2000000
364 NR_USEC_WAIT=100
a54047ec
JD
365 LM_EVENT="tp:tptest1,tp:tptest2,tp:tptest3,tp:tptest4,tp:tptest5"
366 LM_PATH="$TESTDIR/utils/testapp"
367 LM_NAME="gen-ust-nevents"
368 LM_BIN="$LM_PATH/$LM_NAME/$LM_NAME"
369
370 diag "Test local UST snapshots with > 4kB metadata"
371 create_lttng_session_no_output $SESSION_NAME
372 enable_lttng_mmap_overwrite_ust_channel $SESSION_NAME $CHANNEL_NAME
c4926bb5 373 enable_ust_lttng_event_ok $SESSION_NAME $LM_EVENT $CHANNEL_NAME
e563bbdb 374 start_lttng_tracing_ok $SESSION_NAME
b5633831 375 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
a54047ec
JD
376 $LM_BIN 1 1
377 ok $? "Start application to trace"
378 lttng_snapshot_record $SESSION_NAME
96340a01 379 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 380 destroy_lttng_session_ok $SESSION_NAME
a54047ec
JD
381
382 # Validate test
383 validate_trace $LM_EVENT $TRACE_PATH/
384 if [ $? -eq 0 ]; then
385 # Only delete if successful
386 rm -rf $TRACE_PATH
a54047ec
JD
387 fi
388}
389
5f4c2d80
JD
390function enable_channel_per_uid_mmap_overwrite()
391{
ae779dd6
MD
392 NR_ITER=2000000
393 NR_USEC_WAIT=100
5f4c2d80
JD
394 sess_name=$1
395 channel_name=$2
396
397 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name --output mmap --overwrite >/dev/null 2>&1
398 ok $? "Enable channel $channel_name per UID for session $sess_name"
399}
400
401function test_ust_per_uid_local_snapshot ()
402{
891d74dd 403 diag "Test per-uid local UST snapshots"
5f4c2d80
JD
404 create_lttng_session_no_output $SESSION_NAME
405 enable_channel_per_uid_mmap_overwrite $SESSION_NAME $CHANNEL_NAME
c4926bb5 406 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
e563bbdb 407 start_lttng_tracing_ok $SESSION_NAME
b5633831 408 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
209b934f
DG
409
410 # Returns once the application has at least fired ONE tracepoint.
411 start_test_app
412
5f4c2d80 413 lttng_snapshot_record $SESSION_NAME
96340a01 414 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 415 destroy_lttng_session_ok $SESSION_NAME
5f4c2d80
JD
416
417 # Validate test
418 validate_trace $EVENT_NAME $TRACE_PATH/
419 if [ $? -eq 0 ]; then
420 # Only delete if successful
421 rm -rf $TRACE_PATH
5f4c2d80 422 fi
209b934f 423
0fc2834c 424 stop_test_apps
5f4c2d80
JD
425}
426
4f03c06d
JD
427function test_ust_per_uid_local_snapshot_post_mortem ()
428{
ae779dd6
MD
429 NR_ITER=2000000
430 NR_USEC_WAIT=100
431
4f03c06d
JD
432 diag "Test local UST snapshots post-mortem"
433 create_lttng_session_no_output $SESSION_NAME
434 enable_channel_per_uid_mmap_overwrite $SESSION_NAME $CHANNEL_NAME
c4926bb5 435 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
e563bbdb 436 start_lttng_tracing_ok $SESSION_NAME
b5633831 437 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
209b934f
DG
438
439 # Returns once the application has at least fired ONE tracepoint.
440 start_test_app
0fc2834c 441 stop_test_apps
209b934f 442
4f03c06d 443 lttng_snapshot_record $SESSION_NAME
96340a01 444 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 445 destroy_lttng_session_ok $SESSION_NAME
4f03c06d
JD
446
447 # Validate test
448 validate_trace $EVENT_NAME $TRACE_PATH/
449 if [ $? -eq 0 ]; then
450 # Only delete if successful
451 rm -rf $TRACE_PATH
4f03c06d
JD
452 fi
453}
454
1d20c959 455function test_ust_local_snapshots ()
ebaaaf5e 456{
ae779dd6
MD
457 NR_ITER=2000000
458 NR_USEC_WAIT=100
459
1d20c959 460 diag "Test $NR_SNAPSHOT local UST snapshots"
ebaaaf5e
JD
461 create_lttng_session_no_output $SESSION_NAME
462 enable_lttng_mmap_overwrite_ust_channel $SESSION_NAME $CHANNEL_NAME
c4926bb5 463 enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
e563bbdb 464 start_lttng_tracing_ok $SESSION_NAME
b5633831 465 lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
209b934f
DG
466
467 # Returns once the application has at least fired ONE tracepoint.
468 start_test_app
469
1d20c959
DG
470 for i in $(seq 1 $NR_SNAPSHOT); do
471 diag "Snapshot $i/$NR_SNAPSHOT"
ebaaaf5e
JD
472 rm -rf $TRACE_PATH/snapshot/* 2>/dev/null
473 lttng_snapshot_record $SESSION_NAME
474 # Validate test
475 validate_trace $EVENT_NAME $TRACE_PATH/
476 if [ $? -eq 0 ]; then
477 # Only delete if successful
478 rm -rf $TRACE_PATH
ebaaaf5e
JD
479 fi
480 done
96340a01 481 stop_lttng_tracing_ok $SESSION_NAME
67b4c664 482 destroy_lttng_session_ok $SESSION_NAME
209b934f 483
0fc2834c 484 stop_test_apps
ebaaaf5e
JD
485}
486
487plan_tests $NUM_TESTS
488
489print_test_banner "$TEST_DESC"
490
ebaaaf5e 491start_lttng_sessiond
5e83c405
CB
492tests=( test_ust_list_output
493 test_ust_local_snapshot
494 test_ust_local_snapshot_max_size
495 test_ust_per_uid_local_snapshot
496 test_ust_per_uid_local_snapshot_post_mortem
497 test_ust_local_snapshot_large_metadata
ae779dd6
MD
498 test_ust_local_snapshots
499 test_ust_local_snapshot_small_discard_buffers
500 test_ust_local_snapshot_small_overwrite_buffers
501)
ebaaaf5e
JD
502
503for fct_test in ${tests[@]};
504do
505 SESSION_NAME=$(randstring 16 0)
506 ${fct_test}
ebaaaf5e
JD
507done
508
509stop_lttng_sessiond
This page took 0.070997 seconds and 5 git commands to generate.