Skip to content

Commit

Permalink
Fix #7: use intel_pstate/no_turbo to disable turboboost
Browse files Browse the repository at this point in the history
  • Loading branch information
jinankjain committed Jan 24, 2018
1 parent 373a782 commit 007e364
Showing 1 changed file with 18 additions and 48 deletions.
66 changes: 18 additions & 48 deletions uarch-bench.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,41 +4,15 @@

set -e

# pass cpu # and get the state of the turbo mode, 0 is enabled, 1 is disabled
function get_core_turbo_intel {
echo $(sudo rdmsr -p${core} 0x1a0 -f 38:38)
}

# get the turbo state of all cores as a string
function get_turbo_state_string {
local turbo_state
for core in $cores; do
turbo_state+="$(get_core_turbo_intel $core) "
done
echo $turbo_state
}


function is_even {
if [ $(( $1 % 2)) -eq 0 ]; then echo "O";
else echo "X";
fi
}

export VENDOR_ID=$(lscpu | grep 'Vendor ID' | egrep -o '[^ ]*$')
export MODEL_NAME=$(lscpu | grep 'Model name' | sed -n 's/Model name:\s*\(.*\)$/\1/p')
export SCALING_DRIVER=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_driver)
export SCALING_GOVERNOR=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor)
export NO_TURBO=$(cat /sys/devices/system/cpu/intel_pstate/no_turbo)

echo "Driver: $SCALING_DRIVER, governor: $SCALING_GOVERNOR"
echo -e "Vendor ID: $VENDOR_ID\nModel name: $MODEL_NAME"

################ Load the msr kernel module (needed by turbo-boost disabling code) ###########
if [[ -z $(which rdmsr) ]]; then
echo "msr-tools is not installed. Run 'sudo apt-get install msr-tools' to install it." >&2
exit 1
fi

############### Adjust the scaling governor to 'performance' to avoid sub-nominal clocking ##########

if [[ "$SCALING_GOVERNOR" != "performance" ]]; then
Expand All @@ -57,17 +31,14 @@ lsmod | egrep -q "^msr " || { echo "loading msr kernel module"; sudo modprobe ms

################# Disable turbo boost #######################

cores=$(cat /proc/cpuinfo | grep processor | awk '{print $3}')
echo "setting turbo state for cores $(echo $cores | tr '\n' ' ')"

original_state=$(get_turbo_state_string)
echo "Original no_turbo state: $original_state"

for core in $cores; do
sudo wrmsr -p${core} 0x1a0 0x4000850089
done

echo "Modified no_turbo state: $(get_turbo_state_string)"
if [[ $NO_TURBO != 1 ]]; then
sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
if [[ $(cat /sys/devices/system/cpu/intel_pstate/no_turbo) == 1 ]]; then
echo "Succesfully disabled turbo boost";
else
echo "Failed to disable turbo boost";
fi
fi

################ Load the libpfc kernel module if necessary ##################

Expand All @@ -82,17 +53,16 @@ fi

./uarch-bench "$@"

orig_array=($original_state)
i=0
for core in $cores; do
orig_state=${orig_array[$i]}
if [[ $orig_state == "0" ]]; then
sudo wrmsr -p${core} 0x1a0 0x850089
# restore the no_turbo if we changed it
if [[ $NO_TURBO == 0 ]]; then
echo -n "Reverting no_turbo to $NO_TURBO: "
sudo sh -c "echo $NO_TURBO > /sys/devices/system/cpu/intel_pstate/no_turbo"
if [[ $(cat /sys/devices/system/cpu/intel_pstate/no_turbo) == 1 ]]; then
echo "Succesfully restored no_turbo state: $NO_TURBO";
else
echo "Failed to restore no_turbo state: $NO_TURBO";
fi
((i++))
done

echo "Restored no_turbo state: $(get_turbo_state_string)"
fi

# restore the cpu governor if we changed it
if [[ $original_governor ]]; then
Expand Down

0 comments on commit 007e364

Please sign in to comment.