summaryrefslogtreecommitdiffstats
path: root/scripts/zpios-profile/zpios-profile-disk.sh
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/zpios-profile/zpios-profile-disk.sh')
-rwxr-xr-xscripts/zpios-profile/zpios-profile-disk.sh129
1 files changed, 129 insertions, 0 deletions
diff --git a/scripts/zpios-profile/zpios-profile-disk.sh b/scripts/zpios-profile/zpios-profile-disk.sh
new file mode 100755
index 000000000..b56ee1ee4
--- /dev/null
+++ b/scripts/zpios-profile/zpios-profile-disk.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+#
+# /proc/diskinfo <after skipping major/minor>
+# Field 1 -- device name
+# Field 2 -- # of reads issued
+# Field 3 -- # of reads merged
+# Field 4 -- # of sectors read
+# Field 5 -- # of milliseconds spent reading
+# Field 6 -- # of writes completed
+# Field 7 -- # of writes merged
+# Field 8 -- # of sectors written
+# Field 9 -- # of milliseconds spent writing
+# Field 10 -- # of I/Os currently in progress
+# Field 11 -- # of milliseconds spent doing I/Os
+# Field 12 -- weighted # of milliseconds spent doing I/Os
+
+PROG=zpios-profile-disk.sh
+
+RUN_PIDS=${0}
+RUN_LOG_DIR=${1}
+RUN_ID=${2}
+
+create_table() {
+ local FIELD=$1
+ local ROW_M=()
+ local ROW_N=()
+ local HEADER=1
+ local STEP=1
+
+ for DISK_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/disk-[0-9]*`; do
+ ROW_M=( ${ROW_N[@]} )
+ ROW_N=( `cat ${DISK_FILE} | grep sd | cut -c11- | cut -f${FIELD} -d' ' | tr "\n" "\t"` )
+
+ if [ $HEADER -eq 1 ]; then
+ echo -n "step, "
+ cat ${DISK_FILE} | grep sd | cut -c11- | cut -f1 -d' ' | tr "\n" ", "
+ echo "total"
+ HEADER=0
+ fi
+
+ if [ ${#ROW_M[@]} -eq 0 ]; then
+ continue
+ fi
+
+ if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then
+ echo "Badly formatted profile data in ${DISK_FILE}"
+ break
+ fi
+
+ TOTAL=0
+ echo -n "${STEP}, "
+ for (( i=0; i<${#ROW_N[@]}; i++ )); do
+ DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc`
+ let TOTAL=${TOTAL}+${DELTA}
+ echo -n "${DELTA}, "
+ done
+ echo "${TOTAL}, "
+
+ let STEP=${STEP}+1
+ done
+}
+
+create_table_mbs() {
+ local FIELD=$1
+ local TIME=$2
+ local ROW_M=()
+ local ROW_N=()
+ local HEADER=1
+ local STEP=1
+
+ for DISK_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/disk-[0-9]*`; do
+ ROW_M=( ${ROW_N[@]} )
+ ROW_N=( `cat ${DISK_FILE} | grep sd | cut -c11- | cut -f${FIELD} -d' ' | tr "\n" "\t"` )
+
+ if [ $HEADER -eq 1 ]; then
+ echo -n "step, "
+ cat ${DISK_FILE} | grep sd | cut -c11- | cut -f1 -d' ' | tr "\n" ", "
+ echo "total"
+ HEADER=0
+ fi
+
+ if [ ${#ROW_M[@]} -eq 0 ]; then
+ continue
+ fi
+
+ if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then
+ echo "Badly formatted profile data in ${DISK_FILE}"
+ break
+ fi
+
+ TOTAL=0
+ echo -n "${STEP}, "
+ for (( i=0; i<${#ROW_N[@]}; i++ )); do
+ DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc`
+ MBS=`echo "scale=2; ((${DELTA}*512)/${TIME})/(1024*1024)" | bc`
+ TOTAL=`echo "scale=2; ${TOTAL}+${MBS}" | bc`
+ echo -n "${MBS}, "
+ done
+ echo "${TOTAL}, "
+
+ let STEP=${STEP}+1
+ done
+}
+
+echo
+echo "Reads issued per device"
+create_table 2
+echo
+echo "Reads merged per device"
+create_table 3
+echo
+echo "Sectors read per device"
+create_table 4
+echo "MB/s per device"
+create_table_mbs 4 3
+
+echo
+echo "Writes issued per device"
+create_table 6
+echo
+echo "Writes merged per device"
+create_table 7
+echo
+echo "Sectors written per device"
+create_table 8
+echo "MB/s per device"
+create_table_mbs 8 3
+
+exit 0