Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
  1#!/bin/sh
  2# perf record offcpu profiling tests (exclusive)
  3# SPDX-License-Identifier: GPL-2.0
  4
  5set -e
  6
  7err=0
  8perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
  9
 10cleanup() {
 11  rm -f ${perfdata}
 12  rm -f ${perfdata}.old
 13  trap - EXIT TERM INT
 14}
 15
 16trap_cleanup() {
 17  cleanup
 18  exit 1
 19}
 20trap trap_cleanup EXIT TERM INT
 21
 22test_offcpu_priv() {
 23  echo "Checking off-cpu privilege"
 24
 25  if [ "$(id -u)" != 0 ]
 26  then
 27    echo "off-cpu test [Skipped permission]"
 28    err=2
 29    return
 30  fi
 31  if perf version --build-options 2>&1 | grep HAVE_BPF_SKEL | grep -q OFF
 32  then
 33    echo "off-cpu test [Skipped missing BPF support]"
 34    err=2
 35    return
 36  fi
 37}
 38
 39test_offcpu_basic() {
 40  echo "Basic off-cpu test"
 41
 42  if ! perf record --off-cpu -e dummy -o ${perfdata} sleep 1 2> /dev/null
 43  then
 44    echo "Basic off-cpu test [Failed record]"
 45    err=1
 46    return
 47  fi
 48  if ! perf evlist -i ${perfdata} | grep -q "offcpu-time"
 49  then
 50    echo "Basic off-cpu test [Failed no event]"
 51    err=1
 52    return
 53  fi
 54  if ! perf report -i ${perfdata} -q --percent-limit=90 | grep -E -q sleep
 55  then
 56    echo "Basic off-cpu test [Failed missing output]"
 57    err=1
 58    return
 59  fi
 60  echo "Basic off-cpu test [Success]"
 61}
 62
 63test_offcpu_child() {
 64  echo "Child task off-cpu test"
 65
 66  # perf bench sched messaging creates 400 processes
 67  if ! perf record --off-cpu -e dummy -o ${perfdata} -- \
 68    perf bench sched messaging -g 10 > /dev/null 2>&1
 69  then
 70    echo "Child task off-cpu test [Failed record]"
 71    err=1
 72    return
 73  fi
 74  if ! perf evlist -i ${perfdata} | grep -q "offcpu-time"
 75  then
 76    echo "Child task off-cpu test [Failed no event]"
 77    err=1
 78    return
 79  fi
 80  # each process waits at least for poll, so it should be more than 400 events
 81  if ! perf report -i ${perfdata} -s comm -q -n -t ';' --percent-limit=90 | \
 82    awk -F ";" '{ if (NF > 3 && int($3) < 400) exit 1; }'
 83  then
 84    echo "Child task off-cpu test [Failed invalid output]"
 85    err=1
 86    return
 87  fi
 88  echo "Child task off-cpu test [Success]"
 89}
 90
 91
 92test_offcpu_priv
 93
 94if [ $err = 0 ]; then
 95  test_offcpu_basic
 96fi
 97
 98if [ $err = 0 ]; then
 99  test_offcpu_child
100fi
101
102cleanup
103exit $err