#!/bin/bash
#
-# Copyright (C) - 2013 Julien Desfossez <jdesfossez@efficios.com>
+# Copyright (C) 2013 Julien Desfossez <jdesfossez@efficios.com>
#
-# This library is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation; version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# SPDX-License-Identifier: LGPL-2.1-only
+
TEST_DESC="Snapshots - Kernel tracing"
CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/../../..
EVENT_NAME="sched_switch"
-PID_RELAYD=0
SESSION_NAME=""
CHANNEL_NAME="snapchan"
-TRACE_PATH=$(mktemp -d)
+TRACE_PATH=$(mktemp -d -t tmp.test_snapshots_kernel_trace_path.XXXXXX)
-NUM_TESTS=2060
+NUM_TESTS=2061
source $TESTDIR/utils/utils.sh
enable_lttng_mmap_overwrite_kernel_channel $SESSION_NAME $CHANNEL_NAME
lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
start_lttng_tracing_ok $SESSION_NAME
- lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
+ lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
lttng_snapshot_record $SESSION_NAME
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
# Validate test
+ validate_trace_path_kernel_snapshot "$TRACE_PATH" "" "snapshot-1" 0 ""
validate_trace $EVENT_NAME $TRACE_PATH/
if [ $? -eq 0 ]; then
# Only delete if successful
rm -rf $TRACE_PATH
- else
- break
fi
}
lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
start_lttng_tracing_ok $SESSION_NAME
stop_lttng_tracing_ok $SESSION_NAME
- lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
+ lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
lttng_snapshot_record $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
if [ $? -eq 0 ]; then
# Only delete if successful
rm -rf $TRACE_PATH
- else
- break
fi
}
enable_lttng_mmap_overwrite_kernel_channel $SESSION_NAME $CHANNEL_NAME
lttng_enable_kernel_event $SESSION_NAME $EVENT1 $CHANNEL_NAME
start_lttng_tracing_ok $SESSION_NAME
- lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
+ lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
# first snapshot with only 1 event
lttng_snapshot_record $SESSION_NAME
if [ $? -eq 0 ]; then
# Only delete if successful
rm -rf $TRACE_PATH
- else
- break
fi
diag "Adding event $EVENT2"
if [ $? -eq 0 ]; then
# Only delete if successful
rm -rf $TRACE_PATH
- else
- break
fi
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
}
-function true_loop_cpu0()
+function generate_filter_events_cpu0()
{
- # Generate many system call events (fill buffers) on CPU 0
- for a in $(seq 1 $1); do
- taskset 0x00000001 /bin/true;
- done
+ # Generate many events (fill buffers) on CPU 0
+ taskset 0x00000001 /bin/echo -n "$1" > /proc/lttng-test-filter-event 2> /dev/null
}
function test_kernel_local_snapshot_discard ()
{
diag "Test local kernel snapshots with small discard buffers"
+
+ local event_name="lttng_test_filter_event"
+
+ modprobe lttng-test
create_lttng_session_no_output $SESSION_NAME
enable_lttng_mmap_discard_small_kernel_channel $SESSION_NAME \
$CHANNEL_NAME
- lttng_enable_kernel_syscall_ok $SESSION_NAME -a $CHANNEL_NAME
+ enable_kernel_lttng_event_ok $SESSION_NAME $event_name $CHANNEL_NAME
start_lttng_tracing_ok $SESSION_NAME
- lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
+ lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
- true_loop_cpu0 10000
+ generate_filter_events_cpu0 10000
# Take first snapshot, remember first line.
lttng_snapshot_record $SESSION_NAME
rm -rf $TRACE_PATH
- true_loop_cpu0 10000
+ # Fill CPU 0's buffer and overwrite previous contents
+ generate_filter_events_cpu0 10000
# Take 2nd snapshot, compare first line. In discard mode, they
# should still be the same.
rm -rf $TRACE_PATH
if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
- fail "First snapshot event do not match."
+ fail "First snapshot event do not match"
else
- pass "First snapshot event match."
+ pass "First snapshot event match"
fi
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
+ modprobe --remove lttng-test
}
function test_kernel_local_snapshot_overwrite_small_buffers ()
{
diag "Test local kernel snapshot with small overwrite buffers"
+
+ local event_name="lttng_test_filter_event"
+
+ modprobe lttng-test
create_lttng_session_no_output $SESSION_NAME
enable_lttng_mmap_overwrite_small_kernel_channel $SESSION_NAME \
$CHANNEL_NAME
- lttng_enable_kernel_syscall_ok $SESSION_NAME -a $CHANNEL_NAME
+ enable_kernel_lttng_event_ok $SESSION_NAME $event_name $CHANNEL_NAME
start_lttng_tracing_ok $SESSION_NAME
- lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
+ lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
- true_loop_cpu0 10000
+ generate_filter_events_cpu0 10000
# Take first snapshot, remember first line.
lttng_snapshot_record $SESSION_NAME
rm -rf $TRACE_PATH
- true_loop_cpu0 10000
+ # Fill CPU 0's buffer and overwrite previous contents
+ generate_filter_events_cpu0 10000
# Take 2nd snapshot, compare first line. In overwrite mode, they
# WILL be different.
rm -rf $TRACE_PATH
if [ x"$FIRST_LINE" != x"$FIRST_LINE_2" ]; then
- pass "First snapshot event do not match."
+ pass "First snapshot event do not match"
else
- fail "First snapshot event match."
+ fail "First snapshot event match"
fi
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
+ modprobe --remove lttng-test
}
function test_kernel_1000_local_snapshots ()
enable_lttng_mmap_overwrite_kernel_channel $SESSION_NAME $CHANNEL_NAME
lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME $CHANNEL_NAME
start_lttng_tracing_ok $SESSION_NAME
- lttng_snapshot_add_output_ok $SESSION_NAME $TRACE_PATH
+ lttng_snapshot_add_output_ok $SESSION_NAME file://$TRACE_PATH
for i in $(seq 1 $NB_SNAP); do
diag "Snapshot $i/$NB_SNAP"
rm -rf $TRACE_PATH/snapshot/* 2>/dev/null
print_test_banner "$TEST_DESC"
+bail_out_if_no_babeltrace
+
+
if [ "$(id -u)" == "0" ]; then
isroot=1
else
isroot=0
fi
-skip $isroot "Root access is needed. Skipping all kernel snapshot tests." $NUM_TESTS ||
+skip $isroot "Root access is needed. Skipping all kernel snapshot tests" $NUM_TESTS ||
{
validate_lttng_modules_present