]> git.proxmox.com Git - mirror_zfs-debian.git/blame - scripts/zpios-profile/zpios-profile-pids.sh
Add initial autoconf products
[mirror_zfs-debian.git] / scripts / zpios-profile / zpios-profile-pids.sh
CommitLineData
302ef151
BB
1#!/bin/bash
2
3PROG=zpios-profile-pids.sh
4
5RUN_PIDS=${0}
6RUN_LOG_DIR=${1}
7RUN_ID=${2}
8
9ROW_M=()
10ROW_N=()
11ROW_N_SCHED=()
12ROW_N_WAIT=()
13
14HEADER=1
15STEP=1
16
17for PID_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/pids-[0-9]*`; do
18 ROW_M=( ${ROW_N[@]} )
19 ROW_N=( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
20 ROW_N_SCHED=( `cat ${PID_FILE} | cut -f15 -d' ' | tr "\n" "\t"` )
21 ROW_N_WAIT=( `cat ${PID_FILE} | cut -f17 -d' ' | tr "\n" "\t"` )
22 ROW_N_NAMES=( `cat ${PID_FILE} | cut -f2 -d' ' | cut -f2 -d'(' |
23 cut -f1 -d')' | cut -f1 -d'/' | tr "\n" "\t"` )
24
25 for (( i=0; i<${#ROW_N_SCHED[@]}; i++ )); do
26 SUM=`echo "${ROW_N_WAIT[${i}]}+${ROW_N_SCHED[${i}]}" | bc`
27
28 case ${ROW_N_NAMES[${i}]} in
29 zio_taskq) IDX=0;;
30 zio_req_nul) IDX=1;;
31 zio_irq_nul) IDX=2;;
32 zio_req_rd) IDX=3;;
33 zio_irq_rd) IDX=4;;
34 zio_req_wr) IDX=5;;
35 zio_irq_wr) IDX=6;;
36 zio_req_fr) IDX=7;;
37 zio_irq_fr) IDX=8;;
38 zio_req_cm) IDX=9;;
39 zio_irq_cm) IDX=10;;
40 zio_req_ctl) IDX=11;;
41 zio_irq_ctl) IDX=12;;
42 txg_quiesce) IDX=13;;
43 txg_sync) IDX=14;;
44 txg_timelimit) IDX=15;;
45 arc_reclaim) IDX=16;;
46 l2arc_feed) IDX=17;;
47 zpios_io) IDX=18;;
48 *) continue;;
49 esac
50
51 let ROW_N[${IDX}]=${ROW_N[${IDX}]}+${SUM}
52 done
53
54 if [ $HEADER -eq 1 ]; then
55 echo "step, zio_taskq, zio_req_nul, zio_irq_nul, " \
56 "zio_req_rd, zio_irq_rd, zio_req_wr, zio_irq_wr, " \
57 "zio_req_fr, zio_irq_fr, zio_req_cm, zio_irq_cm, " \
58 "zio_req_ctl, zio_irq_ctl, txg_quiesce, txg_sync, " \
59 "txg_timelimit, arc_reclaim, l2arc_feed, zpios_io, " \
60 "idle"
61 HEADER=0
62 fi
63
64 if [ ${#ROW_M[@]} -eq 0 ]; then
65 continue
66 fi
67
68 if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then
69 echo "Badly formatted profile data in ${PID_FILE}"
70 break
71 fi
72
73 # Original values are in jiffies and we expect HZ to be 1000
74 # on most 2.6 systems thus we divide by 10 to get a percentage.
75 IDLE=1000
76 echo -n "${STEP}, "
77 for (( i=0; i<${#ROW_N[@]}; i++ )); do
78 DELTA=`echo "${ROW_N[${i}]}-${ROW_M[${i}]}" | bc`
79 DELTA_PERCENT=`echo "scale=1; ${DELTA}/10" | bc`
80 let IDLE=${IDLE}-${DELTA}
81 echo -n "${DELTA_PERCENT}, "
82 done
83 ILDE_PERCENT=`echo "scale=1; ${IDLE}/10" | bc`
84 echo "${ILDE_PERCENT}"
85
86 let STEP=${STEP}+1
87done
88
89exit
90
91echo
92echo "Percent of total system time per pid"
93for PID_FILE in `ls -r --sort=time --time=ctime ${RUN_LOG_DIR}/${RUN_ID}/pids-[0-9]*`; do
94 ROW_M=( ${ROW_N[@]} )
95 ROW_N_SCHED=( `cat ${PID_FILE} | cut -f15 -d' ' | tr "\n" "\t"` )
96 ROW_N_WAIT=( `cat ${PID_FILE} | cut -f17 -d' ' | tr "\n" "\t"` )
97
98 for (( i=0; i<${#ROW_N_SCHED[@]}; i++ )); do
99 ROW_N[${i}]=`echo "${ROW_N_WAIT[${i}]}+${ROW_N_SCHED[${i}]}" | bc`
100 done
101
102 if [ $HEADER -eq 1 ]; then
103 echo -n "step, "
104 cat ${PID_FILE} | cut -f2 -d' ' | tr "\n" ", "
105 echo
106 HEADER=0
107 fi
108
109 if [ ${#ROW_M[@]} -eq 0 ]; then
110 continue
111 fi
112
113 if [ ${#ROW_M[@]} -ne ${#ROW_N[@]} ]; then
114 echo "Badly formatted profile data in ${PID_FILE}"
115 break
116 fi
117
118 # Original values are in jiffies and we expect HZ to be 1000
119 # on most 2.6 systems thus we divide by 10 to get a percentage.
120 echo -n "${STEP}, "
121 for (( i=0; i<${#ROW_N[@]}; i++ )); do
122 DELTA=`echo "scale=1; (${ROW_N[${i}]}-${ROW_M[${i}]})/10" | bc`
123 echo -n "${DELTA}, "
124 done
125
126 echo
127 let STEP=${STEP}+1
128done
129
130
131exit 0