tools/perf/tests/shell/stat.sh

Source file repositories/reference/linux-study-clean/tools/perf/tests/shell/stat.sh

File Facts

System
Linux kernel
Corpus path
tools/perf/tests/shell/stat.sh
Extension
.sh
Size
13713 bytes
Lines
504
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: tools
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

do_topdown_group_test() {
    events=$1
    failure=$2
    if perf stat -e "$events" true 2>&1 | grep -E -q "<not supported>"
    then
      echo "Topdown event group test [Failed $failure for '$events']"
      td_err=1
      return
    fi
  }
  do_topdown_group_test "{slots,topdown-retiring}" "events not supported"
  do_topdown_group_test "{instructions,r400,r8000}" "raw format slots not reordered first"
  filler_events=("instructions" "cycles"
                 "context-switches" "faults")
  for ((i = 0; i < ${#filler_events[@]}; i+=2))
  do
    filler1=${filler_events[i]}
    filler2=${filler_events[i+1]}
    do_topdown_group_test "$filler1,topdown-retiring,slots" \
      "slots not reordered first in no-group case"
    do_topdown_group_test "slots,$filler1,topdown-retiring" \
      "topdown metrics event not reordered in no-group case"
    do_topdown_group_test "{$filler1,topdown-retiring,slots}" \
      "slots not reordered first in single group case"
    do_topdown_group_test "{$filler1,slots},topdown-retiring" \
      "topdown metrics event not move into slots group"
    do_topdown_group_test "topdown-retiring,{$filler1,slots}" \
      "topdown metrics event not move into slots group last"
    do_topdown_group_test "{$filler1,slots},{topdown-retiring}" \
      "topdown metrics group not merge into slots group"
    do_topdown_group_test "{topdown-retiring},{$filler1,slots}" \
      "topdown metrics group not merge into slots group last"
    do_topdown_group_test "{$filler1,slots},$filler2,topdown-retiring" \
      "non-adjacent topdown metrics group not move into slots group"
    do_topdown_group_test "$filler2,topdown-retiring,{$filler1,slots}" \
      "non-adjacent topdown metrics group not move into slots group last"
    do_topdown_group_test "{$filler1,slots},{$filler2,topdown-retiring}" \
      "metrics group not merge into slots group"
    do_topdown_group_test "{$filler1,topdown-retiring},{$filler2,slots}" \
      "metrics group not merge into slots group last"
  done
  if test "$td_err" -eq 0
  then
    echo "Topdown event group test [Success]"
  else
    err="$td_err"
  fi
}

test_topdown_weak_groups() {
  # Weak groups break if the perf_event_open of multiple grouped events
  # fails. Breaking a topdown group causes the events to fail. Test a very large
  # grouping to see that the topdown events aren't broken out.
  echo "Topdown weak groups test"
  ok_grouping="{slots,topdown-bad-spec,topdown-be-bound,topdown-fe-bound,topdown-retiring},branch-instructions,branch-misses,bus-cycles,cache-misses,cache-references,cpu-cycles,instructions,mem-loads,mem-stores,ref-cycles,cache-misses,cache-references"
  if ! perf stat --no-merge -e "$ok_grouping" true > /dev/null 2>&1
  then
    echo "Topdown weak groups test [Skipped event parsing failed]"
    return
  fi
  group_needs_break="{slots,topdown-bad-spec,topdown-be-bound,topdown-fe-bound,topdown-retiring,branch-instructions,branch-misses,bus-cycles,cache-misses,cache-references,cpu-cycles,instructions,mem-loads,mem-stores,ref-cycles,cache-misses,cache-references}:W"
  if perf stat --no-merge -e "$group_needs_break" true 2>&1 | grep -E -q "<not supported>"
  then
    echo "Topdown weak groups test [Failed events not supported]"
    err=1
    return
  fi
  echo "Topdown weak groups test [Success]"
}

Annotation

Implementation Notes