xref: /OK3568_Linux_fs/kernel/tools/power/cpupower/bench/cpufreq-bench_plot.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-or-later
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun# Author/Copyright(c): 2009, Thomas Renninger <trenn@suse.de>, Novell Inc.
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun# Helper script to easily create nice plots of your cpufreq-bench results
8*4882a593Smuzhiyun
9*4882a593Smuzhiyundir=`mktemp -d`
10*4882a593Smuzhiyunoutput_file="cpufreq-bench.png"
11*4882a593Smuzhiyunglobal_title="cpufreq-bench plot"
12*4882a593Smuzhiyunpicture_type="jpeg"
13*4882a593Smuzhiyunfile[0]=""
14*4882a593Smuzhiyun
15*4882a593Smuzhiyunfunction usage()
16*4882a593Smuzhiyun{
17*4882a593Smuzhiyun    echo "cpufreq-bench_plot.sh [OPTIONS] logfile [measure_title] [logfile [measure_title]] ...]"
18*4882a593Smuzhiyun    echo
19*4882a593Smuzhiyun    echo "Options"
20*4882a593Smuzhiyun    echo "   -o output_file"
21*4882a593Smuzhiyun    echo "   -t global_title"
22*4882a593Smuzhiyun    echo "   -p picture_type [jpeg|gif|png|postscript|...]"
23*4882a593Smuzhiyun    exit 1
24*4882a593Smuzhiyun}
25*4882a593Smuzhiyun
26*4882a593Smuzhiyunif [ $# -eq 0 ];then
27*4882a593Smuzhiyun	echo "No benchmark results file provided"
28*4882a593Smuzhiyun	echo
29*4882a593Smuzhiyun	usage
30*4882a593Smuzhiyunfi
31*4882a593Smuzhiyun
32*4882a593Smuzhiyunwhile getopts o:t:p: name ; do
33*4882a593Smuzhiyun    case $name in
34*4882a593Smuzhiyun	o)
35*4882a593Smuzhiyun	    output_file="$OPTARG".$picture_type
36*4882a593Smuzhiyun	    ;;
37*4882a593Smuzhiyun	t)
38*4882a593Smuzhiyun	    global_title="$OPTARG"
39*4882a593Smuzhiyun	    ;;
40*4882a593Smuzhiyun	p)
41*4882a593Smuzhiyun	    picture_type="$OPTARG"
42*4882a593Smuzhiyun	    ;;
43*4882a593Smuzhiyun        ?)
44*4882a593Smuzhiyun	    usage
45*4882a593Smuzhiyun	    ;;
46*4882a593Smuzhiyun    esac
47*4882a593Smuzhiyundone
48*4882a593Smuzhiyunshift $(($OPTIND -1))
49*4882a593Smuzhiyun
50*4882a593Smuzhiyunplots=0
51*4882a593Smuzhiyunwhile [ "$1" ];do
52*4882a593Smuzhiyun    if [ ! -f "$1" ];then
53*4882a593Smuzhiyun	echo "File $1 does not exist"
54*4882a593Smuzhiyun	usage
55*4882a593Smuzhiyun    fi
56*4882a593Smuzhiyun    file[$plots]="$1"
57*4882a593Smuzhiyun    title[$plots]="$2"
58*4882a593Smuzhiyun    # echo "File: ${file[$plots]} - ${title[plots]}"
59*4882a593Smuzhiyun    shift;shift
60*4882a593Smuzhiyun    plots=$((plots + 1))
61*4882a593Smuzhiyundone
62*4882a593Smuzhiyun
63*4882a593Smuzhiyunecho "set terminal $picture_type"	>> $dir/plot_script.gpl
64*4882a593Smuzhiyunecho "set output \"$output_file\""	>> $dir/plot_script.gpl
65*4882a593Smuzhiyunecho "set title \"$global_title\""	>> $dir/plot_script.gpl
66*4882a593Smuzhiyunecho "set xlabel \"sleep/load time\""	>> $dir/plot_script.gpl
67*4882a593Smuzhiyunecho "set ylabel \"Performance (%)\""	>> $dir/plot_script.gpl
68*4882a593Smuzhiyun
69*4882a593Smuzhiyunfor((plot=0;plot<$plots;plot++));do
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun    # Sanity check
72*4882a593Smuzhiyun    ###### I am to dump to get this redirected to stderr/stdout in one awk call... #####
73*4882a593Smuzhiyun    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}'
74*4882a593Smuzhiyun    ###### I am to dump to get this redirected in one awk call... #####
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun    # Parse out load time (which must be equal to sleep time for a plot), divide it by 1000
77*4882a593Smuzhiyun    # to get ms and parse out the performance in percentage and write it to a temp file for plotting
78*4882a593Smuzhiyun    cat ${file[$plot]} |grep -v "^#" |awk '{printf "%lu %.1f\n",$2/1000, $6}' >$dir/data_$plot
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun    if [ $plot -eq 0 ];then
81*4882a593Smuzhiyun	echo -n "plot " >> $dir/plot_script.gpl
82*4882a593Smuzhiyun    fi
83*4882a593Smuzhiyun    echo -n "\"$dir/data_$plot\" title \"${title[$plot]}\" with lines" >> $dir/plot_script.gpl
84*4882a593Smuzhiyun    if [ $(($plot + 1)) -ne $plots ];then
85*4882a593Smuzhiyun	echo -n ", " >> $dir/plot_script.gpl
86*4882a593Smuzhiyun    fi
87*4882a593Smuzhiyundone
88*4882a593Smuzhiyunecho >> $dir/plot_script.gpl
89*4882a593Smuzhiyun
90*4882a593Smuzhiyungnuplot $dir/plot_script.gpl
91*4882a593Smuzhiyunrm -r $dir
92