113 lines
2.8 KiB
Bash
Executable File
113 lines
2.8 KiB
Bash
Executable File
#!/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
|