bash

Updated CPU frequency scaling script

This is an update to my earlier command line frequency scaling script. This version uses the dialog utility to provide a rudimentary GUI.

  1. #!/bin/bash
  2. # Wrapper to easily set the CPU Frequency Governor
  3. # dialog is a utility installed by default on all major Linux distributions.
  4. # But it is good to check availability of dialog utility on your Linux box.
  5.  
  6. which dialog &> /dev/null
  7.  
  8. [ $? -ne 0 ]  && echo "Dialog utility is not available, please install it" && exit 1
  9.  
  10. # Check that a valid governor is set
  11.  
  12. # Creating an array with each of the CPUs numeric ID
  13. declare -a  CPUs=( `cat /proc/cpuinfo |grep processor |cut -f 2 -d \:` )
  14.  
  15. # Setting up the dialogue interface:
  16.  dialog --clear --backtitle "Console Based CPU Governor Selection" --title "MAIN MENU" \
  17.     --menu "Use [UP/DOWN] key to move" 18 100 6 \
  18.     "performance" "Set for maximum performance, watch the temp!" \
  19.     "ondemand"  "Usually the default, scale speed up as required." \
  20.     "conservative"    "Conservatively scale up as required." \
  21.     "powersave"     "Maximum power savings or lowest temp." \
  22.     "userspace"      "Send control to a userspace application." \
  23.     "EXIT"      "TO EXIT" 2> menuchoices.$$
  24.  
  25. # This computes the number of elements in the array, we use this to control our loop in the SetSpeed function
  26. elements="${#CPUs[*]}"
  27.  
  28. SetSpeed ()
  29. {  

Setting the CPU Frequency Govenor from the Command Line

Most modern processors support some level of frequency scaling, that is they change the speed or frequency that they are running at in order to reduce energy consumption. You can usually change the frequency with a GUI app but what happens if there is no GUI running (on say a server). The command is called cpufreq-set. You can get details (like processor statistics and current governor in use. Both of these are provided by the cpufrequtils package which you can just apt-get or aptitude install

The problem is that cpufreq-set only sets one core or CPU at a time. On a dual or quad socket this could get quite tedious. Fortunately there is an easy solution.

  1. for each in `cat /proc/cpuinfo |grep processor |cut -f 2 -d \:` ;do sudo cpufreq-set -c $each -g performance ; done

What I do is run a small little bash script that iterates over all the CPUs and sets the governor to one set as a parameter to the script.

  1. #!/bin/bash
  2. # Wrapper to easily set the CPU Frequency Governor
  3.  
  4. # Check that a valid governor is set
  5.  
  6. GOVERNOR=$1
  7.  
  8. USAGE="This script requires a CPU governor as an argument, which should be one of: conservative, ondemand, userspace, powersave, performance
  9. For example: cpuscale.sh ondemand"
  10.  
  11. if [ "$#" = "0" ]; then
  12.         echo "$USAGE"
  13.         exit 1
  14. fi
  15.  
  16. # Creating an array with each of the CPUs numeric ID

Disk usage

Just posting a handy little trick to get your disk usage from the command line.

While the df command will show you what the disk utilization for your partitions, sometimes you need more specific details, like which files and folders are taking up all of your space.

Here is how I do this:

  1. df -Pacmx --max-depth=1 . |sort -g

This is kind of awkward to type out all the time, so you create an alias.

  1. echo "alias dus=\"df -Pacmx --max-depth=1 . |sort -g\"" >> ~/.bashrc

Now type

  1. source ~/.bashrc

From any directory, you can now type "dus" without the quotes to see all the files and directories sorted by size. It should also be noted that df is rounding up to the nearest megabyte.

One final note, the flags I used are specific to the GNU version of these utilities. You BSD folks will have to adjust the df and sort options.

Syndicate content