diff options
Diffstat (limited to 'qa/130')
-rwxr-xr-x | qa/130 | 136 |
1 files changed, 136 insertions, 0 deletions
@@ -0,0 +1,136 @@ +#! /bin/sh +# PCP QA Test No. 130 +# Compare rpc.server metrics with what nfsstat reports +# +# Copyright (c) 1995-2002 Silicon Graphics, Inc. All Rights Reserved. +# + +seq=`basename $0` +echo "QA output created by $seq" + +# get standard filters +. ./common.product +. ./common.filter + +rm -f $seq.out +if [ $PCP_PLATFORM != irix ] +then + echo "TODO: Need to reconcile rpc.server metrics" >$seq.notrun + echo "$seq: [not run] `cat $seq.notrun`" + exit 0 +fi + +echo checking PCP metric values against: nfsstat -rs + +trap "rm -f $tmp.*; exit" 0 1 2 3 15 +signal=$PCP_BINADM_DIR/pmsignal + +# Don't bother about dupage +# Not very popular and has a bug: pv#652216 + + +cat > $tmp.workload << \EOF +ls -R /hosts/localhost/usr >/dev/null 2>/dev/null & +KILL_PID=$! +sleep 3 +$signal -s KILL $KILL_PID >/dev/null 2>&1 +EOF +chmod u+x $tmp.workload + +$tmp.workload >/dev/null 2>&1 +sleep 2 + +# Example Output: +# > pminfo -f rpc.server +# +# rpc.server.badcalls +# value 0 +# +# rpc.server.badlen +# value 0 +# +# rpc.server.calls +# value 111217257 +# +# rpc.server.duphits +# value 426 +# +# rpc.server.nullrecv +# value 11687166 +# +# rpc.server.xdrcall +# value 0 +# +# > nfsstat -rs +# +# Server RPC: +# calls badcalls nullrecv badlen xdrcall duphits dupage +# 111220948 0 11687178 0 0 426 6198.58 + + +pminfo -f rpc.server >$tmp.pminfo +nfsstat -rs >$tmp.nfs + +# acceptance: abs diff within 10 or diff within 5% +# +cat $tmp.pminfo $tmp.nfs | tee $seq.full | $PCP_AWK_PROG ' +NF == 0 { next } +/Server RPC/ { nfstat=1; next } +/rpc.server/ { # pminfo name + metric = $1 + sub("rpc.server.", "", metric) + next + } +/value/ { # pminfo value + value=$2 + if (metric == "dupage") { + value /= 1000 + } + pminfo[metric] = value + next + } +NF>3 && nfstat==1 && /calls/ { # stat names + for(i=1;i<=NF;i++){ + stat_names[i] = $i + } + next + } +NF>3 && nfstat==1 { # stat values + for(i=1;i<=NF;i++){ + name = stat_names[i] + stat_chk[name] = 1 + stat_value = $i + if (! (name in pminfo) ) { + print name ": not in pminfo output" + next + } + pminfo_value = pminfo[name] + delta = pminfo_value - stat_value + if (delta < 0) delta *= -1 + + ok=0 + if (delta < 10) { + ok = 1 + } + else { + if (stat_value == 0) { + ok = 0 + } else { + pct = delta / stat_value + ok = (0.95 <= pct && pct <= 1.05) + } + } + if (ok) + print name ": OK" + else + print name ": mismatch, pcp=" pminfo_value " nfsstat=" stat_value + } + } +END { + for (name in pminfo) { + if (! (name in stat_chk) ) { + print name ": not in stats output" + } + } + } +' | sort |