|
4 | 4 |
|
5 | 5 | set -e |
6 | 6 |
|
| 7 | +workload="perf test -w brstack" |
| 8 | + |
7 | 9 | # check whether $2 is within +/- 20% of $1 |
8 | 10 | compare_number() |
9 | 11 | { |
10 | | - first_num=$1 |
11 | | - second_num=$2 |
12 | | - |
13 | | - # upper bound is first_num * 120% |
14 | | - upper=$(expr $first_num + $first_num / 5 ) |
15 | | - # lower bound is first_num * 80% |
16 | | - lower=$(expr $first_num - $first_num / 5 ) |
17 | | - |
18 | | - if [ $second_num -gt $upper ] || [ $second_num -lt $lower ]; then |
19 | | - echo "The difference between $first_num and $second_num are greater than 20%." |
20 | | - exit 1 |
21 | | - fi |
| 12 | + first_num=$1 |
| 13 | + second_num=$2 |
| 14 | + |
| 15 | + # upper bound is first_num * 120% |
| 16 | + upper=$(expr $first_num + $first_num / 5 ) |
| 17 | + # lower bound is first_num * 80% |
| 18 | + lower=$(expr $first_num - $first_num / 5 ) |
| 19 | + |
| 20 | + if [ $second_num -gt $upper ] || [ $second_num -lt $lower ]; then |
| 21 | + echo "The difference between $first_num and $second_num are greater than 20%." |
| 22 | + exit 1 |
| 23 | + fi |
| 24 | +} |
| 25 | + |
| 26 | +check_counts() |
| 27 | +{ |
| 28 | + base_instructions=$1 |
| 29 | + bpf_instructions=$2 |
| 30 | + |
| 31 | + if [ "$base_instructions" = "<not" ]; then |
| 32 | + echo "Skipping: instructions event not counted" |
| 33 | + exit 2 |
| 34 | + fi |
| 35 | + if [ "$bpf_instructions" = "<not" ]; then |
| 36 | + echo "Failed: instructions not counted with --bpf-counters" |
| 37 | + exit 1 |
| 38 | + fi |
| 39 | +} |
| 40 | + |
| 41 | +test_bpf_counters() |
| 42 | +{ |
| 43 | + printf "Testing --bpf-counters " |
| 44 | + base_instructions=$(perf stat --no-big-num -e instructions -- $workload 2>&1 | awk '/instructions/ {print $1}') |
| 45 | + bpf_instructions=$(perf stat --no-big-num --bpf-counters -e instructions -- $workload 2>&1 | awk '/instructions/ {print $1}') |
| 46 | + check_counts $base_instructions $bpf_instructions |
| 47 | + compare_number $base_instructions $bpf_instructions |
| 48 | + echo "[Success]" |
| 49 | +} |
| 50 | + |
| 51 | +test_bpf_modifier() |
| 52 | +{ |
| 53 | + printf "Testing bpf event modifier " |
| 54 | + stat_output=$(perf stat --no-big-num -e instructions/name=base_instructions/,instructions/name=bpf_instructions/b -- $workload 2>&1) |
| 55 | + base_instructions=$(echo "$stat_output"| awk '/base_instructions/ {print $1}') |
| 56 | + bpf_instructions=$(echo "$stat_output"| awk '/bpf_instructions/ {print $1}') |
| 57 | + check_counts $base_instructions $bpf_instructions |
| 58 | + compare_number $base_instructions $bpf_instructions |
| 59 | + echo "[Success]" |
22 | 60 | } |
23 | 61 |
|
24 | 62 | # skip if --bpf-counters is not supported |
25 | | -if ! perf stat -e cycles --bpf-counters true > /dev/null 2>&1; then |
| 63 | +if ! perf stat -e instructions --bpf-counters true > /dev/null 2>&1; then |
26 | 64 | if [ "$1" = "-v" ]; then |
27 | 65 | echo "Skipping: --bpf-counters not supported" |
28 | | - perf --no-pager stat -e cycles --bpf-counters true || true |
| 66 | + perf --no-pager stat -e instructions --bpf-counters true || true |
29 | 67 | fi |
30 | 68 | exit 2 |
31 | 69 | fi |
32 | 70 |
|
33 | | -base_cycles=$(perf stat --no-big-num -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}') |
34 | | -if [ "$base_cycles" = "<not" ]; then |
35 | | - echo "Skipping: cycles event not counted" |
36 | | - exit 2 |
37 | | -fi |
38 | | -bpf_cycles=$(perf stat --no-big-num --bpf-counters -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}') |
39 | | -if [ "$bpf_cycles" = "<not" ]; then |
40 | | - echo "Failed: cycles not counted with --bpf-counters" |
41 | | - exit 1 |
42 | | -fi |
| 71 | +test_bpf_counters |
| 72 | +test_bpf_modifier |
43 | 73 |
|
44 | | -compare_number $base_cycles $bpf_cycles |
45 | 74 | exit 0 |
0 commit comments