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
 |