| #!/bin/sh |
| # Profile workload for gcc profile feedback (autofdo) using Linux perf. |
| # Auto generated. To regenerate for new CPUs run |
| # contrib/gen_autofdo_event.py --script --all in gcc source |
| |
| # usages: |
| # gcc-auto-profile program (profile program and children) |
| # gcc-auto-profile -a sleep X (profile all for X secs, may need root) |
| # gcc-auto-profile -p PID sleep X (profile PID) |
| # gcc-auto-profile --kernel -a sleep X (profile kernel) |
| # gcc-auto-profile --all -a sleep X (profile kernel and user space) |
| |
| # Identify branches taken event for CPU. |
| # |
| |
| FLAGS=u |
| |
| if [ "$1" = "--kernel" ] ; then |
| FLAGS=k |
| shift |
| fi |
| if [ "$1" = "--all" ] ; then |
| FLAGS=uk |
| shift |
| fi |
| |
| if ! grep -q Intel /proc/cpuinfo ; then |
| echo >&2 "Only Intel CPUs supported" |
| exit 1 |
| fi |
| |
| if grep -q hypervisor /proc/cpuinfo ; then |
| echo >&2 "Warning: branch profiling may not be functional in VMs" |
| fi |
| |
| case `egrep -q "^cpu family\s*: 6" /proc/cpuinfo && |
| egrep "^model\s*:" /proc/cpuinfo | head -n1` in |
| model*:\ 55|\ |
| model*:\ 77|\ |
| model*:\ 76|\ |
| model*:\ 92|\ |
| model*:\ 95|\ |
| model*:\ 87|\ |
| model*:\ 133|\ |
| model*:\ 122) E="cpu/event=0xC4,umask=0xFE/p$FLAGS" ;; |
| model*:\ 42|\ |
| model*:\ 45|\ |
| model*:\ 58|\ |
| model*:\ 62|\ |
| model*:\ 60|\ |
| model*:\ 69|\ |
| model*:\ 70|\ |
| model*:\ 63|\ |
| model*:\ 61|\ |
| model*:\ 71|\ |
| model*:\ 79|\ |
| model*:\ 86|\ |
| model*:\ 78|\ |
| model*:\ 94|\ |
| model*:\ 142|\ |
| model*:\ 158|\ |
| model*:\ 165|\ |
| model*:\ 166|\ |
| model*:\ 85|\ |
| model*:\ 85) E="cpu/event=0xC4,umask=0x20/p$FLAGS" ;; |
| model*:\ 46|\ |
| model*:\ 30|\ |
| model*:\ 31|\ |
| model*:\ 26|\ |
| model*:\ 47|\ |
| model*:\ 37|\ |
| model*:\ 44) E="cpu/event=0x88,umask=0x40/p$FLAGS" ;; |
| model*:\ 28|\ |
| model*:\ 38|\ |
| model*:\ 39|\ |
| model*:\ 54|\ |
| model*:\ 53) E="cpu/event=0x88,umask=0x41/p$FLAGS" ;; |
| model*:\ 126|\ |
| model*:\ 140|\ |
| model*:\ 141|\ |
| model*:\ 106|\ |
| model*:\ 108) E="cpu/event=0xc4,umask=0x20/p$FLAGS" ;; |
| *) |
| echo >&2 "Unknown CPU. Run contrib/gen_autofdo_event.py --all --script to update script." |
| exit 1 ;; |
| esac |
| set -x |
| if ! perf record -e $E -b "$@" ; then |
| # PEBS may not actually be working even if the processor supports it |
| # (e.g., in a virtual machine). Trying to run without /p. |
| set +x |
| echo >&2 "Retrying without /p." |
| E="$(echo "${E}" | sed -e 's/\/p/\//')" |
| set -x |
| exec perf record -e $E -b "$@" |
| set +x |
| fi |