#! /bin/sh ########################################################################### ## ## ## Copyright (c) 2010 FUJITSU LIMITED ## ## ## ## This program is free software: you can redistribute it and/or modify ## ## it under the terms of the GNU General Public License as published by ## ## the Free Software Foundation, either version 3 of the License, or ## ## (at your option) any later version. ## ## ## ## This program 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 General Public License for more details. ## ## ## ## You should have received a copy of the GNU General Public License ## ## along with this program. If not, see <http://www.gnu.org/licenses/>. ## ## ## ## Author: Li Zefan <lizf@cn.fujitsu.com> ## ## ## ########################################################################### export TCID="ftrace-stress-test" export TST_TOTAL=1 export TST_COUNT=1 . ftrace_lib.sh test_targets=" \ trace_pipe current_tracer ftrace_enabled function_profile_enabled \ set_event set_ftrace_pid stack_max_size stack_trace trace trace_clock \ trace_options trace_stat tracing_enabled tracing_max_latency \ tracing_on function_profile_enabled buffer_size_kb tracing_cpumask \ set_ftrace_filter" get_skip_targets() { NR_PIDS=0 for target in ${test_targets}; do if [ ! -e $TRACING_PATH/$target ] && [ ! -e /proc/sys/kernel/$target ]; then eval skip_$target=1 tst_resm TINFO "$target is not supported. Skip it." else eval skip_$target=0 NR_PIDS=$((NR_PIDS + 1)) fi done # Export it before sub case is lanuched. export NR_PIDS } should_skip_target() { local skip_var=skip_$1 eval local skip_val=\$${skip_var} [ "$skip_val" = 1 ] } test_kill() { tst_resm TINFO "killing ${pid0}" kill -USR1 ${pid0} wait ${pid0} local p=1; while [ $p -lt $NR_PIDS ]; do local pid_var=pid${p} eval local kill_pid=\$${pid_var} tst_resm TINFO "killing ${kill_pid}" kill -KILL $kill_pid wait ${kill_pid} p=$((p + 1)) done } test_stress() { local index=0; tst_resm TINFO "Test targets: ${test_targets}" get_skip_targets for target in ${test_targets}; do if should_skip_target $target; then continue fi sh ftrace_${target}.sh & eval pid${index}=$! tst_resm TINFO "Start pid${index}=$! $SPATH/ftrace_${target}.sh" index=$((index + 1)) done export_pids } export_pids() { local p=0 while [ $p -lt $NR_PIDS ]; do export pid${p} p=$((p + 1)) done } cd ftrace_stress/ # ---------------------------- tst_resm TINFO "Ftrace Stress Test Begin" test_begin test_stress test_wait test_kill tst_resm TINFO "Finished running the test. Run dmesg to double-check for bugs" tst_exit