Home | History | Annotate | Line # | Download | only in i386
gcc-auto-profile revision 1.1.1.2
      1      1.1  mrg #!/bin/sh
      2  1.1.1.2  mrg # Profile workload for gcc profile feedback (autofdo) using Linux perf.
      3  1.1.1.2  mrg # Auto generated. To regenerate for new CPUs run
      4  1.1.1.2  mrg # contrib/gen_autofdo_event.py --script --all in gcc source
      5      1.1  mrg 
      6      1.1  mrg # usages:
      7      1.1  mrg # gcc-auto-profile program             (profile program and children)
      8      1.1  mrg # gcc-auto-profile -a sleep X          (profile all for X secs, may need root)
      9      1.1  mrg # gcc-auto-profile -p PID sleep X      (profile PID)
     10      1.1  mrg # gcc-auto-profile --kernel -a sleep X (profile kernel)
     11      1.1  mrg # gcc-auto-profile --all -a sleep X    (profile kernel and user space)
     12      1.1  mrg 
     13  1.1.1.2  mrg # Identify branches taken event for CPU.
     14      1.1  mrg #
     15      1.1  mrg 
     16      1.1  mrg FLAGS=u
     17      1.1  mrg 
     18      1.1  mrg if [ "$1" = "--kernel" ] ; then
     19      1.1  mrg   FLAGS=k
     20      1.1  mrg   shift
     21      1.1  mrg fi
     22      1.1  mrg if [ "$1" = "--all" ] ; then
     23      1.1  mrg   FLAGS=uk
     24      1.1  mrg   shift
     25      1.1  mrg fi
     26      1.1  mrg 
     27      1.1  mrg if ! grep -q Intel /proc/cpuinfo ; then
     28      1.1  mrg   echo >&2 "Only Intel CPUs supported"
     29      1.1  mrg   exit 1
     30      1.1  mrg fi
     31      1.1  mrg 
     32      1.1  mrg if grep -q hypervisor /proc/cpuinfo ; then
     33      1.1  mrg   echo >&2 "Warning: branch profiling may not be functional in VMs"
     34      1.1  mrg fi
     35      1.1  mrg 
     36      1.1  mrg case `egrep -q "^cpu family\s*: 6" /proc/cpuinfo &&
     37      1.1  mrg   egrep "^model\s*:" /proc/cpuinfo | head -n1` in
     38      1.1  mrg model*:\ 55|\
     39      1.1  mrg model*:\ 77|\
     40  1.1.1.2  mrg model*:\ 76|\
     41  1.1.1.2  mrg model*:\ 92|\
     42  1.1.1.2  mrg model*:\ 95|\
     43  1.1.1.2  mrg model*:\ 87|\
     44  1.1.1.2  mrg model*:\ 133|\
     45  1.1.1.2  mrg model*:\ 122) E="cpu/event=0xC4,umask=0xFE/p$FLAGS" ;;
     46      1.1  mrg model*:\ 42|\
     47      1.1  mrg model*:\ 45|\
     48      1.1  mrg model*:\ 58|\
     49      1.1  mrg model*:\ 62|\
     50      1.1  mrg model*:\ 60|\
     51      1.1  mrg model*:\ 69|\
     52      1.1  mrg model*:\ 70|\
     53      1.1  mrg model*:\ 63|\
     54      1.1  mrg model*:\ 61|\
     55      1.1  mrg model*:\ 71|\
     56  1.1.1.2  mrg model*:\ 79|\
     57      1.1  mrg model*:\ 86|\
     58      1.1  mrg model*:\ 78|\
     59  1.1.1.2  mrg model*:\ 94|\
     60  1.1.1.2  mrg model*:\ 142|\
     61  1.1.1.2  mrg model*:\ 158|\
     62  1.1.1.2  mrg model*:\ 165|\
     63  1.1.1.2  mrg model*:\ 166|\
     64  1.1.1.2  mrg model*:\ 85|\
     65  1.1.1.2  mrg model*:\ 85) E="cpu/event=0xC4,umask=0x20/p$FLAGS" ;;
     66      1.1  mrg model*:\ 46|\
     67      1.1  mrg model*:\ 30|\
     68      1.1  mrg model*:\ 31|\
     69      1.1  mrg model*:\ 26|\
     70      1.1  mrg model*:\ 47|\
     71      1.1  mrg model*:\ 37|\
     72      1.1  mrg model*:\ 44) E="cpu/event=0x88,umask=0x40/p$FLAGS" ;;
     73      1.1  mrg model*:\ 28|\
     74      1.1  mrg model*:\ 38|\
     75      1.1  mrg model*:\ 39|\
     76      1.1  mrg model*:\ 54|\
     77      1.1  mrg model*:\ 53) E="cpu/event=0x88,umask=0x41/p$FLAGS" ;;
     78  1.1.1.2  mrg model*:\ 126|\
     79  1.1.1.2  mrg model*:\ 140|\
     80  1.1.1.2  mrg model*:\ 141|\
     81  1.1.1.2  mrg model*:\ 106|\
     82  1.1.1.2  mrg model*:\ 108) E="cpu/event=0xc4,umask=0x20/p$FLAGS" ;;
     83      1.1  mrg *)
     84      1.1  mrg echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script."
     85      1.1  mrg 	exit 1 ;;
     86      1.1  mrg esac
     87  1.1.1.2  mrg set -x
     88  1.1.1.2  mrg if ! perf record -e $E -b "$@" ; then
     89  1.1.1.2  mrg   # PEBS may not actually be working even if the processor supports it
     90  1.1.1.2  mrg   # (e.g., in a virtual machine). Trying to run without /p.
     91  1.1.1.2  mrg   set +x
     92  1.1.1.2  mrg   echo >&2 "Retrying without /p."
     93  1.1.1.2  mrg   E="$(echo "${E}" | sed -e 's/\/p/\//')"
     94  1.1.1.2  mrg   set -x
     95  1.1.1.2  mrg   exec perf record -e $E -b "$@"
     96  1.1.1.2  mrg  set +x
     97  1.1.1.2  mrg fi
     98