Skip to content
Tool/script to thermal throttle DRAM bandwidth for Intel CPUs.
Fortran C Shell Roff Makefile
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
stream
README
throttle.sh

README

#Thermal throttling for memory bandwidth reduction
# For the exact registers for your platform, please see, Intel software development manual
# and search for Thermal register values.
# TODO: More generic script for multiple sockets and configurations
# The script uses the stream benchmark for measuring the memory bandwidth

Usage
=====

$ sudo ./throttle.sh socket_num throttle_level

$ sudo ./throttle.sh 0 2

throttle_level values => 0, 1, 2
In our platform, throttle_level=0 disables throttling, throttle_level=1 reduces bandwidth 
by ~2x-4x, and throttle_level=2 reduces bandwidth by ~8x-10x

socket_num => 0, 1, 2
socket_num = 1 (first socket), socket_num = 0 (second socket), socket_num = 2 ( both sockets)
Currently, this script supports throttling for only two nodes. Will be extended soon...

Notes
=====
For thermal throttling, you should use the PCI registers using setpci command.
The basic commands go like 

  for i in {4..6}
  do
    setpci -s ff:0$i.3 0x84.L=$throttle
    setpci -s ff:0$i.3 0x48.L=$apply
  done

Registers
==========
Next, for your specific CPU architecture, see the Intel software development manual for thermal control registers. They are generally 3 register for each memorysocket. In our machine, the thermal registers are ff:04.3, ff:05.3, ff:06.3.

Values
====== 
$apply - enables or disables the thermal throttling. For enabling, you can use hex 2.
apply='0x2' and for disabling throttling apply='0x0'

$throttle - You can throttle speeds using different values. In our Intel Xeon platform
throttle='0x1f0f' reduces bandwidth by 2x. throttle='0x0f0f' reduces by 8x. You can try difference hex values by modifying the values.

Stream benchmark
===============
The script uses stream benchmark for measuring the memory bandwidth.

More details are available in our paper :) 

@inproceedings{Kannan:2016:PPV:2901318.2901325,
 author = {Kannan, Sudarsun and Gavrilovska, Ada and Schwan, Karsten},
 title = {pVM: Persistent Virtual Memory for Efficient Capacity Scaling and Object Storage},
 booktitle = {Proceedings of the Eleventh European Conference on Computer Systems},
 series = {EuroSys '16},
 doi = {10.1145/2901318.2901325},
 } 

You can’t perform that action at this time.