Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_arm_spe.sh   Sprache: Shell

 
#!/bin/bash
# Check Arm SPE trace data recording and synthesized samples (exclusive)

# Uses the 'perf record' to record trace data of Arm SPE events;
# then verify if any SPE event samples are generated by SPE with
# 'perf script' and 'perf report' commands.

# SPDX-License-Identifier: GPL-2.0
# German Gomez <german.gomez@arm.com>, 2021

skip_if_no_arm_spe_event() {
 perf list pmu | grep -E -q 'arm_spe_[0-9]+//' && return 0

 # arm_spe event doesn't exist
 return 2
}

skip_if_no_arm_spe_event || exit 2

perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
glb_err=0

cleanup_files()
{
 rm -f ${perfdata}
 rm -f ${perfdata}.old
 exit $glb_err
}

trap cleanup_files EXIT TERM INT

arm_spe_report() {
 if [ $2 = 0 ]; then
  echo "$1: PASS"
 elif [ $2 = 2 ]; then
  echo "$1: SKIPPED"
 else
  echo "$1: FAIL"
  glb_err=$2
 fi
}

perf_script_samples() {
 echo "Looking at perf.data file for dumping samples:"

 # from arm-spe.c/arm_spe_synth_events()
 events="(ld1-miss|ld1-access|llc-miss|lld-access|tlb-miss|tlb-access|branch-miss|remote-access|memory)"

 # Below is an example of the samples dumping:
 # dd  3048 [002]          1    l1d-access:      ffffaa64999c __GI___libc_write+0x3c (/lib/aarch64-linux-gnu/libc-2.27.so)
 # dd  3048 [002]          1    tlb-access:      ffffaa64999c __GI___libc_write+0x3c (/lib/aarch64-linux-gnu/libc-2.27.so)
 # dd  3048 [002]          1        memory:      ffffaa64999c __GI___libc_write+0x3c (/lib/aarch64-linux-gnu/libc-2.27.so)
 perf script -F,-time -i ${perfdata} 2>&1 | \
  grep -E " +$1 +[0-9]+ .* +${events}:(.*:)? +" > /dev/null 2>&1
}

perf_report_samples() {
 echo "Looking at perf.data file for reporting samples:"

 # Below is an example of the samples reporting:
 #   73.04%    73.04%  dd    libc-2.27.so      [.] _dl_addr
 #    7.71%     7.71%  dd    libc-2.27.so      [.] getenv
 #    2.59%     2.59%  dd    ld-2.27.so        [.] strcmp
 perf report --stdio -i ${perfdata} 2>&1 | \
  grep -E " +[0-9]+\.[0-9]+% +[0-9]+\.[0-9]+% +$1 " > /dev/null 2>&1
}

arm_spe_snapshot_test() {
 echo "Recording trace with snapshot mode $perfdata"
 perf record -o ${perfdata} -e arm_spe// -S \
  -- dd if=/dev/zero of=/dev/null > /dev/null 2>&1 &
 PERFPID=$!

 # Wait for perf program
 sleep 1

 # Send signal to snapshot trace data
 kill -USR2 $PERFPID

 # Stop perf program
 kill $PERFPID
 wait $PERFPID

 perf_script_samples dd &&
 perf_report_samples dd

 err=$?
 arm_spe_report "SPE snapshot testing" $err
}

arm_spe_system_wide_test() {
 echo "Recording trace with system-wide mode $perfdata"

 perf record -o - -e dummy -a -B true > /dev/null 2>&1
 if [ $? != 0 ]; then
  arm_spe_report "SPE system-wide testing" 2
  return
 fi

 perf record -o ${perfdata} -e arm_spe// -a --no-bpf-event \
  -- dd if=/dev/zero of=/dev/null count=100000 > /dev/null 2>&1

 perf_script_samples dd &&
 perf_report_samples dd

 err=$?
 arm_spe_report "SPE system-wide testing" $err
}

arm_spe_discard_test() {
 echo "SPE discard mode"

 for f in /sys/bus/event_source/devices/arm_spe_*; do
  if [ -e "$f/format/discard" ]; then
   cpu=$(cut -c -1 "$f/cpumask")
   break
  fi
 done

 if [ -z $cpu ]; then
  arm_spe_report "SPE discard mode not present" 2
  return
 fi

 # Test can use wildcard SPE instance and Perf will only open the event
 # on instances that have that format flag. But make sure the target
 # runs on an instance with discard mode otherwise we're not testing
 # anything.
 perf record -o ${perfdata} -e arm_spe/discard/ -N -B --no-bpf-event \
  -- taskset --cpu-list $cpu true

 if perf report -i ${perfdata} --stats | grep 'AUX events\|AUXTRACE events'then
  arm_spe_report "SPE discard mode found unexpected data" 1
 else
  arm_spe_report "SPE discard mode" 0
 fi
}

arm_spe_snapshot_test
arm_spe_system_wide_test
arm_spe_discard_test

exit $glb_err

Messung V0.5
C=83 H=98 G=90

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge