12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #! /bin/sh
- #
- # Copyright 2016 the V8 project authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- #
- ########## Global variable definitions
- # Ensure that <your CPU clock> / $SAMPLE_EVERY_N_CYCLES < $MAXIMUM_SAMPLE_RATE.
- MAXIMUM_SAMPLE_RATE=10000000
- SAMPLE_EVERY_N_CYCLES=10000
- SAMPLE_RATE_CONFIG_FILE="/proc/sys/kernel/perf_event_max_sample_rate"
- KERNEL_MAP_CONFIG_FILE="/proc/sys/kernel/kptr_restrict"
- CALL_GRAPH_METHOD="fp" # dwarf does not play nice with JITted objects.
- EVENT_TYPE=${EVENT_TYPE:=cycles:u}
- ########## Usage
- usage() {
- cat << EOF
- usage: $0 <benchmark_command>
- Executes <benchmark_command> under observation by Linux perf.
- Sampling event is cycles in user space, call graphs are recorded.
- EOF
- }
- if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
- usage
- exit 1
- fi
- ########## Actual script execution
- ACTUAL_SAMPLE_RATE=$(cat $SAMPLE_RATE_CONFIG_FILE)
- if [ "$ACTUAL_SAMPLE_RATE" -lt "$MAXIMUM_SAMPLE_RATE" ] ; then
- echo "Setting appropriate maximum sample rate..."
- echo $MAXIMUM_SAMPLE_RATE | sudo tee $SAMPLE_RATE_CONFIG_FILE
- fi
- ACTUAL_KERNEL_MAP_RESTRICTION=$(cat $KERNEL_MAP_CONFIG_FILE)
- if [ "$ACTUAL_KERNEL_MAP_RESTRICTION" -ne "0" ] ; then
- echo "Disabling kernel address map restriction..."
- echo 0 | sudo tee $KERNEL_MAP_CONFIG_FILE
- fi
- # Extract the command being perfed, so that we can prepend arguments to the
- # arguments that the user supplied.
- COMMAND=$1
- shift 1
- echo "Running..."
- perf record -R \
- -e $EVENT_TYPE \
- -c $SAMPLE_EVERY_N_CYCLES \
- --call-graph $CALL_GRAPH_METHOD \
- -i "$COMMAND" --perf-basic-prof "$@"
|