win3-resources/scripts/tdp

152 lines
3.0 KiB
Plaintext
Raw Normal View History

2021-05-20 07:42:54 +00:00
#! /usr/bin/bash
2021-05-20 10:10:29 +00:00
# Global vars/settings
2021-05-20 07:42:54 +00:00
command_name=$(basename $0)
2021-05-20 10:10:29 +00:00
rapl_base="/sys/class/powercap/intel-rapl:0"
pl1_path="${rapl_base}/constraint_0_power_limit_uw"
pl2_path="${rapl_base}/constraint_1_power_limit_uw"
# Set up help text
2021-05-20 07:42:54 +00:00
help_text="${command_name}: GDP Win 3 TDP management script
This script checks and sets the TDP using intel_rapl
Usage:
${command_name} COMMAND [ARGUMENTS]
Command:
2021-05-20 08:46:14 +00:00
check [ARGS] Checks current TDP and prints it in watts
set WATTS [ARGS] Setts TDP to the requested number in watts
2021-05-20 07:42:54 +00:00
help Prints this help text
2021-05-20 08:46:14 +00:00
COMMAND --help Prints help for specified command"
2021-05-20 07:42:54 +00:00
check_help_text="${command_name} check [ARG]
Example:
${command_name} check --detail
2021-05-20 08:46:14 +00:00
${command_name} c -d
2021-05-20 07:42:54 +00:00
Arguments:
--detail, -d Prints PL2 as well as PL1
--help Prints this help text"
2021-05-20 08:46:14 +00:00
set_help_text="${command_name} set WATT [ARGUMENTS]
2021-05-20 07:42:54 +00:00
Example:
2021-05-20 08:46:14 +00:00
${command_name} set 10 --detail
${command_name} s 10 -d
2021-05-20 07:42:54 +00:00
Arguments:
2021-05-20 08:46:14 +00:00
--detail, -d Prints PL2 as well as PL1
2021-05-20 07:42:54 +00:00
--help Prints this help text"
print_help () {
case $1 in
"check")
echo "$check_help_text"
;;
"set")
echo "$set_help_text"
;;
*)
echo "$help_text"
;;
esac
}
print_unknown () {
echo "Unknown command or incorrect arguments.
Try \"${command_name} help\" or \"${command_name} COMMAND --help\""
}
# End of help text
2021-05-20 10:10:29 +00:00
# Conversion tools
uw_to_w () {
if ! [[ $1 =~ ^-?[0-9]+$ ]]; then
exit
else
echo $(expr $1 / 1000000)
fi
}
w_to_uw () {
if ! [[ $1 =~ ^-?[0-9]+$ ]]; then
exit
else
echo $(expr $1 '*' 1000000)
fi
}
2021-05-20 07:42:54 +00:00
# Retrieves current TDP and prints it
check_tdp () {
2021-05-20 08:46:14 +00:00
if [[ "$@" == *"--detail"* ]] || [[ "$@" == *"-d"* ]]; then
2021-05-20 10:10:29 +00:00
local detailed=yes
fi
2021-05-20 07:42:54 +00:00
2021-05-20 10:10:29 +00:00
if [ -z "$1" ]; then
echo "PL1 is $(uw_to_w 10000000)W" # Placeholder
if [ $detailed == "yes" ]; then
echo "PL2 is $(uw_to_w 12000000)W" # Placeholder
2021-05-20 07:42:54 +00:00
elif [ "$1" == "--help" ]; then
print_help "check"
else
print_unknown
fi
}
2021-05-20 10:10:29 +00:00
# Sets PL1 to number provided as first argument, and PL2 2W higher
2021-05-20 07:42:54 +00:00
set_tdp () {
if [ -z "$1" ]; then
2021-05-20 08:46:14 +00:00
echo "Please specify wattage"
2021-05-20 07:42:54 +00:00
exit
elif [ "$1" == "--help" ]; then
print_help "set"
exit
2021-05-20 08:46:14 +00:00
elif ! [[ $1 =~ ^-?[0-9]+$ ]]; then
echo "TDP is not a number or argument unknown!)"
print_unknown
exit
2021-05-20 07:42:54 +00:00
fi
2021-05-20 08:46:14 +00:00
if [ $1 -lt 5 ] || [ $1 -gt 30 ]; then
echo "TDP too high or low, should be between 5W and 30W"
echo "This is a sanity limit to prevent you from throttling to a near unusable state"
2021-05-20 07:42:54 +00:00
else
#PL1
local watts=$1
2021-05-20 10:10:29 +00:00
local uwatts=$(w_to_uw $watts)
2021-05-20 07:42:54 +00:00
#PL2
local watts2=$(expr $watts + 2)
2021-05-20 10:10:29 +00:00
local uwatts2=$(w_to_uw $watts2)
2021-05-20 07:42:54 +00:00
echo $uwatts
echo "PL1 is now ${watts}W (Long-term)"
2021-05-20 08:46:14 +00:00
if [[ "$@" == *"--detail"* ]] || [[ "$@" == *"-d"* ]]; then
echo "PL2 is now ${watts2}W (Short-term)"
fi
2021-05-20 07:42:54 +00:00
fi
}
# Command handler
case $1 in
2021-05-20 08:46:14 +00:00
"check" | "c")
2021-05-20 07:42:54 +00:00
check_tdp "${@:2}"
;;
2021-05-20 08:46:14 +00:00
"set" | "s")
2021-05-20 07:42:54 +00:00
set_tdp "${@:2}"
;;
"help")
print_help
;;
*)
print_unknown
;;
esac