We have used a Linux 2.6.11 kernel to develop the runtime GPHT phase perdictor
and phase-driven dynamic power management via DVFS. Below are the tarball for the whole
kernel source tree and the loadable kernel module (LKM) where all the performance monitoring,
phase predictions and DVFS setting actions take place.
You still need to modify the kernel a little bit to make use of the module afterwards,
that's why we have the kernel included as well. First, 2.6 kernel doesn't export the
syscall table, so we need to export it. The LKM inclusion is somewhat different as well
from 2.4 kernels (i.e. modules are .ko files now instead of .o), so we had some more changes
for them as well. Third, most importantly, to have the instruction based sampling and phase
definitions, we needed to add our interrupt handler (and a dummy handler for when the
module is not loaded) to the local vector table (LVT) and interrupt descriptor table entries
(IDT) in the kernel.
More details on the specific kernel edits will follow here if someone requests them, so
let us know...(-G-)
BEWARE!!, the DVFS settings are for our experimental platform for the 6 DVFS
settings from 600MHz to 1500MHz. Intel has separate mappings for different implementations for
the DVFS mode set registers (MSR_IA32_PERF_CTL). I had implemented the mappings for two
Pentium-M systems we had the laptop with 600-1500MHz and a development board with
600-1600MHz - see the switch sys_set_target_f(unsigned freq).
If you have a different platform, you may need to modify the DVFS mappings in:
[#define MSRVALUE(mhz, mv) ( ( ((mhz)/100)<<8 ) | ( ((mv) -700)/16 ) )].
Our Linux 2.6.11 source
This is the kernel source tree (72MB). If you use ctags, i had made the tags for this kernel
so you can track where some of the things we use are defined.
THESE (73MB) are the ctags.
The LKM for GPHT and Phase-Driven Dynamic Management
This is the main LKM. GPHT predictions are defined inside the interrupt handler:
"void new_perf_handler(struct pt_regs *regs)". It does all the performance
monitoring, phase translations, parallel port signaling and DVFS settings (I have described
these somewhat in the micro paper in the big schematic figure). Note that power measurements
are done with the DAQ and on a separate machine with LabView, if you are interested in those as
well let us know.
This is the first include file for the LKM
This include file has the systems calls and other required definitions for the user level.
This is the second include file for the LKM
This one has the performance counter event definitions for instructions retired and BUS_TRAN_MEM
and several others we had played with.
Makefile for the LKM
User level example
This is a user level example to run an application and how we talk to the LKM. LKM runs by itself,
but this is useful for evaluations. THIS
is the makefile to compile it.
THIS is a simple program to set/test frequencies and
THIS is the makefile for it.
This is a simple script to show how we can run each SPEC CPU2000 benchmark 5 times and collect the