128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #! /usr/bin/bash
 | |
| 
 | |
| # Set up help text
 | |
| command_name=$(basename $0)
 | |
| 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:
 | |
|   check [ARGS]     Checks current TDP and prints it in watts
 | |
|   set WATTS [ARGS] Setts TDP to the requested number in watts
 | |
|   help             Prints this help text
 | |
|   COMMAND --help   Prints help for specified command"
 | |
| 
 | |
| check_help_text="${command_name} check [ARG]
 | |
| 
 | |
| Example:
 | |
|   ${command_name} check --detail
 | |
|   ${command_name} c -d
 | |
| 
 | |
| Arguments:
 | |
|   --detail, -d     Prints PL2 as well as PL1
 | |
|   --help           Prints this help text"
 | |
| 
 | |
| set_help_text="${command_name} set WATT [ARGUMENTS]
 | |
| 
 | |
| Example:
 | |
|   ${command_name} set 10 --detail
 | |
|   ${command_name} s 10 -d
 | |
| 
 | |
| Arguments:
 | |
|   --detail, -d     Prints PL2 as well as PL1
 | |
|   --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
 | |
| 
 | |
| # Retrieves current TDP and prints it
 | |
| check_tdp () {
 | |
|   if [[ "$@" == *"--detail"* ]] || [[ "$@" == *"-d"* ]]; then
 | |
|       echo "Placeholder"
 | |
|       echo "Extra placeholder"
 | |
| 
 | |
|   elif [ -z "$1" ]; then
 | |
|       echo "Placeholder"
 | |
| 
 | |
|   elif [ "$1" == "--help" ]; then
 | |
|     print_help "check"
 | |
| 
 | |
|   else
 | |
|     print_unknown
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # Sets TDP to number provided as first argument
 | |
| set_tdp () {
 | |
|   if [ -z "$1" ]; then
 | |
|     echo "Please specify wattage"
 | |
|     exit
 | |
|   elif [ "$1" == "--help" ]; then
 | |
|     print_help "set"
 | |
|     exit
 | |
|   elif ! [[ $1 =~ ^-?[0-9]+$ ]]; then
 | |
|     echo "TDP is not a number or argument unknown!)"
 | |
|     print_unknown
 | |
|     exit
 | |
|   fi
 | |
| 
 | |
|   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"
 | |
|   else
 | |
|     #PL1
 | |
|     local watts=$1
 | |
|     local uwatts=$(expr $watts '*' 1000000)
 | |
| 
 | |
|     #PL2
 | |
|     local watts2=$(expr $watts + 2)
 | |
|     local uwatts2=$(expr $watts2 '*' 1000000)
 | |
| 
 | |
|     echo $uwatts
 | |
|     echo "PL1 is now ${watts}W (Long-term)"
 | |
|     if [[ "$@" == *"--detail"* ]] || [[ "$@" == *"-d"* ]]; then
 | |
|       echo "PL2 is now ${watts2}W (Short-term)"
 | |
|     fi
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # Command handler
 | |
| case $1 in
 | |
| 
 | |
|   "check" | "c")
 | |
|     check_tdp "${@:2}"
 | |
|     ;;
 | |
| 
 | |
|   "set" | "s")
 | |
|     set_tdp "${@:2}"
 | |
|     ;;
 | |
| 
 | |
|   "help")
 | |
|     print_help
 | |
|     ;;
 | |
| 
 | |
|   *)
 | |
|     print_unknown
 | |
|     ;;
 | |
| esac
 |