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>
This commit is contained in:
Nam Yooseong 2025-10-27 23:10:27 +09:00 committed by GitHub
parent fd7b33e763
commit feac08e750
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,21 +4,73 @@ CPUPATH=/sys/devices/system/cpu
MAXID=$(cat $CPUPATH/present | awk -F- '{print $NF}') 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() { set_governor() {
echo "Setting CPU frequency governor to \"$1\"" governor_name="$1"
echo "Setting governor for all CPU cores to \"$governor_name\"..."
i=0 i=0
while [ "$i" -le "$MAXID" ]; do while [ "$i" -le "$MAXID" ]; do
echo "$1" > "$CPUPATH/cpu$i/cpufreq/scaling_governor" echo "$1" > "$CPUPATH/cpu$i/cpufreq/scaling_governor"
i=$((i + 1)) i=$((i + 1))
done 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 case "$1" in
fast | performance) 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" 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
;;
*) *)
echo "Usage: $0 fast" usage
exit 1 exit 1
;; ;;
esac esac
exit 0