aboutsummaryrefslogtreecommitdiffstats
path: root/ci/plot-results.sh
diff options
context:
space:
mode:
Diffstat (limited to 'ci/plot-results.sh')
-rwxr-xr-xci/plot-results.sh146
1 files changed, 146 insertions, 0 deletions
diff --git a/ci/plot-results.sh b/ci/plot-results.sh
new file mode 100755
index 00000000..78855537
--- /dev/null
+++ b/ci/plot-results.sh
@@ -0,0 +1,146 @@
+#!/bin/bash
+#
+# Copyright 2017 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.
+
+# Script for graphical representation of VSPERF results
+#
+# Usage:
+# ./create_graph ["test names" [filter [directory]]]
+#
+# where:
+# "test names" is a !!! quoted !!! string with vsperf testcase names separated
+# by spaces
+# Default value: "phy2phy_tput"
+#
+# "filter" is used to select matching VSPERF results; Its value
+# will be used as PATTERN of grep command executed on selected
+# csv result files.
+# Default value: ",OvsDpdkVhost,"
+#
+# "directory" is a directory name, where vsperf results (i.e. results_*
+# subdirectories) are located
+# Default value: "/tmp"
+#
+# Example of invocation:
+# ./create_graph "phy2phy_tput phy2phy_cont pvp_cont pvvp_cont" ",OvsVanilla,"
+
+TESTS="phy2phy_tput" # default set of TCs to be plotted
+FILTER=",OvsDpdkVhost," # default filter to be applied on matching CSV files
+NUMBER_OF_RESULTS=5 # max number of recent results to be compared in graph
+CSV_RESULT_COL=2 # column number with result to be plotted, e.g. 2 for rx_throughput_fps
+B2B_CSV_RESULT_COL=1 # column number with result to be plotted for back2back TCs
+CSV_PKT_SIZE_COL=12 # column number with frame/packet size
+B2B_CSV_PKT_SIZE_COL=4 # column number with frame/packet size for back2back TCs
+NUMBER_OF_PKT_SIZES=0 # to be detected automatically
+MAX_NUMBER_OF_PKT_SIZES=10
+DIR="/tmp" # directory where vsperf results are stored
+PNG_PREFIX='vsperf_'
+
+function clean_data() {
+ rm -rf *csv
+ rm -rf *plot
+ rm -rf *png
+}
+
+function prepare_data() {
+ for test_name in $TESTS; do
+ FIRST=1
+ CSV_LIST=`grep -r ",${test_name}," ${DIR}/results_*/*csv | grep $FILTER | cut -d':' -f1 | uniq | sort | tail -n ${NUMBER_OF_RESULTS}`
+ for result_file in $CSV_LIST ; do
+ tmp_dir=`dirname $result_file`
+ TIMESTAMP=`basename $tmp_dir | cut -d'_' -f2-`
+ if [ $FIRST -eq 1 ] ; then
+ NUMBER_OF_PKT_SIZES=$((`wc -l ${result_file} | cut -d' ' -f1`-1))
+ if [ $NUMBER_OF_PKT_SIZES -gt $MAX_NUMBER_OF_PKT_SIZES ] ; then
+ NUMBER_OF_PKT_SIZES=$MAX_NUMBER_OF_PKT_SIZES
+ fi
+ if grep back2back ${result_file} &> /dev/null ; then
+ PKT_SIZE_COL=$B2B_CSV_PKT_SIZE_COL
+ RES_COL=$B2B_CSV_RESULT_COL
+ else
+ PKT_SIZE_COL=$CSV_PKT_SIZE_COL
+ RES_COL=$CSV_RESULT_COL
+ fi
+ RESULT_HEADER=`tail -n+2 ${result_file} | head -n ${NUMBER_OF_PKT_SIZES} | cut -d',' -f${PKT_SIZE_COL} | paste -d',' -s`
+ echo "Date/PKT Size [B],${RESULT_HEADER}" > "${test_name}.csv"
+ FIRST=0
+ fi
+ RESULT_4ALL_PKT_SIZES=`tail -n+2 ${result_file} | head -n ${NUMBER_OF_PKT_SIZES} | cut -d',' -f${RES_COL} | paste -d',' -s`
+ echo "${TIMESTAMP},${RESULT_4ALL_PKT_SIZES}" >> "${test_name}.csv"
+ done
+ done
+}
+
+function plot_data() {
+ echo "Created graphs:"
+ SUFFIX=`echo $FILTER | tr -d -C [:alnum:]`
+ for TEST_CSV in *csv; do
+ [ ! -f $TEST_CSV ] && continue
+ TEST_NAME=`basename ${TEST_CSV} .csv`"_${SUFFIX}"
+ OUTPUT="$TEST_NAME.plot"
+ cat > $OUTPUT <<- EOM
+set datafile separator ","
+set xdata time
+set timefmt "%Y-%m-%d_%H:%M:%S"
+set format x "%m-%d"
+set xlabel "date"
+set format y "%8.0f"
+set ylabel "fps"
+set yrange [0:]
+set term png size 1024,768
+EOM
+ iter=0
+ echo "set title \"$TEST_NAME\"" >> $OUTPUT
+ echo "set output \"${PNG_PREFIX}${TEST_NAME}.png\"" >> $OUTPUT
+ echo -n "plot " >> $OUTPUT
+ SEP=""
+ while [ $iter -lt $NUMBER_OF_PKT_SIZES ] ; do
+ COL=$((2+$iter))
+ echo $"$SEP '$TEST_CSV' using 1:$COL with linespoints title columnheader($COL) \\" >> $OUTPUT
+ iter=$(($iter+1))
+ SEP=","
+ done
+ echo -e "\t${PNG_PREFIX}${TEST_NAME}.png"
+ gnuplot $OUTPUT
+ done
+}
+
+#
+# Main body
+#
+
+# override default set of TESTS if specified by 1st parameter
+if [ "$1" != "" ] ; then
+ TESTS="$1"
+fi
+
+# override default filter if specified by 2nd parameter
+if [ "$2" != "" ] ; then
+ FILTER="$2"
+fi
+
+# override default directory with results by 3rd parameter
+if [ "$3" != "" ] ; then
+ DIR="$3"
+fi
+clean_data
+
+echo -e "Plot data input:"
+echo -e "\tTESTS: $TESTS"
+echo -e "\tFilter: $FILTER"
+echo -e "\tResults direcotry: $DIR"
+
+prepare_data
+plot_data