162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci# Testing and monitor the cpu desire performance, frequency, load, 562306a36Sopenharmony_ci# power consumption and throughput etc.when this script trigger tbench 662306a36Sopenharmony_ci# test cases. 762306a36Sopenharmony_ci# 1) Run tbench benchmark on specific governors, ondemand or schedutil. 862306a36Sopenharmony_ci# 2) Run tbench benchmark comparative test on acpi-cpufreq kernel driver. 962306a36Sopenharmony_ci# 3) Get desire performance, frequency, load by perf. 1062306a36Sopenharmony_ci# 4) Get power consumption and throughput by amd_pstate_trace.py. 1162306a36Sopenharmony_ci# 5) Analyse test results and save it in file selftest.tbench.csv. 1262306a36Sopenharmony_ci# 6) Plot png images about performance, energy and performance per watt for each test. 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci# protect against multiple inclusion 1562306a36Sopenharmony_ciif [ $FILE_TBENCH ]; then 1662306a36Sopenharmony_ci return 0 1762306a36Sopenharmony_cielse 1862306a36Sopenharmony_ci FILE_TBENCH=DONE 1962306a36Sopenharmony_cifi 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_citbench_governors=("ondemand" "schedutil") 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci# $1: governor, $2: round, $3: des-perf, $4: freq, $5: load, $6: performance, $7: energy, $8: performance per watt 2462306a36Sopenharmony_cistore_csv_tbench() 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci echo "$1, $2, $3, $4, $5, $6, $7, $8" | tee -a $OUTFILE_TBENCH.csv > /dev/null 2>&1 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci# clear some special lines 3062306a36Sopenharmony_ciclear_csv_tbench() 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci if [ -f $OUTFILE_TBENCH.csv ]; then 3362306a36Sopenharmony_ci sed -i '/Comprison(%)/d' $OUTFILE_TBENCH.csv 3462306a36Sopenharmony_ci sed -i "/$(scaling_name)/d" $OUTFILE_TBENCH.csv 3562306a36Sopenharmony_ci fi 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci# find string $1 in file csv and get the number of lines 3962306a36Sopenharmony_ciget_lines_csv_tbench() 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci if [ -f $OUTFILE_TBENCH.csv ]; then 4262306a36Sopenharmony_ci return `grep -c "$1" $OUTFILE_TBENCH.csv` 4362306a36Sopenharmony_ci else 4462306a36Sopenharmony_ci return 0 4562306a36Sopenharmony_ci fi 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cipre_clear_tbench() 4962306a36Sopenharmony_ci{ 5062306a36Sopenharmony_ci post_clear_tbench 5162306a36Sopenharmony_ci rm -rf tbench_*.png 5262306a36Sopenharmony_ci clear_csv_tbench 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cipost_clear_tbench() 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci rm -rf results/tracer-tbench* 5862306a36Sopenharmony_ci rm -rf $OUTFILE_TBENCH*.log 5962306a36Sopenharmony_ci rm -rf $OUTFILE_TBENCH*.result 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci} 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci# $1: governor, $2: loop 6462306a36Sopenharmony_cirun_tbench() 6562306a36Sopenharmony_ci{ 6662306a36Sopenharmony_ci echo "Launching amd pstate tracer for $1 #$2 tracer_interval: $TRACER_INTERVAL" 6762306a36Sopenharmony_ci ./amd_pstate_trace.py -n tracer-tbench-$1-$2 -i $TRACER_INTERVAL > /dev/null 2>&1 & 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci printf "Test tbench for $1 #$2 time_limit: $TIME_LIMIT procs_num: $PROCESS_NUM\n" 7062306a36Sopenharmony_ci tbench_srv > /dev/null 2>&1 & 7162306a36Sopenharmony_ci perf stat -a --per-socket -I 1000 -e power/energy-pkg/ tbench -t $TIME_LIMIT $PROCESS_NUM > $OUTFILE_TBENCH-perf-$1-$2.log 2>&1 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci pid=`pidof tbench_srv` 7462306a36Sopenharmony_ci kill $pid 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci for job in `jobs -p` 7762306a36Sopenharmony_ci do 7862306a36Sopenharmony_ci echo "Waiting for job id $job" 7962306a36Sopenharmony_ci wait $job 8062306a36Sopenharmony_ci done 8162306a36Sopenharmony_ci} 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci# $1: governor, $2: loop 8462306a36Sopenharmony_ciparse_tbench() 8562306a36Sopenharmony_ci{ 8662306a36Sopenharmony_ci awk '{print $5}' results/tracer-tbench-$1-$2/cpu.csv | sed -e '1d' | sed s/,// > $OUTFILE_TBENCH-des-perf-$1-$2.log 8762306a36Sopenharmony_ci avg_des_perf=$(awk 'BEGIN {i=0; sum=0};{i++; sum += $1};END {print sum/i}' $OUTFILE_TBENCH-des-perf-$1-$2.log) 8862306a36Sopenharmony_ci printf "Tbench-$1-#$2 avg des perf: $avg_des_perf\n" | tee -a $OUTFILE_TBENCH.result 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci awk '{print $7}' results/tracer-tbench-$1-$2/cpu.csv | sed -e '1d' | sed s/,// > $OUTFILE_TBENCH-freq-$1-$2.log 9162306a36Sopenharmony_ci avg_freq=$(awk 'BEGIN {i=0; sum=0};{i++; sum += $1};END {print sum/i}' $OUTFILE_TBENCH-freq-$1-$2.log) 9262306a36Sopenharmony_ci printf "Tbench-$1-#$2 avg freq: $avg_freq\n" | tee -a $OUTFILE_TBENCH.result 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci awk '{print $11}' results/tracer-tbench-$1-$2/cpu.csv | sed -e '1d' | sed s/,// > $OUTFILE_TBENCH-load-$1-$2.log 9562306a36Sopenharmony_ci avg_load=$(awk 'BEGIN {i=0; sum=0};{i++; sum += $1};END {print sum/i}' $OUTFILE_TBENCH-load-$1-$2.log) 9662306a36Sopenharmony_ci printf "Tbench-$1-#$2 avg load: $avg_load\n" | tee -a $OUTFILE_TBENCH.result 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci grep Throughput $OUTFILE_TBENCH-perf-$1-$2.log | awk '{print $2}' > $OUTFILE_TBENCH-throughput-$1-$2.log 9962306a36Sopenharmony_ci tp_sum=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum}' $OUTFILE_TBENCH-throughput-$1-$2.log) 10062306a36Sopenharmony_ci printf "Tbench-$1-#$2 throughput(MB/s): $tp_sum\n" | tee -a $OUTFILE_TBENCH.result 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci grep Joules $OUTFILE_TBENCH-perf-$1-$2.log | awk '{print $4}' > $OUTFILE_TBENCH-energy-$1-$2.log 10362306a36Sopenharmony_ci en_sum=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum}' $OUTFILE_TBENCH-energy-$1-$2.log) 10462306a36Sopenharmony_ci printf "Tbench-$1-#$2 power consumption(J): $en_sum\n" | tee -a $OUTFILE_TBENCH.result 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci # Permance is throughput per second, denoted T/t, where T is throught rendered in t seconds. 10762306a36Sopenharmony_ci # It is well known that P=E/t, where P is power measured in watts(W), E is energy measured in joules(J), 10862306a36Sopenharmony_ci # and t is time measured in seconds(s). This means that performance per watt becomes 10962306a36Sopenharmony_ci # T/t T/t T 11062306a36Sopenharmony_ci # --- = --- = --- 11162306a36Sopenharmony_ci # P E/t E 11262306a36Sopenharmony_ci # with unit given by MB per joule. 11362306a36Sopenharmony_ci ppw=`echo "scale=4;($TIME_LIMIT-1)*$tp_sum/$en_sum" | bc | awk '{printf "%.4f", $0}'` 11462306a36Sopenharmony_ci printf "Tbench-$1-#$2 performance per watt(MB/J): $ppw\n" | tee -a $OUTFILE_TBENCH.result 11562306a36Sopenharmony_ci printf "\n" | tee -a $OUTFILE_TBENCH.result 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci driver_name=`echo $(scaling_name)` 11862306a36Sopenharmony_ci store_csv_tbench "$driver_name-$1" $2 $avg_des_perf $avg_freq $avg_load $tp_sum $en_sum $ppw 11962306a36Sopenharmony_ci} 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci# $1: governor 12262306a36Sopenharmony_ciloop_tbench() 12362306a36Sopenharmony_ci{ 12462306a36Sopenharmony_ci printf "\nTbench total test times is $LOOP_TIMES for $1\n\n" 12562306a36Sopenharmony_ci for i in `seq 1 $LOOP_TIMES` 12662306a36Sopenharmony_ci do 12762306a36Sopenharmony_ci run_tbench $1 $i 12862306a36Sopenharmony_ci parse_tbench $1 $i 12962306a36Sopenharmony_ci done 13062306a36Sopenharmony_ci} 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci# $1: governor 13362306a36Sopenharmony_cigather_tbench() 13462306a36Sopenharmony_ci{ 13562306a36Sopenharmony_ci printf "Tbench test result for $1 (loops:$LOOP_TIMES)" | tee -a $OUTFILE_TBENCH.result 13662306a36Sopenharmony_ci printf "\n--------------------------------------------------\n" | tee -a $OUTFILE_TBENCH.result 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci grep "Tbench-$1-#" $OUTFILE_TBENCH.result | grep "avg des perf:" | awk '{print $NF}' > $OUTFILE_TBENCH-des-perf-$1.log 13962306a36Sopenharmony_ci avg_des_perf=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum/'$LOOP_TIMES'}' $OUTFILE_TBENCH-des-perf-$1.log) 14062306a36Sopenharmony_ci printf "Tbench-$1 avg des perf: $avg_des_perf\n" | tee -a $OUTFILE_TBENCH.result 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci grep "Tbench-$1-#" $OUTFILE_TBENCH.result | grep "avg freq:" | awk '{print $NF}' > $OUTFILE_TBENCH-freq-$1.log 14362306a36Sopenharmony_ci avg_freq=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum/'$LOOP_TIMES'}' $OUTFILE_TBENCH-freq-$1.log) 14462306a36Sopenharmony_ci printf "Tbench-$1 avg freq: $avg_freq\n" | tee -a $OUTFILE_TBENCH.result 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci grep "Tbench-$1-#" $OUTFILE_TBENCH.result | grep "avg load:" | awk '{print $NF}' > $OUTFILE_TBENCH-load-$1.log 14762306a36Sopenharmony_ci avg_load=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum/'$LOOP_TIMES'}' $OUTFILE_TBENCH-load-$1.log) 14862306a36Sopenharmony_ci printf "Tbench-$1 avg load: $avg_load\n" | tee -a $OUTFILE_TBENCH.result 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci grep "Tbench-$1-#" $OUTFILE_TBENCH.result | grep "throughput(MB/s):" | awk '{print $NF}' > $OUTFILE_TBENCH-throughput-$1.log 15162306a36Sopenharmony_ci tp_sum=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum}' $OUTFILE_TBENCH-throughput-$1.log) 15262306a36Sopenharmony_ci printf "Tbench-$1 total throughput(MB/s): $tp_sum\n" | tee -a $OUTFILE_TBENCH.result 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci avg_tp=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum/'$LOOP_TIMES'}' $OUTFILE_TBENCH-throughput-$1.log) 15562306a36Sopenharmony_ci printf "Tbench-$1 avg throughput(MB/s): $avg_tp\n" | tee -a $OUTFILE_TBENCH.result 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci grep "Tbench-$1-#" $OUTFILE_TBENCH.result | grep "power consumption(J):" | awk '{print $NF}' > $OUTFILE_TBENCH-energy-$1.log 15862306a36Sopenharmony_ci en_sum=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum}' $OUTFILE_TBENCH-energy-$1.log) 15962306a36Sopenharmony_ci printf "Tbench-$1 total power consumption(J): $en_sum\n" | tee -a $OUTFILE_TBENCH.result 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci avg_en=$(awk 'BEGIN {sum=0};{sum += $1};END {print sum/'$LOOP_TIMES'}' $OUTFILE_TBENCH-energy-$1.log) 16262306a36Sopenharmony_ci printf "Tbench-$1 avg power consumption(J): $avg_en\n" | tee -a $OUTFILE_TBENCH.result 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci # Permance is throughput per second, denoted T/t, where T is throught rendered in t seconds. 16562306a36Sopenharmony_ci # It is well known that P=E/t, where P is power measured in watts(W), E is energy measured in joules(J), 16662306a36Sopenharmony_ci # and t is time measured in seconds(s). This means that performance per watt becomes 16762306a36Sopenharmony_ci # T/t T/t T 16862306a36Sopenharmony_ci # --- = --- = --- 16962306a36Sopenharmony_ci # P E/t E 17062306a36Sopenharmony_ci # with unit given by MB per joule. 17162306a36Sopenharmony_ci ppw=`echo "scale=4;($TIME_LIMIT-1)*$avg_tp/$avg_en" | bc | awk '{printf "%.4f", $0}'` 17262306a36Sopenharmony_ci printf "Tbench-$1 performance per watt(MB/J): $ppw\n" | tee -a $OUTFILE_TBENCH.result 17362306a36Sopenharmony_ci printf "\n" | tee -a $OUTFILE_TBENCH.result 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_ci driver_name=`echo $(scaling_name)` 17662306a36Sopenharmony_ci store_csv_tbench "$driver_name-$1" "Average" $avg_des_perf $avg_freq $avg_load $avg_tp $avg_en $ppw 17762306a36Sopenharmony_ci} 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci# $1: base scaling_driver $2: base governor $3: comparative scaling_driver $4: comparative governor 18062306a36Sopenharmony_ci__calc_comp_tbench() 18162306a36Sopenharmony_ci{ 18262306a36Sopenharmony_ci base=`grep "$1-$2" $OUTFILE_TBENCH.csv | grep "Average"` 18362306a36Sopenharmony_ci comp=`grep "$3-$4" $OUTFILE_TBENCH.csv | grep "Average"` 18462306a36Sopenharmony_ci 18562306a36Sopenharmony_ci if [ -n "$base" -a -n "$comp" ]; then 18662306a36Sopenharmony_ci printf "\n==================================================\n" | tee -a $OUTFILE_TBENCH.result 18762306a36Sopenharmony_ci printf "Tbench comparison $1-$2 VS $3-$4" | tee -a $OUTFILE_TBENCH.result 18862306a36Sopenharmony_ci printf "\n==================================================\n" | tee -a $OUTFILE_TBENCH.result 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci # get the base values 19162306a36Sopenharmony_ci des_perf_base=`echo "$base" | awk '{print $3}' | sed s/,//` 19262306a36Sopenharmony_ci freq_base=`echo "$base" | awk '{print $4}' | sed s/,//` 19362306a36Sopenharmony_ci load_base=`echo "$base" | awk '{print $5}' | sed s/,//` 19462306a36Sopenharmony_ci perf_base=`echo "$base" | awk '{print $6}' | sed s/,//` 19562306a36Sopenharmony_ci energy_base=`echo "$base" | awk '{print $7}' | sed s/,//` 19662306a36Sopenharmony_ci ppw_base=`echo "$base" | awk '{print $8}' | sed s/,//` 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci # get the comparative values 19962306a36Sopenharmony_ci des_perf_comp=`echo "$comp" | awk '{print $3}' | sed s/,//` 20062306a36Sopenharmony_ci freq_comp=`echo "$comp" | awk '{print $4}' | sed s/,//` 20162306a36Sopenharmony_ci load_comp=`echo "$comp" | awk '{print $5}' | sed s/,//` 20262306a36Sopenharmony_ci perf_comp=`echo "$comp" | awk '{print $6}' | sed s/,//` 20362306a36Sopenharmony_ci energy_comp=`echo "$comp" | awk '{print $7}' | sed s/,//` 20462306a36Sopenharmony_ci ppw_comp=`echo "$comp" | awk '{print $8}' | sed s/,//` 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci # compare the base and comp values 20762306a36Sopenharmony_ci des_perf_drop=`echo "scale=4;($des_perf_comp-$des_perf_base)*100/$des_perf_base" | bc | awk '{printf "%.4f", $0}'` 20862306a36Sopenharmony_ci printf "Tbench-$1 des perf base: $des_perf_base comprison: $des_perf_comp percent: $des_perf_drop\n" | tee -a $OUTFILE_TBENCH.result 20962306a36Sopenharmony_ci 21062306a36Sopenharmony_ci freq_drop=`echo "scale=4;($freq_comp-$freq_base)*100/$freq_base" | bc | awk '{printf "%.4f", $0}'` 21162306a36Sopenharmony_ci printf "Tbench-$1 freq base: $freq_base comprison: $freq_comp percent: $freq_drop\n" | tee -a $OUTFILE_TBENCH.result 21262306a36Sopenharmony_ci 21362306a36Sopenharmony_ci load_drop=`echo "scale=4;($load_comp-$load_base)*100/$load_base" | bc | awk '{printf "%.4f", $0}'` 21462306a36Sopenharmony_ci printf "Tbench-$1 load base: $load_base comprison: $load_comp percent: $load_drop\n" | tee -a $OUTFILE_TBENCH.result 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci perf_drop=`echo "scale=4;($perf_comp-$perf_base)*100/$perf_base" | bc | awk '{printf "%.4f", $0}'` 21762306a36Sopenharmony_ci printf "Tbench-$1 perf base: $perf_base comprison: $perf_comp percent: $perf_drop\n" | tee -a $OUTFILE_TBENCH.result 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci energy_drop=`echo "scale=4;($energy_comp-$energy_base)*100/$energy_base" | bc | awk '{printf "%.4f", $0}'` 22062306a36Sopenharmony_ci printf "Tbench-$1 energy base: $energy_base comprison: $energy_comp percent: $energy_drop\n" | tee -a $OUTFILE_TBENCH.result 22162306a36Sopenharmony_ci 22262306a36Sopenharmony_ci ppw_drop=`echo "scale=4;($ppw_comp-$ppw_base)*100/$ppw_base" | bc | awk '{printf "%.4f", $0}'` 22362306a36Sopenharmony_ci printf "Tbench-$1 performance per watt base: $ppw_base comprison: $ppw_comp percent: $ppw_drop\n" | tee -a $OUTFILE_TBENCH.result 22462306a36Sopenharmony_ci printf "\n" | tee -a $OUTFILE_TBENCH.result 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci store_csv_tbench "$1-$2 VS $3-$4" "Comprison(%)" "$des_perf_drop" "$freq_drop" "$load_drop" "$perf_drop" "$energy_drop" "$ppw_drop" 22762306a36Sopenharmony_ci fi 22862306a36Sopenharmony_ci} 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci# calculate the comparison(%) 23162306a36Sopenharmony_cicalc_comp_tbench() 23262306a36Sopenharmony_ci{ 23362306a36Sopenharmony_ci # acpi-cpufreq-ondemand VS acpi-cpufreq-schedutil 23462306a36Sopenharmony_ci __calc_comp_tbench ${all_scaling_names[0]} ${tbench_governors[0]} ${all_scaling_names[0]} ${tbench_governors[1]} 23562306a36Sopenharmony_ci 23662306a36Sopenharmony_ci # amd-pstate-ondemand VS amd-pstate-schedutil 23762306a36Sopenharmony_ci __calc_comp_tbench ${all_scaling_names[1]} ${tbench_governors[0]} ${all_scaling_names[1]} ${tbench_governors[1]} 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci # acpi-cpufreq-ondemand VS amd-pstate-ondemand 24062306a36Sopenharmony_ci __calc_comp_tbench ${all_scaling_names[0]} ${tbench_governors[0]} ${all_scaling_names[1]} ${tbench_governors[0]} 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci # acpi-cpufreq-schedutil VS amd-pstate-schedutil 24362306a36Sopenharmony_ci __calc_comp_tbench ${all_scaling_names[0]} ${tbench_governors[1]} ${all_scaling_names[1]} ${tbench_governors[1]} 24462306a36Sopenharmony_ci} 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_ci# $1: file_name, $2: title, $3: ylable, $4: column 24762306a36Sopenharmony_ciplot_png_tbench() 24862306a36Sopenharmony_ci{ 24962306a36Sopenharmony_ci # all_scaling_names[1] all_scaling_names[0] flag 25062306a36Sopenharmony_ci # amd-pstate acpi-cpufreq 25162306a36Sopenharmony_ci # N N 0 25262306a36Sopenharmony_ci # N Y 1 25362306a36Sopenharmony_ci # Y N 2 25462306a36Sopenharmony_ci # Y Y 3 25562306a36Sopenharmony_ci ret=`grep -c "${all_scaling_names[1]}" $OUTFILE_TBENCH.csv` 25662306a36Sopenharmony_ci if [ $ret -eq 0 ]; then 25762306a36Sopenharmony_ci ret=`grep -c "${all_scaling_names[0]}" $OUTFILE_TBENCH.csv` 25862306a36Sopenharmony_ci if [ $ret -eq 0 ]; then 25962306a36Sopenharmony_ci flag=0 26062306a36Sopenharmony_ci else 26162306a36Sopenharmony_ci flag=1 26262306a36Sopenharmony_ci fi 26362306a36Sopenharmony_ci else 26462306a36Sopenharmony_ci ret=`grep -c "${all_scaling_names[0]}" $OUTFILE_TBENCH.csv` 26562306a36Sopenharmony_ci if [ $ret -eq 0 ]; then 26662306a36Sopenharmony_ci flag=2 26762306a36Sopenharmony_ci else 26862306a36Sopenharmony_ci flag=3 26962306a36Sopenharmony_ci fi 27062306a36Sopenharmony_ci fi 27162306a36Sopenharmony_ci 27262306a36Sopenharmony_ci gnuplot << EOF 27362306a36Sopenharmony_ci set term png 27462306a36Sopenharmony_ci set output "$1" 27562306a36Sopenharmony_ci 27662306a36Sopenharmony_ci set title "$2" 27762306a36Sopenharmony_ci set xlabel "Test Cycles (round)" 27862306a36Sopenharmony_ci set ylabel "$3" 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci set grid 28162306a36Sopenharmony_ci set style data histogram 28262306a36Sopenharmony_ci set style fill solid 0.5 border 28362306a36Sopenharmony_ci set boxwidth 0.8 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci if ($flag == 1) { 28662306a36Sopenharmony_ci plot \ 28762306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[0]}-${tbench_governors[0]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[0]}-${tbench_governors[0]}", \ 28862306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[0]}-${tbench_governors[1]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[0]}-${tbench_governors[1]}" 28962306a36Sopenharmony_ci } else { 29062306a36Sopenharmony_ci if ($flag == 2) { 29162306a36Sopenharmony_ci plot \ 29262306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[1]}-${tbench_governors[0]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[1]}-${tbench_governors[0]}", \ 29362306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[1]}-${tbench_governors[1]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[1]}-${tbench_governors[1]}" 29462306a36Sopenharmony_ci } else { 29562306a36Sopenharmony_ci if ($flag == 3 ) { 29662306a36Sopenharmony_ci plot \ 29762306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[0]}-${tbench_governors[0]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[0]}-${tbench_governors[0]}", \ 29862306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[0]}-${tbench_governors[1]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[0]}-${tbench_governors[1]}", \ 29962306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[1]}-${tbench_governors[0]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[1]}-${tbench_governors[0]}", \ 30062306a36Sopenharmony_ci "<(sed -n -e 's/,//g' -e '/${all_scaling_names[1]}-${tbench_governors[1]}/p' $OUTFILE_TBENCH.csv)" using $4:xtic(2) title "${all_scaling_names[1]}-${tbench_governors[1]}" 30162306a36Sopenharmony_ci } 30262306a36Sopenharmony_ci } 30362306a36Sopenharmony_ci } 30462306a36Sopenharmony_ci quit 30562306a36Sopenharmony_ciEOF 30662306a36Sopenharmony_ci} 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ciamd_pstate_tbench() 30962306a36Sopenharmony_ci{ 31062306a36Sopenharmony_ci printf "\n---------------------------------------------\n" 31162306a36Sopenharmony_ci printf "*** Running tbench ***" 31262306a36Sopenharmony_ci printf "\n---------------------------------------------\n" 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci pre_clear_tbench 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci get_lines_csv_tbench "Governor" 31762306a36Sopenharmony_ci if [ $? -eq 0 ]; then 31862306a36Sopenharmony_ci # add titles and unit for csv file 31962306a36Sopenharmony_ci store_csv_tbench "Governor" "Round" "Des-perf" "Freq" "Load" "Performance" "Energy" "Performance Per Watt" 32062306a36Sopenharmony_ci store_csv_tbench "Unit" "" "" "GHz" "" "MB/s" "J" "MB/J" 32162306a36Sopenharmony_ci fi 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci backup_governor 32462306a36Sopenharmony_ci for governor in ${tbench_governors[*]} ; do 32562306a36Sopenharmony_ci printf "\nSpecified governor is $governor\n\n" 32662306a36Sopenharmony_ci switch_governor $governor 32762306a36Sopenharmony_ci loop_tbench $governor 32862306a36Sopenharmony_ci gather_tbench $governor 32962306a36Sopenharmony_ci done 33062306a36Sopenharmony_ci restore_governor 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci plot_png_tbench "tbench_perfromance.png" "Tbench Benchmark Performance" "Performance" 6 33362306a36Sopenharmony_ci plot_png_tbench "tbench_energy.png" "Tbench Benchmark Energy" "Energy (J)" 7 33462306a36Sopenharmony_ci plot_png_tbench "tbench_ppw.png" "Tbench Benchmark Performance Per Watt" "Performance Per Watt (MB/J)" 8 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci calc_comp_tbench 33762306a36Sopenharmony_ci 33862306a36Sopenharmony_ci post_clear_tbench 33962306a36Sopenharmony_ci} 340