Index: tools/run-perf.sh |
diff --git a/tools/run-perf.sh b/tools/run-perf.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..24053b40fb0aa3dd64a0b8db3f25ca8fb75aa425 |
--- /dev/null |
+++ b/tools/run-perf.sh |
@@ -0,0 +1,52 @@ |
+#! /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. |
+ |
+########## 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 |
+ |
+echo "Running..." |
+perf record -R \ |
+ -e cycles:u \ |
+ -c $SAMPLE_EVERY_N_CYCLES \ |
+ --call-graph $CALL_GRAPH_METHOD \ |
+ -i $@ --perf_basic_prof |