]>
Commit | Line | Data |
---|---|---|
302ef151 BB |
1 | #!/bin/bash |
2 | ||
3 | PROG=zpios-profile-pids.sh | |
4 | ||
5 | RUN_PIDS=${0} | |
6 | RUN_LOG_DIR=${1} | |
7 | RUN_ID=${2} | |
8 | ||
9 | ROW_M=() | |
10 | ROW_N=() | |
11 | ROW_N_SCHED=() | |
12 | ROW_N_WAIT=() | |
13 | ||
14 | HEADER=1 | |
15 | STEP=1 | |
16 | ||
17 | for 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 | |
87 | done | |
88 | ||
89 | exit | |
90 | ||
91 | echo | |
92 | echo "Percent of total system time per pid" | |
93 | for 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 | |
128 | done | |
129 | ||
130 | ||
131 | exit 0 |