linux/tools/power/cpupower/bench/cpufreq-bench_plot.sh
Dominik Brodowski 7fe2f6399a cpupowerutils - cpufrequtils extended with quite some features
CPU power consumption vs performance tuning is no longer
limited to CPU frequency switching anymore: deep sleep states,
traditional dynamic frequency scaling and hidden turbo/boost
frequencies are tied close together and depend on each other.
The first two exist on different architectures like PPC, Itanium and
ARM, the latter (so far) only on X86. On X86 the APU (CPU+GPU) will
only run most efficiently if CPU and GPU has proper power management
in place.

Users and Developers want to have *one* tool to get an overview what
their system supports and to monitor and debug CPU power management
in detail. The tool should compile and work on as many architectures
as possible.

Once this tool stabilizes a bit, it is intended to replace the
Intel-specific tools in tools/power/x86

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
2011-07-29 18:35:36 +02:00

104 lines
3.1 KiB
Bash

#!/bin/bash
# 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 2, 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
# Author/Copyright(c): 2009, Thomas Renninger <trenn@suse.de>, Novell Inc.
# Helper script to easily create nice plots of your cpufreq-bench results
dir=`mktemp -d`
output_file="cpufreq-bench.png"
global_title="cpufreq-bench plot"
picture_type="jpeg"
file[0]=""
function usage()
{
echo "cpufreq-bench_plot.sh [OPTIONS] logfile [measure_title] [logfile [measure_title]] ...]"
echo
echo "Options"
echo " -o output_file"
echo " -t global_title"
echo " -p picture_type [jpeg|gif|png|postscript|...]"
exit 1
}
if [ $# -eq 0 ];then
echo "No benchmark results file provided"
echo
usage
fi
while getopts o:t:p: name ; do
case $name in
o)
output_file="$OPTARG".$picture_type
;;
t)
global_title="$OPTARG"
;;
p)
picture_type="$OPTARG"
;;
?)
usage
;;
esac
done
shift $(($OPTIND -1))
plots=0
while [ "$1" ];do
if [ ! -f "$1" ];then
echo "File $1 does not exist"
usage
fi
file[$plots]="$1"
title[$plots]="$2"
# echo "File: ${file[$plots]} - ${title[plots]}"
shift;shift
plots=$((plots + 1))
done
echo "set terminal $picture_type" >> $dir/plot_script.gpl
echo "set output \"$output_file\"" >> $dir/plot_script.gpl
echo "set title \"$global_title\"" >> $dir/plot_script.gpl
echo "set xlabel \"sleep/load time\"" >> $dir/plot_script.gpl
echo "set ylabel \"Performance (%)\"" >> $dir/plot_script.gpl
for((plot=0;plot<$plots;plot++));do
# Sanity check
###### I am to dump to get this redirected to stderr/stdout in one awk call... #####
cat ${file[$plot]} |grep -v "^#" |awk '{if ($2 != $3) printf("Error in measure %d:Load time %s does not equal sleep time %s, plot will not be correct\n", $1, $2, $3); ERR=1}'
###### I am to dump to get this redirected in one awk call... #####
# Parse out load time (which must be equal to sleep time for a plot), divide it by 1000
# to get ms and parse out the performance in percentage and write it to a temp file for plotting
cat ${file[$plot]} |grep -v "^#" |awk '{printf "%lu %.1f\n",$2/1000, $6}' >$dir/data_$plot
if [ $plot -eq 0 ];then
echo -n "plot " >> $dir/plot_script.gpl
fi
echo -n "\"$dir/data_$plot\" title \"${title[$plot]}\" with lines" >> $dir/plot_script.gpl
if [ $(($plot + 1)) -ne $plots ];then
echo -n ", " >> $dir/plot_script.gpl
fi
done
echo >> $dir/plot_script.gpl
gnuplot $dir/plot_script.gpl
rm -r $dir