node/benchmark/cpu.sh
Nam Yooseong feac08e750
benchmark: improve cpu.sh for safety and usability
The previous cpu.sh script was minimal. This change makes it a more
robust and safe utility for managing CPU governors during benchmarks.

The script now includes:
- Checks to ensure it only runs on Linux with root privileges.
- A `reset` command to restore the CPU governor to a dynamically
  detected system default.
- A `get` command to check the current governor for all cores.
- An improved usage guide and clearer feedback messages.

PR-URL: https://github.com/nodejs/node/pull/60162
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
2025-10-27 14:10:27 +00:00

77 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
CPUPATH=/sys/devices/system/cpu
MAXID=$(cat $CPUPATH/present | awk -F- '{print $NF}')
[ "$(uname -s || true)" = "Linux" ] || \
echo "Warning: This script supports Linux only." >&2
[ "$(id -u || true)" = "0" ] || \
echo "Warning: This script typically needs root access to modify CPU governor. Consider running it with sudo." >&2
get_default_governor() {
case "$(cat "$CPUPATH/cpu0/cpufreq/scaling_available_governors")" in
*"schedutil"*) echo "schedutil" ;;
*"ondemand"*) echo "ondemand" ;;
*"conservative"*) echo "conservative";;
*) echo "powersave" ;;
esac
}
set_governor() {
governor_name="$1"
echo "Setting governor for all CPU cores to \"$governor_name\"..."
i=0
while [ "$i" -le "$MAXID" ]; do
echo "$1" > "$CPUPATH/cpu$i/cpufreq/scaling_governor"
i=$((i + 1))
done
echo "Done."
}
usage() {
default_gov=$(get_default_governor)
echo "CPU Governor Management Script"
echo "----------------------------------------------------------------------------"
echo "Usage: $0 [command]"
echo
echo "Commands:"
echo " fast Sets the governor to 'performance' for maximum speed."
echo " (Warning: Increases heat/power use. Use for short-term tasks.)"
echo
echo " reset Resets the governor to the system's recommended default ('$default_gov')."
echo
echo " get Shows the current CPU governor for ALL cores."
echo "----------------------------------------------------------------------------"
}
case "$1" in
fast | performance)
echo "Warning: The 'performance' mode locks the CPU at its highest speed."
echo "It is highly recommended to 'reset' after your task is complete."
set_governor "performance"
;;
reset | default)
default_governor=$(get_default_governor)
set_governor "$default_governor"
;;
get | status)
echo "Current governor status for all cores:"
grep . "$CPUPATH"/cpu*/cpufreq/scaling_governor
;;
*)
usage
exit 1
;;
esac
exit 0