File: fio_generate_plots

package info (click to toggle)
fio 3.39-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 12,924 kB
  • sloc: ansic: 80,931; python: 9,252; sh: 5,843; makefile: 813; yacc: 204; lex: 184
file content (132 lines) | stat: -rwxr-xr-x 4,193 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/sh
#
# This script is an almost total rewrite by Louwrentius 
# of the original fio_generate_plots script provided as part of the FIO storage
# benchmark utiliy. I only retained how GNUplot is used to generate graphs, as
# that is something I know nothing about.
#
# The script uses the files generated by FIO to create nice graphs in the
# SVG format. This output format is supported by most modern browsers and
# allows resolution independent graphs to be generated.
#
# This script supports GNUPLOT 4.4 and higher.
# 
# Version 1.0 @ 20121231
#
# 
#

if [ -z "$1" ]; then
	echo "Usage: fio_generate_plots subtitle [xres yres]"
	exit 1
fi

GNUPLOT=$(command -v gnuplot)
if [ ! -x "$GNUPLOT" ]
then
	echo You need gnuplot installed to generate graphs
	exit 1
fi

TITLE="$1"

# set resolution
if [ ! -z "$2" ] && [ ! -z "$3" ]
then
	XRES="$2"
	YRES="$3"
else
	XRES=1280
	YRES=768
fi

if [ -z "$SAMPLE_DURATION" ]
then
    SAMPLE_DURATION="*"
fi

DEFAULT_GRID_LINE_TYPE=3
DEFAULT_LINE_WIDTH=2
DEFAULT_LINE_COLORS="
set object 1 rectangle from screen 0,0 to screen 1,1 fillcolor rgb\"#ffffff\" behind 
set style line 1 lc rgb \"#E41A1C\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 2 lc rgb \"#377EB8\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 3 lc rgb \"#4DAF4A\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 4 lc rgb \"#984EA3\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 5 lc rgb \"#FF7F00\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 6 lc rgb \"#DADA33\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 7 lc rgb \"#A65628\" lw $DEFAULT_LINE_WIDTH lt 1;
set style line 20 lc rgb \"#000000\" lt $DEFAULT_GRID_LINE_TYPE lw $DEFAULT_LINE_WIDTH;
"

DEFAULT_TERMINAL="set terminal svg enhanced dashed size $XRES,$YRES dynamic"
DEFAULT_TITLE_FONT="\"Helvetica,28\""
DEFAULT_AXIS_FONT="\"Helvetica,14\""
DEFAULT_AXIS_LABEL_FONT="\"Helvetica,16\""
DEFAULT_XLABEL="set xlabel \"Time (sec)\" font $DEFAULT_AXIS_LABEL_FONT"
DEFAULT_XTIC="set xtics font $DEFAULT_AXIS_FONT"
DEFAULT_YTIC="set ytics font $DEFAULT_AXIS_FONT"
DEFAULT_MXTIC="set mxtics 0"
DEFAULT_MYTIC="set mytics 2"
DEFAULT_XRANGE="set xrange [0:$SAMPLE_DURATION]"
DEFAULT_YRANGE="set yrange [0:*]"
DEFAULT_GRID="set grid ls 20"
DEFAULT_KEY="set key outside bottom center ; set key box enhanced spacing 2.0 samplen 3 horizontal width 4 height 1.2 "
DEFAULT_SOURCE="set label 30 \"Data source: http://example.com\" font $DEFAULT_AXIS_FONT tc rgb \"#00000f\" at screen 0.976,0.175 right"
DEFAULT_OPTS="$DEFAULT_LINE_COLORS ; $DEFAULT_GRID_LINE ; $DEFAULT_GRID ; $DEFAULT_GRID_MINOR ; $DEFAULT_XLABEL ; $DEFAULT_XRANGE ; $DEFAULT_YRANGE ; $DEFAULT_XTIC ;  $DEFAULT_YTIC ; $DEFAULT_MXTIC ; $DEFAULT_MYTIC ; $DEFAULT_KEY ; $DEFAULT_TERMINAL ; $DEFAULT_SOURCE"

plot () {
    
    if [ -z "$TITLE" ]
    then	
        PLOT_TITLE=" set title \"$1\" font $DEFAULT_TITLE_FONT"
    else
        PLOT_TITLE=" set title \"$TITLE\\\n\\\n{/*0.6 "$1"}\" font $DEFAULT_TITLE_FONT"
    fi
    FILETYPE="$2"
    YAXIS="set ylabel \"$3\" font $DEFAULT_AXIS_LABEL_FONT"
    SCALE=$4

    echo "Title: $PLOT_TITLE"
    echo "File type: $FILETYPE"
    echo "yaxis: $YAXIS"

    i=0
    
    for x in *_"$FILETYPE".log *_"$FILETYPE".*.log
    do
        if [ -e "$x" ]; then
            i=$((i+1))
            PT=$(echo $x | sed 's/\(.*\)_'$FILETYPE'\(.*\).log$/\1\2/')
            if [ ! -z "$PLOT_LINE" ]
            then
                PLOT_LINE=$PLOT_LINE", "
            fi

            DEPTH=$(echo $PT | cut -d "-" -f 4)
            PLOT_LINE=$PLOT_LINE"'$x' using (\$1/1000):(\$2/$SCALE) title \"Queue depth $DEPTH\" with lines ls $i" 
        fi
    done

    if [ $i -eq 0 ]; then
       echo "No log files found"
       exit 1
    fi

    OUTPUT="set output \"$TITLE-$FILETYPE.svg\" "

    echo " $PLOT_TITLE ; $YAXIS ; $DEFAULT_OPTS ; show style lines ; $OUTPUT ; plot "  $PLOT_LINE  | $GNUPLOT -
    unset PLOT_LINE
}

#
# plot <sub title> <file name tag> <y axis label> <y axis scale>
#

plot "I/O Latency" lat "Time (msec)" 1000000
plot "I/O Operations Per Second" iops "IOPS" 1
plot "I/O Submission Latency" slat "Time (μsec)" 1000
plot "I/O Completion Latency" clat "Time (msec)" 1000000
plot "I/O Bandwidth" bw "Throughput (KB/s)" 1