My bash does not understand that syntax: [ $UID -eq 0 ] || die "You need to be root!"
+ [ -eq 0 ] ./scripts/task-isolation/isolate-cpu.sh: 152: [: -eq: unexpected operator On 02/17/17 17:34, Mike Holmes wrote: > checkpatch is designed for the kernel C code so we have to use some > judgment, as for git there are cases it makes no sence > > On 17 February 2017 at 09:10, Maxim Uvarov <maxim.uva...@linaro.org > <mailto:maxim.uva...@linaro.org>> wrote: > > interesting if checpatch is ok, git am warns on spaces in intent: > > > git am -s /tmp/11/\[PATCH\ v3\]\ validation\:\ A\ wrapper\ script\ to\ > run\ test\ isolated..eml > Applying: validation: A wrapper script to run test isolated. > .git/rebase-apply/patch:24: indent with spaces. > the desired task. It also provides the possibility > > > This is Human text in a readme file, do we want or need to enforce tabs > here ? > > > > .git/rebase-apply/patch:25: indent with spaces. > to trace kernel disturbance on the isolated CPUs. > .git/rebase-apply/patch:106: indent with spaces. > if [[ $str == *[\-]* ]]; then > .git/rebase-apply/patch:107: indent with spaces. > str=$(echo $str| sed 's/-/../g') > .git/rebase-apply/patch:108: indent with spaces. > str=$(eval echo {$str}) > warning: squelched 88 whitespace errors > warning: 93 lines add whitespace errors. > 17:08 /opt/Linaro/odp3.git (master)$git format-patch HEAD^ > 0001-validation-A-wrapper-script-to-run-test-isolated.patch > 17:09 /opt/Linaro/odp3.git (master)$perl ./scripts/checkpatch.pl > <http://checkpatch.pl> > 0001-validation-A-wrapper-script-to-run-test-isolated.patch > total: 0 errors, 0 warnings, 0 checks, 577 lines checked > > NOTE: Ignored message types: BIT_MACRO COMPARISON_TO_NULL > DEPRECATED_VARIABLE NEW_TYPEDEFS SPLIT_STRING SSCANF_TO_KSTRTO > > 0001-validation-A-wrapper-script-to-run-test-isolated.patch has no > obvious style problems and is ready for submission. > > > > On 02/16/17 13:42, Josep Puigdemont wrote: > > On Thu, Feb 16, 2017 at 09:52:37AM +0100, Ravineet Singh wrote: > >> The wrapper script; odp_run_app_isolated.sh can be used to run ODP > >> testcases in a isolated environment. Background noise can also be > >> generated. > >> > >> Signed-off-by: Ravineet Singh <ravineet.si...@linaro.org > <mailto:ravineet.si...@linaro.org>> > >> > >> v2: moved task-isolation dir to odp/scripts, requested my Maxim > Uvarov > >> v3: fixed checkpatch.pl <http://checkpatch.pl> warnings > >> --- > >> scripts/task-isolation/README | 22 ++ > >> scripts/task-isolation/isolate-cpu.sh | 287 > +++++++++++++++++++++ > >> scripts/task-isolation/isolate-task.sh | 160 > ++++++++++++ > >> .../performance/odp_run_app_isolated.sh | 108 ++++++++ > >> 4 files changed, 577 insertions(+) > >> create mode 100644 scripts/task-isolation/README > >> create mode 100755 scripts/task-isolation/isolate-cpu.sh > >> create mode 100755 scripts/task-isolation/isolate-task.sh > >> create mode 100755 > test/linux-generic/performance/odp_run_app_isolated.sh > >> > >> diff --git a/scripts/task-isolation/README > b/scripts/task-isolation/README > >> new file mode 100644 > >> index 0000000..cb02056 > >> --- /dev/null > >> +++ b/scripts/task-isolation/README > >> @@ -0,0 +1,22 @@ > >> +Helper scripts to check and set CPU isolation and execution of > application in > >> +isolated CPU(s) > >> + > >> +Files: > >> +isolate-cpu.sh isolates desired CPUs > >> +isolate-task.sh uses isolate-cpu.sh to isolate CPUs before > running > >> + the desired task. It also provides the > possibility > >> + to trace kernel disturbance on the isolated > CPUs. > >> + > >> +isolate-cpu.sh checks the kernel configuration and the kernel > cmdline to > >> + determine if one or several CPUs are isolated, i.e. it checks for; > >> + CONFIG_NO_HZ_FULL_ALL=y", and CONFIG_RCU_NOCB_CPU_ALL=y" in the > kernel config > >> + and rcu_nocbs,nohz_full in the kernel cmdline. > >> + If the desired CPU(s) are not inte the above configuration, it > warns but continues > >> + to isolate the CPU(s) as much as possibe. The isolation is > accomplished by > >> + - Redirecting all IRQ's away from desired isolated cores > >> + - Using cset (cpuset) to move all running processes and kernel > threads > >> + away from desired isolated cores > >> + > >> +isolate-task.sh uses isolate-cpu.sh to isolate desired CPU(s). > In addition > >> + it starts the supplied application on isolated CPU(s) and > optionally traces > >> + the isolated CPU(s) for kernel interaction. > >> diff --git a/scripts/task-isolation/isolate-cpu.sh > b/scripts/task-isolation/isolate-cpu.sh > >> new file mode 100755 > >> index 0000000..3eaf98a > >> --- /dev/null > >> +++ b/scripts/task-isolation/isolate-cpu.sh > >> @@ -0,0 +1,287 @@ > >> +#!/bin/bash > >> +# > >> +# Copyright (c) 2017, Linaro Limited > >> +# All rights reserved. > >> +# > >> +# SPDX-License-Identifier: BSD-3-Clause > >> +# > >> +# Script that passes command line arguments to odp_scheduling after, > >> +# optionally, isolating CPU > >> +# > >> +# This script isolates desired CPUS, i.e. > >> +# - Checks kernel cmdline and kernel config to determine > >> +# if the environment is optimised for isolated task execution; > >> +# - Moves CPU interrupts, kernel threads, tasks etc. away from the > >> +# targeted CPU. > >> +# *Note* CPU 0 cannot be isolated, i.e minimum 2 CPU's are required. > >> + > >> + > >> +print_usage() { > >> + echo "$0 [-h] [-a] [-c <cpu list>] [-l] [-r] [-d]" > >> + echo > >> + echo " Isolate CPU(s) from other tasks, kernel threads and IRQs" > >> + echo " Args:" > >> + echo " -h Print this message" > >> + echo " -a Isolate all CPUs (except CPU 0)" > >> + echo " -c List of CPUs to be isolated." > >> + echo " -l Show isolation proporties" > >> + echo " -r Reset isolation" > >> + echo " -d Show debug printouts" > >> + echo "" > >> + echo " Examples:" > >> + echo " Isolate all CPU(s) (except 0) " > >> + echo " $0 -a" > >> + echo > >> + echo " Isolate CPUs 1-3 " > >> + echo " $0 -c 1-3" > >> + echo > >> + echo " Isolate CPUs 1 and 4 " > >> + echo " $0 -c 1,4 " > > > > maybe use a here document? > > > >> +} > >> + > >> +dlog() { > >> + [ $DEBUG ] && echo "$*" > >> +} > >> + > >> +warn() { > >> + printf "Warning: $*\n" >&2 > >> +} > >> + > >> +die() { > >> + printf "Error: $*\n" >&2 > >> + exit 1 > >> +} > >> + > >> +get_cpu_array() { > >> + [ $1 ] || die "$FUNCNAME internal error!" > >> + > >> + local cpus="" > >> + IFS=. a=$1; IFS=, a=$a; > > > > I don't understand why IFS=. is needed... > > Also, shouldn't IFS be restored here? > > > >> + for str in $a; do > >> + if [[ $str == *[\-]* ]]; then > >> + str=$(echo $str| sed 's/-/../g') > >> + str=$(eval echo {$str}) > >> + fi > > > > nice! > > > >> + > >> + if [ "$cpus" != "" ]; then > >> + cpus="$cpus $str" > >> + else > >> + cpus=$str > >> + fi > > > > you can probably get away with cpus="$cpus $str" > > > >> + done > >> + > >> + echo $cpus > >> +} > >> + > >> +## > >> +# Check kernel config and kernel cmdline for rcu callbacs and no_hz > >> +# *Note* isolcpu= kernel cmdline option isolates CPUs from SMP > balancing > >> +# If needed, this can be done via > >> +# cpusets/user/cpuset.sched_load_balance > >> +## > >> +check_kernel_config() { > >> + > >> + eval $(cat /proc/cmdline | grep -o 'nohz_full=[^ ]*') > >> + > >> + local configs="/proc/config.gz /boot/config-$(uname -r) > /boot/config " > >> + dlog "Looking for Kernel configs; $configs " > >> + for config in $configs; do > >> + if [ -e $config ]; then > >> + dlog "Kenel configuration found:$config" > >> + break > >> + fi > >> + done > >> + > >> + local all_except_0="1-$(($(getconf _NPROCESSORS_ONLN) - 1))" > >> + if [ $config ]; then > > > > I think this will always be evaluated to true, shouldn't it be > > if [ -e $config ] ? or even -r $config? > > > >> + nohz_full=$(zgrep "CONFIG_NO_HZ_FULL_ALL=y" $config > 2>/dev/null) \ > >> + && nohz_full=$all_except_0 > >> + else > >> + warn "Kernel config not found, only checking > /proc/cmdline for"\ > >> + " isolation features." > >> + fi > >> + > >> + if ! [ "$nohz_full" ]; then > >> + eval $(cat /proc/cmdline | grep -o 'nohz_full=[^ ]*') > > > > no need to pipe: grep ... /proc/cmdline > > > >> + fi > >> + > >> + eval $(cat /proc/cmdline | grep -o 'isolcpus=[^ ]*') > > > > ditto > > > >> + if [ -z "$isolcpus" ]; then > >> + warn "No CPU is isolated from kernel/user threads, > isolcpus= is "\ > >> + "not set in kernel cmdline." > >> + else > >> + gbl_isolated_cpus=$isolcpus > >> + export gbl_isolated_cpus > >> + fi > >> + > >> + if [ -z "$nohz_full" ]; then > >> + warn "No CPU is isolated from kernel ticks, > CONFIG_NO_HZ_FULL_ALL=y" \ > >> + " not set in kernel, nor nohz_full= set in kernel > cmdline." > >> + fi > >> + > >> + for i in `pgrep rcu` ; do taskset -pc 0 $i >/dev/null; done > > > > can you do this? > > > >> + > >> + dlog "isolcpus:$isolcpus" > >> + dlog "nohz_full:$nohz_full" > >> + #dlog "rcu_nocbs:$rcu_nocbs" > >> + > >> + return 0 > >> +} > >> + > >> +cpus_valid() { > >> + local cpus="$1" > >> + local isolated=$2 > >> + local iarray=$(get_cpu_array $isolated) > >> + local carray=$(get_cpu_array $cpus) > >> + > >> + for c in $carray; do > >> + for i in $iarray; do > > > > maybe check that the user didn't provide 0 as a CPU to isolate? > > > >> + if [ $i = $c ]; then > >> + yah=$i > >> + fi > >> + done > >> + [ -z "$yah" ] && return 1 > >> + done > >> + > >> + return 0 > >> +} > >> + > >> +check_prequesties() { > >> + dlog "Checking prequesties; user is root, kernel has cpuset > support,"\ > >> + " and commads; set, zgrep, getconf are available" > >> + [ $UID -eq 0 ] || die "You need to be root!" > >> + grep -q -s cpuset /proc/filesystems || die "Kernel does not > support cpuset!" > >> + which getconf > /dev/null 2>&1 || die "getconf command not > found, please "\ > >> + "install getconf" > >> + which cset > /dev/null 2>&1 || die "cset command not found, > please "\ > >> + "install cpuset" > >> + which zgrep > /dev/null 2>&1 || die "zgrep command not > found, please "\ > >> + "install gzip" > >> +} > >> + > >> +shield_reset() { > >> + cset shield -r >/dev/null 2>&1 > >> + sleep 0.1 > >> +} > >> + > >> +shield_list() { > >> + sets="/cpusets/*/" > >> + for i in $sets ; do > >> + if ! [ -e $i ]; then > >> + continue > >> + fi > >> + printf "Domain %s cpus %s, running %d tasks\n" \ > >> + $(basename $i) $(cat $i/cpuset.cpus) $(cat $i/tasks | > wc -l) > >> + done > >> +} > >> + > >> +shield_cpus() { > >> + local cpus="$1" > >> + > >> + dlog "shielding CPU:s $cpus" > >> + > >> + #Reset and create new shield > >> + shield_reset > >> + out=$(cset shield -c $cpus -k on 2>&1) || die "cset failed; > $out" > >> + # Delay the annoying vmstat timer far away > >> + sysctl vm.stat_interval=120 >/dev/null > >> + > >> + # Shutdown nmi watchdog as it uses perf events > >> + sysctl -w kernel.watchdog=0 >/dev/null > >> + > >> + # Pin the writeback workqueue to CPU0 > >> + #Fixme, check that /sys/bus is mounted? > >> + echo 1 > /sys/bus/workqueue/devices/writeback/cpumask > >> + > >> + # Disable load balanser. > > > > balancer > > > >> + echo 0 > /cpusets/user/cpuset.sched_load_balance > >> + > >> + #Fixme, for now just send all irqs to core 0 > >> + for affinity in /proc/irq/*/smp_affinity; do > >> + dlog "redirecting $affinity" > >> + echo 1 > $affinity 2>/dev/null || dlog "$affinity > redirection failed." > >> + done > >> + > >> + > >> + #Fixme, not implemented. > >> + if [ $false ]; then > >> + for affinity in /proc/irq/*/smp_affinity; do > >> + local old_mask=$(cat $affinity) > >> + local new_mask=$((oldmask ^ cpus )) > >> + echo $new_mask > $affinity > >> + done > >> + fi > >> +} > >> + > >> +isolate_cpus() { > >> + > >> + local cpus="$1" > >> + > >> + check_kernel_config > >> + > >> + if [ "$gbl_isolated_cpus" ]; then > >> + cpus_valid $cpus $gbl_isolated_cpus || > >> + warn "Selected CPU '$cpus' is not inside isolated > cpus "\ > >> + "array:$gbl_isolated_cpus" > >> + fi > >> + > >> + dlog "Isolating CPUs $cpus" > >> + > >> + shield_cpus $cpus > >> + > >> + # Verfiy cores empty > >> + for c in $(get_cpu_array $cpus); do > >> + running=$(ps ax -o pid,psr,comm | \ > >> + awk -v cpu="$c" '{if($2==cpu){print $3}}') > >> + if [ "$running" != "" ]; then > >> + warn "Core $c not empty!" > >> + dlog "; running tasks:\n$running\n" > >> + fi > >> + done > > > > indentation (tabs used here but spaces above) > > > >> + > >> + return 0 > >> +} > >> + > >> +## > >> +# Script entry point > >> +## > >> +while getopts hdarlc: arguments > >> +do > >> + case $arguments in > >> + h) > >> + print_usage > >> + exit 0 > >> + ;; > >> + d) > >> + DEBUG=1 > >> + ;; > >> + a) > >> + ISOL_CPUS="1-$(($(getconf _NPROCESSORS_ONLN) - 1))" > >> + ;; > >> + r) > >> + shield_reset > >> + exit 0 > >> + ;; > >> + l) > >> + shield_list > >> + exit 0 > >> + ;; > >> + c) > >> + [ "$ISOL_CPUS" ] || ISOL_CPUS=$OPTARG > >> + ;; > >> + *) > >> + print_usage > >> + exit 1 > >> + ;; > >> + esac > >> +done > >> +#Remove all flags > >> +shift $((OPTIND-1)) > >> + > >> +if ! [ $ISOL_CPUS ]; then > >> + print_usage > >> + exit 1 > >> +fi > >> + > >> +check_prequesties > >> +isolate_cpus $ISOL_CPUS || die "isolate_cpus failed." > > > > isolate_cpus() always retuns success... > > > >> diff --git a/scripts/task-isolation/isolate-task.sh > b/scripts/task-isolation/isolate-task.sh > >> new file mode 100755 > >> index 0000000..3e588bc > >> --- /dev/null > >> +++ b/scripts/task-isolation/isolate-task.sh > >> @@ -0,0 +1,160 @@ > >> +#!/bin/bash > >> +# > >> +# Copyright (c) 2017, Linaro Limited > >> +# All rights reserved. > >> +# > >> +# SPDX-License-Identifier: BSD-3-Clause > >> +# > >> +# Script that passes command line arguments to odp_scheduling after, > >> +# optionally, isolating CPU > >> +# > >> +# This script isolates a task on desired CPUs and > >> +# optionally creates background noise. > >> + > >> +print_usage() { > >> + echo "$0 [-c <cpu list>] [-d] [-h] [-n] <application arg1, > arg2, ...>" > >> + echo > >> + echo " Isolate CPU(s) from other tasks, kernel threads and IRQs" > >> + echo " and run an application on isolated CPUs" > >> + echo " Args:" > >> + echo " -c List of CPUs to be isolated" > >> + echo " -d Show debug printouts" > >> + echo " -h Print this message" > >> + echo " -n Create background noise (stress)" > >> + echo "" > >> + echo "All CPU's, except CPU 0, are isolated unless '-c' > specified" > >> + echo " Examples:" > >> + echo " Isolate CPU 1,2 and run application in the same." > >> + echo " $0 -n -c 1,2 /some/path/application" > >> + echo > >> + echo " Isolate all possible CPUs and run applicatipon" > >> + echo " $0 /path/application" > >> +} > >> + > >> +dlog() { > >> + [ $DEBUG ] && echo "$*" > >> +} > >> + > >> +die() { > >> + printf "Error: $*\n" >&2 > >> + exit 1 > >> +} > >> + > >> +trap cleanup INT EXIT > >> + > >> +cleanup(){ > >> + local pids=$(pgrep $MY_STRESS 2>/dev/null) > >> + local base=$(dirname $0) > >> + > >> + $base/isolate-cpu.sh -r > >> + [ "$pids" != "" ] && kill -9 $pids >/dev/null 2>&1 > >> + kill -9 $CHILD >/dev/null 2>&1 > >> + rm -f $MY_STRESS_PATH > >> +} > >> + > >> +wait_app_started () { > >> + local child=$1 > >> + local ltasks=0 > >> + > >> + while true; do > >> + sleep 0.01 > >> + kill -0 $child 2>/dev/null || break > >> + tasks=$(ls /proc/$child/task | wc -l) > >> + [ $tasks -eq $ltasks ] && break > >> + ltasks=$tasks > >> + done > >> + dlog "app started, # threads:$ltasks" > >> +} > >> + > >> +create_noise() { > >> + local mpath=$1 > >> + local nr=$(grep processor /proc/cpuinfo | wc -l) > >> + > >> + ln -sf $(which stress) $mpath || die "ln failed" > >> + $mpath -c $nr 2>&1 >/dev/null & > >> + disown $! > >> +} > >> + > >> +isolate_cpu(){ > >> + local cpus=$1 > >> + local base=$(dirname $0) > >> + $base/isolate-cpu.sh -c $cpus || die "$0 failed" > >> +} > >> + > >> +run_application() { > >> + local app="$1" > >> + > >> + dlog "Starting application: $app" > >> + $app& > >> + child=$! > >> + CHILD=$child > >> + > >> + echo $child >> /cpusets/user/tasks > >> + if [ $? -ne 0 ]; then > >> + kill -9 $child > >> + die "Failed to isolate task..." > >> + fi > >> + > >> + wait_app_started $child > >> + wait $child > >> +} > >> + > >> +check_prequesties() { > >> + local base=$(dirname $0) > >> + > >> + [ -e $base/isolate-cpu.sh ] || die "$base/isolate-cpu.sh not > found!" > >> + [ $UID -eq 0 ] || die "You need to be root!" > >> + which stress > /dev/null 2>&1 || die "stress command not > found, "\ > >> + "please install stress" > >> +} > >> + > >> +## > >> +# Script entry point > >> +## > >> + > >> +ISOL_CPUS="1-$(($(getconf _NPROCESSORS_ONLN) - 1))" > >> + > >> +while getopts hdnc: arguments > >> +do > >> + case $arguments in > >> + h) > >> + print_usage > >> + exit 0 > >> + ;; > >> + d) > >> + DEBUG=1 > >> + ;; > >> + n) > >> + NOISE=1 > >> + ;; > >> + c) > >> + ISOL_CPUS=$OPTARG > >> + ;; > >> + *) > >> + print_usage > >> + exit 1 > >> + ;; > >> + esac > >> +done > >> +# Remove all flags > >> +shift $((OPTIND-1)) > >> + > >> +if ! [ "$1" ]; then > >> + print_usage > >> + exit 1 > >> +fi > >> + > >> +#Isolate and optionally create noise > >> +command="$*" > >> +set -- $command > >> + > >> +check_prequesties > >> + > >> +MY_STRESS=stress-by-$$ > >> +MY_STRESS_PATH=/tmp/$MY_STRESS > >> + > >> +isolate_cpu $ISOL_CPUS || die "isolate cpu failed!" > >> +[ -z $NOISE ] || create_noise $MY_STRESS_PATH > >> +run_application "$command" > >> + > >> +exit $? > >> diff --git > a/test/linux-generic/performance/odp_run_app_isolated.sh > b/test/linux-generic/performance/odp_run_app_isolated.sh > >> new file mode 100755 > >> index 0000000..3bed0a7 > >> --- /dev/null > >> +++ b/test/linux-generic/performance/odp_run_app_isolated.sh > > > > there is a mix of spaces and tabs for indentation in this script > > > >> @@ -0,0 +1,108 @@ > >> +#!/bin/sh > >> +# > >> +# Copyright (c) 2017, Linaro Limited > >> +# All rights reserved. > >> +# > >> +# SPDX-License-Identifier: BSD-3-Clause > >> +# > >> + > >> + > >> +TEST_DIR="${TEST_DIR:-$(dirname $0)}" > >> +PERFORMANCE="$TEST_DIR/../../common_plat/performance" > >> +ISOL_DIR="${TEST_DIR}/../../../scripts/task-isolation" > >> +APPLICATION="${PERFORMANCE}/odp_pktio_perf${EXEEXT}" > >> +APPLICATION_ARGS="" > >> +APPLICATION_BASE="$(basename ${APPLICATION})" > >> + > >> +cleanup(){ > >> + pids=$(pgrep stress 2>/dev/null) > >> + [ "$pids" != "" ] && kill -9 $pids > >> +} > >> + > >> +print_usage() { > >> + echo "$0 [-i] [-n] [-h] [<application> <application args>]" > >> + echo > >> + echo " Run an application with or without isolation and > background noise" > >> + echo " Flags:" > >> + echo " -h Print this message" > >> + echo " -i Isolate CPU prior to running application." > >> + echo " -n Create background noise (stress)" > >> + echo "" > >> + echo " <application> targeted application" > >> + echo " <args> targeted application arguments" > >> + echo " *Note* Default application is ${APPLICATION_BASE}" > >> + echo "" > >> + echo " Example:" > >> + echo " Isolate CPU, create background noise and run > ${APPLICATION_BASE}:" > >> + echo " $0 -i -n" > >> + echo > >> + echo " Run ${APPLICATION_BASE}, w/o isolation but with > background noise:" > >> + echo " $0 -n" > >> + echo > >> + echo " Run Myapp, without isolation but with background noise:" > >> + echo " $0 -n Myapp -s ome args" > >> +} > >> + > >> +run() { > >> + local isolate=$1 > >> + local noise=$2 > >> + if [ ${isolate} -eq 1 ]; then > >> + [ ${noise} -eq 1 ] && noise_par="-n" > >> + echo Running ${APPLICATION_BASE} with isolation and > background noise > >> + echo ===================================================== > >> + $ISOL_DIR/isolate-task.sh ${noise_par} ${APPLICATION} \ > >> + ${APPLICATION_ARGS} || exit 1 > >> + #reset isolation > >> + $ISOL_DIR/isolate-cpu.sh -r > >> + else > >> + echo Running ${APPLICATION_BASE} without isolation > >> + echo ===================================================== > >> + if [ ${noise} -eq 1 ]; then > >> + local nr=$(grep processor /proc/cpuinfo | wc -l) > >> + echo " Creating background noise..." > >> + stress -c $nr 2>&1 >/dev/null & > >> + fi > >> + ${APPLICATION} ${APPLICATION_ARGS} || exit 2 > >> + fi > >> +} > >> + > >> +trap cleanup INT EXIT > >> +ISOLATE=0 > >> +NOISE=0 > >> +while getopts hni arguments > >> +do > >> + case $arguments in > >> + h) > >> + print_usage > >> + exit 0 > >> + ;; > >> + n) > >> + NOISE=1 > >> + $(which stress > /dev/null 2>&1) > >> + ret=$? > >> + if [ ${ret} -ne 0 ]; then > > > > or: > > if ! $(which stress > /dev/null 2>&1); then > > > >> + echo "'stress' not found, bailing" >&2 > >> + exit 3 > >> + fi > >> + ;; > >> + i) > >> + ISOLATE=1 > >> + ;; > >> + *) > >> + print_usage > >> + exit 1 > >> + ;; > >> + esac > >> +done > >> +#Remove flags > >> +shift $((OPTIND-1)) > >> + > >> +if [ $# -gt 0 ]; then > >> + APPLICATION="$1" > >> + shift > >> +fi > >> +[ $# -gt 0 ] && APPLICATION_ARGS=$* > >> + > >> +run ${ISOLATE} ${NOISE} > >> + > >> +exit $? > > > > not needed, the script will exit with the exit value of the last > > command executed. > > > >> -- > >> 2.7.4 > >> > > > > > -- > Mike Holmes > Program Manager - Linaro Networking Group > Linaro.org <http://www.linaro.org/>* **│ *Open source software for ARM SoCs > "Work should be fun and collaborative, the rest follows" > > __ > >