1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#! /bin/sh
# PCP QA Test No. 034
# pmlogger with different logging rates
#
# 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
trap "rm -f $tmp.*; exit" 0 1 2 3 15
# real QA test starts here
#
# Logs are built for 70 samples (-s70) (see Makefile)
# The sample metric rates are 100msec, 500msec, 900msec
# Theoretically,....
# This means that (x + x/5 + x/9 = 70) for integral x.
# => 59x = 70 * 45
# => x ~= 53.39
# But x is integral
# So, x = 54, x/5 = 10, x/9 = 6 (54 + 10 + 6 = 70)
#
# Note below that n[i] is not incremented on its 1st occurrence
# => expect values of 53, 9, 5
for arch in tmparch/bar tmparch/mv-bar tmparch/noti-bar
do
echo | tee -a $seq_full
echo "=== $arch ===" | tee -a $seq_full
pmdumplog $arch \
| sed \
-e '/^[0-9]/{
s/[0-9][0-9]* metrics*//
N
s/\n/ /
}' \
-e 's/:/ /g' \
-e '/(pmcd\./d' \
| $PCP_AWK_PROG '
/^[0-9]/ { print $3,$NF }' \
| $PCP_AWK_PROG '
{ if (l[$2] != "") {
delta = $1 - l[$2];
if (delta < 0)
delta += 60;
range = ""
# debugging sanity check ... values more than 10% different to expected
if (delta*1000 < 0.9*$2)
range = " >10% SMALLER than expected lower bound (" 0.9*$2 "msec)"
else if (delta*1000 > 1.1*$2)
range = " >10% LARGER than expected upper bound (" 1.1*$2 "msec)"
print $2 ": @" $1 " delta=" delta*1000 "msec" range >>"'"$seq_full"'"
t[$2] += delta
n[$2]++
}
l[$2] = $1
}
END { for (i in n) {
printf "%d msec requested: ",i
if (n[i] != 0)
av = 1000*t[i]/n[i]
else
av = 0
print i ": sum delta=" t[i] " nobs=" n[i] " av=" av >>"'"$seq_full"'"
if (i == 100) {
if (51 <= n[i] && n[i] <= 54)
printf "no. of samples within range, "
else
printf "no. of samples (%d) unexpected, ",n[i]," not in range 51 ... 54, "
}
else if (i == 500) {
if (9 <= n[i] && n[i] <= 11)
printf "no. of samples within range, "
else
printf "no. of samples (%d) unexpected, ",n[i]," not in range 9 ... 11, "
}
else if (i == 900) {
if (4 <= n[i] && n[i] <= 6)
printf "no. of samples within range, "
else
printf "no. of samples (%d) unexpected, ",n[i]," not in range 4 ... 6, "
}
else
printf "Botch: i=%d unexpected, ",i
if (0.9 * i <= av && av <= 1.1 * i)
printf "avg within 10%% of requested delay\n"
else
printf "avg (%.2f msec) outside 10%% of requested delay range %.2f ... %.2f msec\n",av,0.9*i,1.1*i
}
}' \
| LC_COLLATE=POSIX sort
done
|