]> git.proxmox.com Git - mirror_zfs-debian.git/blob - scripts/zpios-profile/zpios-profile-disk.sh
Add initial autoconf products
[mirror_zfs-debian.git] / scripts / zpios-profile / zpios-profile-disk.sh
1 #!/bin/bash
2 #
3 # /proc/diskinfo <after skipping major/minor>
4 # Field 1 -- device name
5 # Field 2 -- # of reads issued
6 # Field 3 -- # of reads merged
7 # Field 4 -- # of sectors read
8 # Field 5 -- # of milliseconds spent reading
9 # Field 6 -- # of writes completed
10 # Field 7 -- # of writes merged
11 # Field 8 -- # of sectors written
12 # Field 9 -- # of milliseconds spent writing
13 # Field 10 -- # of I/Os currently in progress
14 # Field 11 -- # of milliseconds spent doing I/Os
15 # Field 12 -- weighted # of milliseconds spent doing I/Os
16
17 PROG=zpios-profile-disk.sh
18
19 RUN_PIDS=${0}
20 RUN_LOG_DIR=${1}
21 RUN_ID=${2}
22
23 create_table() {
24 local FIELD=$1
25 local ROW_M=()
26 local ROW_N=()
27 local HEADER=1
28 local STEP=1
29
30 for DISK_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/disk-[0-9]*`; do
31 ROW_M=( ${ROW_N[@]} )
32 ROW_N=( `cat ${DISK_FILE} | grep sd | cut -c11- | cut -f${FIELD} -d' ' | tr "\n" "\t"` )
33
34 if [ $HEADER -eq 1 ]; then
35 echo -n "step, "
36 cat ${DISK_FILE} | grep sd | cut -c11- | cut -f1 -d' ' | tr "\n" ", "
37 echo "total"
38 HEADER=0
39 fi
40
41 if [ ${#ROW_M[@]} -eq 0 ]; then
42 continue
43 fi
44
45 if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then
46 echo "Badly formatted profile data in ${DISK_FILE}"
47 break
48 fi
49
50 TOTAL=0
51 echo -n "${STEP}, "
52 for (( i=0; i<${#ROW_N[@]}; i++ )); do
53 DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc`
54 let TOTAL=${TOTAL}+${DELTA}
55 echo -n "${DELTA}, "
56 done
57 echo "${TOTAL}, "
58
59 let STEP=${STEP}+1
60 done
61 }
62
63 create_table_mbs() {
64 local FIELD=$1
65 local TIME=$2
66 local ROW_M=()
67 local ROW_N=()
68 local HEADER=1
69 local STEP=1
70
71 for DISK_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/disk-[0-9]*`; do
72 ROW_M=( ${ROW_N[@]} )
73 ROW_N=( `cat ${DISK_FILE} | grep sd | cut -c11- | cut -f${FIELD} -d' ' | tr "\n" "\t"` )
74
75 if [ $HEADER -eq 1 ]; then
76 echo -n "step, "
77 cat ${DISK_FILE} | grep sd | cut -c11- | cut -f1 -d' ' | tr "\n" ", "
78 echo "total"
79 HEADER=0
80 fi
81
82 if [ ${#ROW_M[@]} -eq 0 ]; then
83 continue
84 fi
85
86 if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then
87 echo "Badly formatted profile data in ${DISK_FILE}"
88 break
89 fi
90
91 TOTAL=0
92 echo -n "${STEP}, "
93 for (( i=0; i<${#ROW_N[@]}; i++ )); do
94 DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc`
95 MBS=`echo "scale=2; ((${DELTA}*512)/${TIME})/(1024*1024)" | bc`
96 TOTAL=`echo "scale=2; ${TOTAL}+${MBS}" | bc`
97 echo -n "${MBS}, "
98 done
99 echo "${TOTAL}, "
100
101 let STEP=${STEP}+1
102 done
103 }
104
105 echo
106 echo "Reads issued per device"
107 create_table 2
108 echo
109 echo "Reads merged per device"
110 create_table 3
111 echo
112 echo "Sectors read per device"
113 create_table 4
114 echo "MB/s per device"
115 create_table_mbs 4 3
116
117 echo
118 echo "Writes issued per device"
119 create_table 6
120 echo
121 echo "Writes merged per device"
122 create_table 7
123 echo
124 echo "Sectors written per device"
125 create_table 8
126 echo "MB/s per device"
127 create_table_mbs 8 3
128
129 exit 0