Skip to content

amithash/seeker-scheduler

Repository files navigation

========================================================================================
                                    SEEKER
                            Performance based scheduler
                           Copyright 2009 Amithash Prasad
                                                                                
     Seeker is free software: you can redistribute it and/or modify         
     it under the terms of the GNU General Public License as published by   
     the Free Software Foundation, either version 3 of the License, or      
     (at your option) any later version.                                    
                                                                        
     This program is distributed in the hope that it will be useful,        
     but WITHOUT ANY WARRANTY; without even the implied warranty of         
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
     GNU General Public License for more details.                           
                                                                        
     You should have received a copy of the GNU General Public License      
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  

   All documentation is licensed under the creative common license, *except*
   C2D_EVENTS.pdf which is the copyright of Intel Corporation, and K8_EVENTS.pdf
   which is the copyright of Advanced Micro Devices ( added here for 
   convenience ) and thesis/* and thesis_eqno/* for which I hold a restrictive non-copy
   non-distribute rights. But this restriction will be removed as soon as I 
   publish upon which the document will become public domain and all have 
   the same rights as other academic publications. This is currently not in
   git HEAD, as I am using a separate repository for it. 

========================================================================================

WARNINGS
--------

This work may destroy your computer and perform unquestionable acts upon your pets.

This is not a production tool, but a research project. There were bad design choices
to enhance development speed -- A tendency which is usually avoided in production grade
software and rampant in research projects (This is because in research, the code is
irrelevant and the _idea_ is everything). 

This project comprises of various kernel modules and may have bugs. I am not Linus,
I am an average Joe the developer. A direct consequence of bugs in kernel modules, is that
you will probably have to learn to do _everything_ from the command prompt. 

If all this does not scare you (Or your adviser is not giving up), welcome my friend.
Welcome to hell. 

========================================================================================
PROJECT DIRECTORY ORGANIZATION
------------------------------
$SEEKER_HOME
        All scripts run scripts and shared headers.
$SEEKER_HOME/Module
        Linux kernel Modules
        $SEEKER_HOME/Module/pmu
                The performance monitoring counter driver
        $SEEKER_HOME/Module/seeker-cpufreq
                The seeker cpufreq governor.
        $SEEKER_HOME/Module/seeker-scheduler
                The meat of this project!
$SEEKER_HOME/Patches
        The patches which needed to be applied for the above modules to work.
$SEEKER_HOME/Scripts
        The scripts/utils which act as support user space applications for the Modules
$SEEKER_HOME/lib
        Libraries which were written to use the seeker syscall interface (And benchmarks
        which does not count)
$SEEKER_HOME/utils
        Utulities (multi-launcher) which is useful to run experiments.
$SEEKER_HOME/SyntheticBenchmarks
        synthetic benchmark to test the system's capibility.
$SEEKER_HOME/MiscScripts
        Scripts to run experiments (Low use for anyone other than people in CU)
        No help section for these. Use by reading the code.
$SEEKER_HOME/AnalysisScripts
        Scripts to analyze data. (Low use for anyone other than myself)
        No help section for these. Use by reading the code.

PRE-SETUP / PRE-REQS:
--------------------

I have done everything on the Linux 2.6.28 kernel. I must warn you that there are changes
to the Linux kernel (from 2.6.29 onwards?) which make some of the modules,  err, not compile.
If you want to get it to work -- seeker-cpufreq -- is the culprit. 

If you want to work on kernel 2.6.24 and earlier, well go to hell! They have separate i386 and
x86_64 branches in arch/ for those cave man kernels and my patches will just FUBAR the kernel
source. 

In order for the modules to work, I had to patch the kernel (Trust me I tried to avoid
this as much as possible. So these are the steps) 


OBVIOUS and other non obvious DEPENDENCIES 
------------------------------------------

software:

1. gcc, g++, perl, make, bash shell (Yes some shell scripts explicitly require bash)
2. Vanilla kernel source (from kernel.org) with my patches installed (Refer next section)
3. If you want to use my R-scripts, R
4. If you want to use my matlab scripts, Octave 

hardware:

1. Intel or AMD architecture WITH performance counter support. Please refer to your
   manual to verify this.
   1a. Number of counters:
       i. Core - 2 programmable counters (pmu), 3 fixed counters (fpmu)
       ii. AMD  - 4 programmable counters no fixed counters. 
   1b. Register (Model specific registers) address values 
       Check Module/pmu/pmu_internal.h describe the correct values.
       Check Module/seeker-scheduler/hwcounters.h to use the correct event select values.

2. Support for DVFS exsits for the current processor in the Linux kernel.
  2a. If AMD - Check powernow-k8 works (loads)
  2b. If Intel, check acpi-cpufreq works (loads)

3. Check if DVFS _really_ works! 
   Note: Intel fuc*ed me on this. The acpi-cpufreq loaded, but DVFS really did not work! 
   Guess it was a BIOS thing. But it took me a while to figure this out. 
   In this dir, I have added a Synthetic benchmark - 
   cd /path/to/this/dir
   cd SyntheticBenchmarks
   make
   ./synth_bench cpu
   Check the execution time, if it is way too small (Ran very fast)
   Increase the trials. 
  ./synth_bench cpu 200

   Now run synth_bench on all "displayed" CPU frequencies. There must be obvious 
   changes like if you doubled the clock speed, your execution time must be cut to half. 
   If not the DVFS mechanism does not work and is just for show, it really really
   does not work. Get another machine! :-)
   PS: Make sure to change the frequency of ALL cores for each experiment. 

4. Each core/virtual processor can transition to clock speeds independently of one another.
   This is currently possible only for the AMD Barcelona processors. There are rumors
   that this support was removed for the later released AMD Barcelona. The Intel Nehelam
   obviously does not have this support as it introduces SMT. 
   I used the AMD Barcelona for my tests, so I did not have to worry about the extra
   complications. If you want to add this support make sure you use one more level
   of hierarchy. Instead of STATE -> CPU GROUP -> CPU, use
   STATE -> CPUSET GROUP -> CPUSET -> CPU


INSTALLING THE PATCHES TO A VANILLA KERNEL
------------------------------------------

1.  Download the kernel from kernel.org.
2.  unzip, untar.
3.  move the linux-2.6.x.x dir to /usr/src
4.  cd to the kernel dir (cd /usr/src/linux-2.6.x.x)
5.  Apply the patches:
   5a. patch -p1 < /path/to/this/dir/Patches/seeker-kernel-2.6.28.patch
   5b. patch -p1 < /path/to/this/dir/Patches/schedmod-kernel-2.6.28.patch
 
6.  Copy /boot/config-2.6.y.y to /usr/src/linux-2.6.x.x/.config where, 
    2.6.y.y is the current booted, working kernel.
7.  cd /usr/src/linux-2.6.x.x
8.  make menuconfig
9.  Select Load alternate config file and select .config

CONFIGURE THE KERNEL
--------------------

10. Make sure you change the following options:
  10a. General Setup -> Local Version   and add any text to it example: "-seeker" sans quotes
       NOTE: This will help you in knowing what is the patched kernel. 
  10b. Make sure General Setup -> Kprobes is selected. 
  10c. Make sure Enable loadable module support is checked. 
  10d. Processor Type and features->  (Make sure are checked - or given value is selected)
       Sub Architecture -> PC Compatible
       Symmetric Multi-Processing support
       Processor Family -> <Whatever your processor is>
            AMD Opteron: Processor Family -> Opteron/Athlon64Hammer/K8
            Intel Core:  Processor Family -> Core 2/Newer Xeon
       Maximum Number of CPUS -> <Set exactly the number of cores/threads you have>
                                 The default can make the memory consumption of 
                                 seeker quite high.
       Feel free to change things here. But know what you are changing.
  10e. Power Management and ACPI Options ->
         Power Management support
         CPU Frequency Scaling ->
             Just check almost everything. 
             I had a problem with the cpufreq drivers built into the kernel. So I kept them as modules
             and made sure they are loaded. 
             MAKE SURE THE CPUFREQ DRIVER FOR YOUR ARCH IS At least a module!
  10f. That's it. If you want you can remove unnecessary, but be very careful. 
       I prefer to get a working boot-able kernel before tweaking it. 

BUILD THE KERNEL
----------------

11. make (This takes a while, so go get a coffee) 
    Recommendation: For every core X on the system you can use up to 10X threads! 
    (Yes I have tried.)
    make -j10X
12. make modules_install install
13. mkinitrd -o /boot/initrd-2.6.x.x.img 2.6.x.x 
    NOTE: Only for Ubuntu. SuSE seems to do this step in make install. 
14. Open /boot/grub/grub.conf and copy the section of your working kernel to a 
    new place and change the title and others to reflect your new compiled kernel.
    NOTE: Again only for Ubuntu. SuSE does this in make install. 

REBOOT INTO THE KERNEL
----------------------

15. Reboot to the new kernel. 
16. Kernel Panic?? Oops... This is why they ask you NOT to over write your existing
    kernel, boot into the working kernel and google! Once everything works fine,
    you can make this kernel the default (Especially if this is a "research test
    machine"!)

SHELL ENVIRONMENT 
-----------------

Yes I am a moron. My build system is FUBAR'ed. My scripts are FUBAR'ed. 
I need a environment variable. Add this to your .bashrc:

export SEEKER_HOME=/path/to/where/seeker/source/code/is

and restart the shell. If you have other shell (Most notably the C-Shell) google
on how to set their environment variables.

18. Make sure you have perl, gcc (Of course!) and  g++ installed. To use the plotting
    scripts, you will need gnuplot 4.2 installed. and for the matlab scripts, do install
    octave.

========================================================================================

For the rest of this document, I will take a man-page approach. Explaining each and every 
module/daemon/script. 

========================================================================================
PATCHES
-------
seeker-kernel-2.6.28.patch
  Tested on the 2.6.28 kernel (Must be obvious from the naming)
  Patches to get pmu interrupt feature like interrupt handling
  Seeker scheduler does not use this feature, but it is a very
  good addition in case you want to extend it. 

  If you _really_ want to use another kernel, you have no option
  but to study the patch. get the 2.6.28 kernel and apply it
  and get an idea what it does. And what it modifies. 
  You can drop me an email: [email protected] if you need more
  help. But note that I might have forgotten most of the things
  by then. 

schedmod-kernel-2.6.28.patch  
  Tested on the 2.6.28 kernel (Must be obvious from the naming)
  This is a very simple patch which
  1. adds a system call called sys_seeker. 
  2. Adds extra members to task_struct.
  3. Exports a few functions to be used from the module.

========================================================================================
KERNEL MODULES:
--------------

After a make.

All modules are in Module/

pmu/
    The performance monitoring counter driver for AMD and Intel 
    Also supports (Provides interfaces) to talk to the fixed
    performance monitoring counters present in modern Intel Architectures.

    insmod $SEEKER_HOME/Build/pmu.ko

seeker-cpufreq/
    The cpufreq governor which exposes the set_freq interface to seeker-scheduler
    insmod $SEEKER_HOME/Build/seeker_cpufreq.ko
    After this run `$SEEKER_HOME/Scripts/seeker_cpufreq.pl start` to select it.

    OPTIONS: 
      allowed_states=<list of comma separated states>
      example, if the system has 5 states:
      0 - 1100MHz
      1 - 1400MHz
      2 - 1700MHz
      3 - 2000MHz
      4 - 2200MHz
      Then, if you do
      insmod $SEEKER_HOME/Build/seeker_cpufreq.ko allowed_states=0,1,4
      from there on, it internally will transition only to these states
      and any logging will report the following:
      Total of 3 states:
      0 - 1100MHz
      1 - 1400MHz
      2 - 2200MHz

seeker-scheduler/
    The mother module. This depends on the above 3 modules.
    insmod $SEEKER_HOME/Build/seeker_scheduler.ko

    OPTIONS:
      change_interval - Here you can assing the mutation interval in milli-seconds.
                        Default: 1000

      delta           - the mutation constraint. (delta constraint)

      mutation_method - 0 - Delta (Default)
                        1 - dynamic programing (Does not work)
                        2 - Ondemand
                        3 - Conservative
                        4 - Static layout (No mutation)

                        This is just so that I could simulate these governors
                        in my infrastructure so I can gather the same logs. 

      base_state     -  The state (0,1,2,...) which the scheduler will place
                        tasks upon their start. 

      allowed_cpus   - The number of cpus allowed by seeker-scheduler.
                       Cpus 0 - allowed_cpus - 1 will be enabled, and
                       tasks from now on will NOT execute on other 
                       cpus (Other than black listed tasks of course)
     
     scheduling_method  - 0 - Ladder scheduling
                          1 - Select scheduling
                          2 - adaptive ladder scheduling
                          3 - disable scheduling

     init_layout   - Provide a comma separated list of the performance state
                       of cpus starting from 0.
                       so static_layout=0,0,0,0,4,4,4,4 
                       will set cpu 0 to 3 to state 0 
                       and cpu 4-7 to state 4

    PS: Read thesis.pdf :-) 
        mutation interval -> change_interval
        delta             -> delta
        scheduling_method -> evaluation

seeker scheduler exposes a dev interface
/dev/seeker_log which when opened, it will start collecting logs and dumping
the binary logs through this interface. There are already daemons to get
these logs and convert them. So do not worry (Next section)

Example:
insmod $SEEKER_HOME/Build/seeker_scheduler.ko delta=4 change_interval=125 \
                                              allowed_cpus=4 base_stat=3 

Some of these options are not discussed in the thesis as these were used
to enable comparison. 

========================================================================================
INTERFACE TO SEEKER SCHEDULER (Daemons and utils and scripts, Oh My!):
----------------------------------------------------------------------

DAEMONS:
--------

seekerlogd - Is the user space daemon which sucks the binary logs from 
/dev/seeker_log and dumps it into a binary file. 

  USAGE:
  $SEEKER_HOME/Scripts/seekerlogd <LOG FORMAT> <SAMPLE TIME>
    LOG FORMAT:
      This is the format to the output name. If it is:
        ~/log_
        then the first binary file written will be ~/log_0
        The reason will become obvious when you read about send.pl.
    SAMPLE TIME:
        The time interval in seconds. debug will wake up every "SAMPLE TIME" seconds
        and copies data from /dev/seeker_log and dump it into the output file. 

  Make sure that <LOG_FORMAT><NUM> does not exist. seekerlogd will chock and die
  at start. Worse if it happens in the middle!

  Sometimes it takes a few seconds after a process ends for that event
  to make it into the log, so I generally wait about 10-20s after I
  think a process/experiment is done to swap out logs.

----------------------------------------------------------------------------------------
UTILS:
------

decodelog - Is the util to decode the binary log to get the ASCII (Human readable)
            log
  USAGE:
    $SEEKER_HOME/Scripts/decodelog < IN_BIN_FILE > OUT_ASCII_FILE
    Note: Those (< and >) are IO redirects. 

    Decodes the binary log. 

----------------------------------------------------------------------------------------
SCRIPTS:
--------

send.pl  - Instructs seekerlogd daemon to stop writing to the current binary log and start
           writing to the next binary log. Or to kill seekerlogd

  USAGE:
    $SEEKER_HOME/Scripts/send.pl [-t]
      -t - terminate seekerlogd. 

           so if seekerlogd is given a format: ~/log_
           and starts writing to ~/log_0,
           executing send.pl 
           makes it to close ~/log_0 and start to write to ~/log_1
           Using the -t option will cause seekerlogd to close the current binary log and 
           the input /dev/seeker_log and terminate.

----------------------------------------------------------------------------------------

change_speed.pl - Script to manually change the speed with the seeker cpufreq governor.
                  PS: You need the seeker_cpufreq.ko inserted and have enabled
                  seeker_cpufreq governor by running

  USAGE:
    $SEEKER_HOME/Scripts/change_speed.pl -p=PATTERN
    PATTERN - A comma separated ordered list of performance states for cpu 0 through
              sizeof(PATTERN). 

      Example:
                  insmod $SEEKER_HOME/Build/seeker_cpufreq.ko
                  $SEEKER_HOME/Scripts/seeker_cpufreq.pl start
                  $SEEKER_HOME/Scripts/change_speed.pl -p=0,0,0,1,1,1,2,2
            
              Sets performance state of cpu 0-2 to 0, 3-5 to 1 and 6-7 to 2

----------------------------------------------------------------------------------------

pattern_speed.pl - Script to change clock speed with a pattern. 
              
  USAGE:
    $SEEKER_HOME/Scripts/pattern_speed.pl -p=PATTERN -i=INTERVAL [-c=CORE]
      PATTERN - A comma separated list of performance states. 
      INTERVAL - A comma separated list of intervals for the equivalent performance
                 state in PATTERN in milli seconds. 
      CORE     - If provided, the pattern is performed on core CORE, else it is
                 performed on all cores.

      example: 
        insmod $SEEKER_HOME/Build/seeker_cpufreq.ko
        $SEEKER_HOME/Scripts/seeker_cpufreq.pl start
        $SEEKER_HOME/Scripts/pattern_speed.pl -p=0,1,2,3,4 -i=100,200,300,400 
        This will cause all cpus to be transitioned first to 0, then after 100ms,
        will transition to 1 then wait for 200ms and so on. This process is 
        repeated infinitely. 
        $SEEKER_HOME/Scripts/pattern_speed.pl -p=0,1,2,3,4 -i=100,200,300,400 -c=4
        this will do the same, but only to core 4.

========================================================================================
ASCII LOG FORMAT
----------------

There are 4 unique kinds of lines in the log files:
SCH,PID,MUT,STATE

SCH format
----------
s,<interval>,<pid>,<cpu>,<instructions>,<Real IPC>,<state requested>,<state given>,<current state>,<reference cycles>
  interval         - The mutation interval number. 
  pid              - The current task's pid
  cpu              - The cpu on which the current task was executing on.
  instructions     - The total amount of instructions the task executed from the last log.
  Real IPC         - Instructions / Real Clocks (Real clocks vary with different clock speeds)
  state requested  - The state which the PDS (Performance directed scheduler) requested.
  state given      - The state which was given to PDS (Can be different because the requested state was overloaded)
  current state    - The state in which the task executed with from last time.
  reference cycles - The total number of reference cycles from last time (Reference cycles count at a constant 
                     rate irrespective of clock speed).

PID format
----------
p,<pid>,<name>
  pid  - The pid of the task
  name - The name of the task with pid = <pid>
  Used to know what task a SCH line belongs to.

MUT format
----------
m,<interval>,r,<req cpus for state 0>,<req cpus for state 1>...,g,<giv cpus for state 0>,<giv cpus for state 1>...
  interval - The mutation interval number 
  req cpus for state X - The requested number of cpus for performance state X
  giv cpus for state X - The number of cpus given to performance state X by the mutator.

STATE format
------------
t,<cpu>,<state>,<residency time>
  cpu - The cpu 
  state - The state with which cpu was executing
  residency time - The time in millisecond's which cpu - cpu spent in performance state - state

========================================================================================
LOG MANAGEMENT UTILS
--------------------

csv2tsv.pl 
----------
  Convert comma separated file to tab separated file
  Note: This is because some tools (Hear matlab?) make it such a bit*h to handle
  comma separated files, that I had to add this. 

  USAGE:
    csv2tsv.pl input.csv output.tsv
    NOTE: Lines which do not start with a number are automatically prefixed
    with a comment character '#'.

pull.pl
-------
  This should make your life easier with the output ASCII files from decodelog.

USAGE: 
  $SEEKER_HOME/Scripts/pull.pl --input  INPUT_ASCII_FILE \
                               --output OUTPUT_DIR       \
                               --bench  APP_NAME         \
                               --what   WHAT_TO_PULL     \
                               --cpus   TOTAL_CPUS       \
                               --benchlist APP_LIST_FILE 

  INPUT_ASCII_FILE - The file which is got by decodelog.
  OUTPUT_DIR       - The dir to place all these logs. 
  WHAT             - sch,mut,st or all 
                     sch - pull only SCH lines
                     mut - pull only MUT lines
                     st  - pull only STATE lines
                     all - pull all (sch,mut & st) lines. 
  TOTAL_CPUS       - The total number of cpus you want ST information. 
  OPTIONAL:
    APP_NAME   - Pull only information pertaining to application with name APP_NAME
    APP_LIST_FILE - If you need more than one app to pull, keep that in a list (One in each line)
                    and use the --benchlist option.
    If neither --bench or --benchlist option is specified, then all logged tasks are outputted.

  OUTPUT DIR LAYOUT:
  ------------------
  *.sch - One comma separated file for each found task.
  FORMAT: <total instructions> <total reference cycles> <interval> <instructions> <reference cylces> <cpu> <IPC> <state> <req state> <given state>
      total instructions     - The cumulative instructions from the start of the task
      total reference cycles - The cumulative instructions from the start of the tasks
      NOTE: First two is to make your plotting needs easier. 

      interval               - The current mutation interval.
      instructions           - Total instructions executed in this sample. 
      reference cycles       - The total reference cycles in this sample (Note reference cycles are not affected by clock speed changes)
      cpu                    - The cpu on which the task executed.
      IPC                    - The Real IPC with which this task executed with
      state                  - The performance state with which this task executed with in this sample.
      req state              - The state which the PDS requested.
      giv state              - The state the PDS was given (Can be different due to the state being overloaded).

  MUT_GIV
  <interval> <cpus given to state 0> <cpus given to state 1> ...
  (Same as MUT format
   
  MUT_REQ
  <interval> <cpus requested for state 0> <cpus requested for state 1> ...
  same as MUT format.

  CPUST_X
  CPU State residency information for CPU X
  <state> <residency time in ms>
   - Self explanatory. 

========================================================================================

DATA MANIPULATION UTILS
-----------------------

interp
------
  A compile time configurable linear spline interpolation tool. I had to write this
  as R just took ages to process each data file. 
  
  USAGE: interp /path/to/input/csv/file /path/to/output/csv/file. INTERVAL(Millions of instructions)

  The configuration is in iconfig.h
  Yes. This is a C++ header. No, this is not a configuration file. The configuration
  is _compiled_ in. This is to improve the speed of the operations. 

  For configuration help refer to iconfig.h. It is well documented. 


smooth
------
  To smooth out data files using the moving window averaging algorithm.
  Actual window length = 2 * WINDOW_LENGTH + 1
    
  USAGE: smooth /pathto/inerp/csv/data /path/to/op/smooth/csv/data WINDOW_LENGTH

  The file is assumed to be run through interp. That is each sample (Line) is assumed
  to be equal in length. 

maxmin
------
  To find a timeline max and min for a bunch of timeline data. Useful when you are plotting
  the max and min time series plots for data from a bunch of experiments.

  USAGE: maxmin /path/to/op/csv/data /path/to/indata1 /indata2 [/indata3 ....]

  The input files are assumed to to run through interp. That is each sample (Line) is assumed
  to be of equal length.

========================================================================================
OTHER DATA COLLECTION TOOLS
---------------------------

powersample.pl
--------------

USAGE: $SEEKER_HOME/Scripts/powersample.pl <OUTPUT FILE>
    OUTPUT FILE - The output file to save the samples. 

  NOTES:
          1. This is a custom hacked script. You will have to modify it for each machine.. (Sorry)
          2. It probes ipmitool, so it must be installed.
          3. Not only that the ipmitool must be working. Try `ipmitool sensors` to check if everything
             is smooth.

========================================================================================
LIBRARIES
---------

state_recommendations
---------------------

This is the libc equivalent to talk to the syscall interface of seeker scheduler. 
make
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
then you can include the header "state_recommendations.h" in  your runtime, and you
get the following functions:

low_freq() - From now on, you will be executing with the lowest frequency.
mid_freq() - From now on, you will be executing with the frequency inbetween low and high
high_freq() - From now on you will be executing with the highest frequency. 
continue_dynamically() - Stop the recommendations, and let seeker decide your frequency.
ignore_task() - From now on, seeker should not do anything to this task. It is free to 
                roam! :-)

For an example use case, check out:
$SEEKER_HOME/Scripts/test_recommendations.c
and check out the Makefile in 
$SEEKER_HOME/Scripts/Makefile:43


seeker.pm
---------
A set of functions I found rewriting for each perl script I wrote. So it is here.
I do not know if I use it anymore... but it is there.

benchmarks.pm
-------------
A set of perl subroutines to help me with the IBS - Iyyer benchmark suite. 
(This is the DRACO benchmark suite, so if you do not know what they are, it is probably
useless to you)

This is used to create the run scripts. 

========================================================================================
Synthetic Benchmarks
--------------------

cd $SEEKER_HOME/SyntheticBenchmarks
make

USAGE:
  $SEEKER_HOME/SyntheticBenchmarks/synth_bench [cpu|mem] [trials]

  cpu|mem - Exercise cpu or memory. 
  trials  - The number of trials. If it runs too fast or too slow, this is the knob.
            Default: 100

========================================================================================
RUNTIME UTILS
-------------

launch
------

refer to 
$SEEKER_HOME/utils/README

========================================================================================
OTHER SCRIPTS
-------------

$SEEKER_HOME/MiscScripts
These were written to create and run experiments using a home bred benchmark suite
called the Iyyer benchmark suite (IBS) or the DRACO Benchmark Suite which is internal
to CU's system's lab which is just a reorganized and generic collection of various
benchmark systems like the SPEC suite. So if you are not part of CU, this will be 
useless to you.

Everything in $SEEKER_HOME/AnalysisScripts

These were _hack_ scripts written to get my analysis done. It may not be useful to
anyone but me. I just needed to version control them too. So, here they are. 

========================================================================================
FULL SYSTEM USE CASE:
---------------------

# Compile ON THE SYSTEM to be loaded on
cd $SEEKER_HOME
make

# Insert the PMU Drivers.
insmod $SEEKER_HOME/Build/pmu.ko

# Insert the seeker cpufreq governor. Note: The cpufreq driver must be in!
insmod $SEEKER_HOME/Build/seeker_cpufreq.ko

# Pick the seeker governor as the current governor.
$SEEKER_HOME/Scripts/seeker_cpufreq.pl start

# load the seeker scheduler
insmod $SEEKER_HOME/Build/seeker_cpufreq.ko  # And other options.

# Start the logging daemon.
$SEEKER_HOME/Scripts/seekerlogd ~/logs/log_

# Do whatever experiments you want 

sleep 20

# Terminate the logging daemon
$SEEKER_HOME/Scripts/send.pl -t

# Remove the seeker scheduling module.
rmmod seeker_scheduler

# Remove seeker as the current cpufreq governor.
# This is important to remove the module.
$SEEKER_HOME/Scripts/seeker_cpufreq.pl stop

# Remove the seeker cpufreq governor.
rmmod seeker_cpufreq

# Remove the PMU drivers.
rmmod pmu   # if AMD
rmmod fpmu  # if Intel

# Decode the logs.
$SEEKER_HOME/Scripts/decodelog < ~/logs/log_0 > ~/logs/log_0.txt

# Pull from the logs
$SEEKER_HOME/Scripts/pull.pl --input ~/logs/log_0.txt --output ~/APP_logs --bench APP --cpus 4

# Enjoy! 
========================================================================================
========================================================================================
REFERENCE:
----------

1. p4sampler, Author: Tipp Moseley, Graduate Student, Department of Computer Science,
University of Colorado, Boulder pmu driver was a derivative work of this.
Also the log interface of seeker is a derivative work of his use to log the system.

2. INTEL IA32/64 system programmers reference manual.

3. INTEL forums.

4. AMD BIOS developers guide. 

5. AMD Forums.

========================================================================================

AUTHOR:
-------

Amithash Prasad, Graduate Student, Department of Electrical and Computer Engineering,
University of Colorado, Boulder
Email: [email protected], 
       [email protected] (I am not going to have the above mentioned id forever!)

========================================================================================

About

seeker-scheduler a method in scheduling madness

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published