diff --git a/benchmark/cpu.sh b/benchmark/cpu.sh
new file mode 100755
index 00000000000000..9c9dd7fa4ddc58
--- /dev/null
+++ b/benchmark/cpu.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+CPUPATH=/sys/devices/system/cpu
+
+MAXID=$(cat $CPUPATH/present | awk -F- '{print $NF}')
+
+set_governor() {
+  echo "Setting CPU frequency governor to \"$1\""
+  i=0
+  while [ "$i" -le "$MAXID" ]; do
+    echo "$1" > "$CPUPATH/cpu$i/cpufreq/scaling_governor"
+    i=$((i + 1))
+  done
+}
+
+case "$1" in
+  fast | performance)
+    set_governor "performance"
+    ;;
+  *)
+    echo "Usage: $0 fast"
+    exit 1
+    ;;
+esac
diff --git a/doc/contributing/writing-and-running-benchmarks.md b/doc/contributing/writing-and-running-benchmarks.md
index 934d83e788d969..9ad7166be321bb 100644
--- a/doc/contributing/writing-and-running-benchmarks.md
+++ b/doc/contributing/writing-and-running-benchmarks.md
@@ -94,6 +94,16 @@ A list of mirrors is [located here](https://cran.r-project.org/mirrors.html).
 
 ## Running benchmarks
 
+### Setting CPU Frequency scaling governor to "performance"
+
+It is recommended to set the CPU frequency to `performance` before running
+benchmarks. This increases the likelihood of each benchmark achieving peak performance
+according to the hardware. Therefore, run:
+
+```console
+$ ./benchmarks/cpu.sh fast
+```
+
 ### Running individual benchmarks
 
 This can be useful for debugging a benchmark or doing a quick performance