#!/bin/bash # # Copyright (C) 2013 David Goulet # # SPDX-License-Identifier: LGPL-2.1-only # CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/.. LAUNCH_APP="launch_ust_app" SESSION_NAME="stress" EVENT_NAME="tp:tptest" LOG_FILE="sessiond.log" CHANNEL_NAME="channel0" NUM_TESTS=16 NR_APP=10 NR_SESSION=5 NR_LOOP=1000 COREDUMP_FILE=$(cat /proc/sys/kernel/core_pattern) APPS_PID= TEST_DESC="Stress test - $NR_SESSION sessions per UID with $NR_APP apps" source $TESTDIR/utils/utils.sh # MUST set TESTDIR before calling those functions function enable_channel_per_uid() { local sess_name=$1 local channel_name=$2 $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-uid -u $channel_name -s $sess_name >/dev/null 2>&1 ok $? "Enable channel $channel_name per UID for session $sess_name" } function check_sessiond() { if [ -z "$(lttng_pgrep lt-lttng-sessiond)" ]; then local str_date=$(date +%H%M%S-%d%m%Y) diag "!!!The session daemon died unexpectedly!!!" mv $LOG_FILE $LOG_FILE-$str_date if [ -e $COREDUMP_FILE ]; then mv $COREDUMP_FILE $COREDUMP_FILE-$str_date fi exit 1 fi } function start_sessiond() { validate_kernel_version if [ $? -ne 0 ]; then fail "Start session daemon" BAIL_OUT "*** Kernel too old for session daemon tests ***" fi if [ -z $(lttng_pgrep lt-$SESSIOND_BIN) ]; then # We have to start it like this so the ulimit -c is used by this # process. Also, we collect any error message printed out. $TESTDIR/../src/bin/lttng-sessiond/$SESSIOND_BIN --quiet --background --consumerd32-path="$TESTDIR/../src/bin/lttng-consumerd/lttng-consumerd" --consumerd64-path="$TESTDIR/../src/bin/lttng-consumerd/lttng-consumerd" >$LOG_FILE 2>&1 status=$? ok $status "Start session daemon" fi } test_stress() { for b in $(seq 1 $NR_LOOP); do for a in $(seq 1 $NR_SESSION); do create_lttng_session_ok $SESSION_NAME-$a $TRACE_PATH check_sessiond enable_channel_per_uid $SESSION_NAME-$a $CHANNEL_NAME check_sessiond enable_ust_lttng_event_ok $SESSION_NAME-$a $EVENT_NAME check_sessiond start_lttng_tracing_ok $SESSION_NAME-$a check_sessiond done for a in $(seq 1 $NR_SESSION); do stop_lttng_tracing_ok $SESSION_NAME-$a check_sessiond destroy_lttng_session_ok $SESSION_NAME-$a check_sessiond done done return 0 } function cleanup() { diag "Cleaning up!" for p in ${APPS_PID}; do kill -s SIGKILL ${p} wait ${p} 2>/dev/null done APPS_PID= stop_lttng_sessiond } function sighandler() { cleanup rm $LOG_FILE full_cleanup } trap sighandler SIGINT SIGTERM # Make sure we collect a coredump if possible. ulimit -c unlimited # MUST set TESTDIR before calling those functions plan_tests $NUM_TESTS print_test_banner "$TEST_DESC" start_sessiond diag "Starting applications" # Start NR_APP applications script that will spawn apps non stop. ./$TESTDIR/stress/$LAUNCH_APP $NR_APP & APPS_PID="${APPS_PID} ${!}" TRACE_PATH=$(mktemp -d) test_stress out=$? if [ $out -ne 0 ]; then cleanup exit $out fi cleanup rm -rf $TRACE_PATH rm $LOG_FILE exit 0