File: 1158

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (132 lines) | stat: -rwxr-xr-x 3,458 bytes parent folder | download
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/sh
# PCP QA Test No. 1158
# Exercise the BCC PMDA biotop module - install, remove and values.
#
# Copyright (c) 2018 Andreas Gerstmayr.
#

seq=`basename $0`
echo "QA output created by $seq"

. ./common.bcc

_pmdabcc_check
_bcc_check_ArgString || _notrun "bcc is broken (ArgString bug) on this platform"

# the biotop BCC module uses kprobes that might attach to kernel symbols
# that are not present ... add to the list below as required
#
for symbol in blk_account_io_done
do
    grep " T $symbol\$" /proc/kallsyms >/dev/null || _notrun "kernel does not contain required $symbol symbol"
done

status=1       # failure is the default!
signal=$PCP_BINADM_DIR/pmsignal

write_size=`expr 20 \* 1024 \* 1024` # number of bytes to write into testfile
out_file="$PCP_TMPFILE_DIR/pcp-qa-$seq" # block device required here (no tmpfs)

# tolerance ... +- slop %
#
slop=20

_value_filter_bytes()
{
    cat > $tmp.value
    echo === input to _value_filter >>$seq_full
    cat $tmp.value >> $seq_full

    _found=false
    _values=`awk '/inst.*value/ {print $NF}' $tmp.value`
    for value in $_values
    do
        if _within_tolerance "Expecting ${write_size} +- $slop%" $value ${write_size} $slop%
	then
            echo "found value ${write_size} +- $slop%"
	    _found=true
            break
        fi
    done
    if ! $_found
    then
	echo "Failed to find writer process [expecting ${write_size} +- $slop%] in:"
	cat $tmp.value
    fi
}

_cleanup()
{
    _pmdabcc_cleanup
    $sudo rm -f "$out_file"
}

cat <<EOF >$tmp.conf
# Installed by PCP QA test $seq on `date`
[pmda]
modules = biotop
prefix = bcc.
[biotop]
module = biotop
cluster = 10
interval = 5
debug = True
EOF

_pmdabcc_try_compile $tmp.conf

_prepare_pmda bcc
trap "_cleanup; exit \$status" 0 1 2 3 15
_stop_auto_restart pmcd

# real QA test starts here
_pmdabcc_install <$tmp.conf
_pmdabcc_wait_for_metric

# Generate system activity for the BCC biotop module
echo Started dd at $(date) >> $seq_full
dd if=/dev/zero of=${out_file} bs=${write_size} count=1 oflag=direct 2>>$seq_full

# wait until PMDA refreshes BPF table containing dd
_pmdabcc_wait_for_value bcc.proc.io.perdev.comm '("dd"|"dmcrypt_write/\d+")'

echo "=== report metric values for pid ==="
pminfo -dfmtT bcc.proc.io.perdev.pid 2>&1 | tee -a $seq_full \
| _value_filter_nonzero

echo "=== report metric values for comm ==="
pminfo -dfmtT bcc.proc.io.perdev.comm 2>&1 | tee -a $seq_full \
| _value_filter_regex '("dd"|"dmcrypt_write/\d+")'

echo "=== report metric values for direction ==="
pminfo -dfmtT bcc.proc.io.perdev.direction 2>&1 | tee -a $seq_full \
| _value_filter_exact '"W"'

echo "=== report metric values for major ==="
pminfo -dfmtT bcc.proc.io.perdev.major 2>&1 | tee -a $seq_full \
| _value_filter_nonzero

echo "=== report metric values for minor ==="
pminfo -dfmtT bcc.proc.io.perdev.minor 2>&1 | tee -a $seq_full \
| _value_filter_any

echo "=== report metric values for disk ==="
pminfo -dfmtT bcc.proc.io.perdev.disk 2>&1 | tee -a $seq_full \
| _value_filter_any

echo "=== report metric values for io ==="
pminfo -dfmtT bcc.proc.io.perdev.io 2>&1 | tee -a $seq_full \
| _value_filter_nonzero

echo "=== report metric values for bytes ==="
pminfo -dfmtT bcc.proc.io.perdev.bytes 2>&1 | tee -a $seq_full \
| _value_filter_bytes

echo "=== report metric values for duration ==="
pminfo -dfmtT bcc.proc.io.perdev.duration 2>&1 | tee -a $seq_full \
| _value_filter_nonzero

_pmdabcc_remove

status=0
exit