mirror of
https://github.com/zebrajr/node.git
synced 2025-12-06 00:20:08 +01:00
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:
parent
fd7b33e763
commit
feac08e750
|
|
@ -4,21 +4,73 @@ 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() {
|
||||
echo "Setting CPU frequency governor to \"$1\""
|
||||
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
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $0 fast"
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user