blob: a2fcb8451fecb32157bcc5b31cacfda566953af0 [file] [log] [blame]
#!/bin/bash
#
# Copyright (c) 2016 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
function usage() {
echo "Usage: ./profile <options> [profiler log] [ELF file]"
echo " Post-process profiler output. matplotlib is required for graphical output"
echo ""
echo " Type:"
echo " default Text output"
echo " -r|--run Running task view (running context over time)"
echo " -t|--total Display total CPU load per context"
echo " -s|--slice Timeslice graph (Context load average per period)"
echo ""
echo " Options:"
echo " -c|--clock [ticks_per_sec] HW cycle period (system timer)"
echo " Only applicable for graphical output:"
echo " -b|--begin [time_ms] Start timestamp (ms since boot)"
echo " -e|--end [time_ms] End time (ms since boot)"
echo " Only applicable for slice:"
echo " -p|--period [period_ms] Timeslice average period"\
"(for timeslice graph only)"
}
TEXT=0
RUN=1
TOTAL=2
SLICE=3
TYPE=$TEXT
PERIOD=500
TS_START=0
TS_END=0
NO_PARAM=0
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ] ; do SOURCE="$(readlink "$SOURCE")"; done
TOP_DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
while [ -n "$1" ]; do
case "$1" in
-h|--help)
usage
exit
;;
-r|--run) TYPE=$RUN ;;
-t|--total) TYPE=$TOTAL ;;
-s|--slice) TYPE=$SLICE ;;
-b|--begin) shift; TS_START=$1 ;;
-e|--end) shift; TS_END=$1 ;;
-p|--period) shift; PERIOD=$1 ;;
-c|--clock) shift; TICKS_PER_SEC="-c "$1 ;;
*)
case "$NO_PARAM" in
0) LOG_FILE=$1 ;;
1) ELF_FILE=$1 ;;
esac
NO_PARAM=$(($NO_PARAM+1))
;;
esac
shift
done
if [ -z $LOG_FILE ] || [ -z $ELF_FILE ]; then
usage
exit
fi
if [ "$TYPE" == "$TEXT" ]; then
$TOP_DIR/profile_kernel.py $TICKS_PER_SEC $LOG_FILE $ELF_FILE
exit
else
$TOP_DIR/profile_kernel.py --ftrace $TICKS_PER_SEC $LOG_FILE $ELF_FILE > tmp1.txt
fi
$TOP_DIR/contextswitch_parse.py tmp1.txt > tmp2.txt
if [ "$TS_END" -gt "$TS_START" ] ; then
ARG1="-s "$TS_START" -e "$TS_END
else
ARG1=""
fi
if [ "$TYPE" == "$RUN" ]; then
$TOP_DIR/contextswitch_run.py $ARG1 --nocoreload tmp2.txt
elif [ "$TYPE" == "$TOTAL" ]; then
$TOP_DIR/contextswitch_totals.py $ARG1 tmp2.txt
elif [ "$TYPE" == "$SLICE" ]; then
ARG2="-t "$PERIOD
$TOP_DIR/contextswitch_timeslice.py $ARG1 $ARG2 tmp2.txt
fi
rm -rf tmp1.txt tmp2.txt