User Tools

Site Tools


EXternal Caching in Energy Saving Storage Systems (EXCES)



The need for energy-efficient storage systems for personal computers and data centers is well established. Being the only mechanic device in todays computers, the disk is the third most power-hungry component after the CPU and display. Different proposals to adress this problem have been done including spin down policies for the disk, using data migration across drives and energy-aware prefetching and caching.

We designed and implement an energy-optimizer system for the Linux kernel (2.6 series) that uses an external device for caching and prefetching data so it can be retrieved directly from this media. This allows the disk to spin-down for long periods of time and save energy.


EXCES is a system implemented for the Linux kernel (2.6 series) that optimize the secondary storage to save energy by using an external caching device (ECD) for caching and prefetching data. The idea is keep the hottest data of the system in the ECD so accesses to the disk are not required. This allows the disk to spin-down long periods of time and save energy.


EXCES provided us with very difficult challenges:

  • Identify the hottest data in the system.
  • Make movement of data between devices.
  • Redirect the I/O request to the appropiate devices.

For further detail in the design and implementation of EXCES, please refer to the paper(s) below.


  • EXCES: EXternal Caching in Energy Saving Storage Systems pdf ps
    Luis Useche, Jorge Guerra, Medha Bhadkamkar, Mauricio Alarcon, and Raju Rangaswami
    Proceedings of IEEE International Symposium on High-Performance Computer Architecture (HPCA), February, 2008.

The Code

The code is mostly organized by the components described in the paper above. Each folder contains the implementation of one component in the system. Next, it is presented the description of each folder:


This folder contains the implementation of the components to analyze the data. Includes: the planner to perform the reconfigurations (ls_planner.c), the component that rank the pages (page_ranker.c) and the algorithm to find the k-highest ranked pages (topk.c).


Contains most of the implementation of the data structures and some utility functions. Includes: function to substitute the make_request of the target device to the EXCES handler (able_layer_insert.c), a bitarray implementation (bitarray.c), structure to represent the mapping from disk to ECD (block_map_table.c) and function to print a bio (print_bio.c) used mostly for debugging.


Headers for the shared functions.


Contains the indirector of the requests (ls_indirection.c). This file includes the handler of EXCES which substitute the original make_request. It also contains the initialization and cleaning of the module.


This folder list all the files which implement the reconfigurator component of EXCES. Includes: Function that execute the reconfiguration and perform the movement of the blocks between devices (io_reconf.c), structure to keep the reconfiguration state of each block (reconf_phase.c) and the component that decides if a reconfiguration is required (reconf_trigger.c).


WARNING! This code should be used just for research purpose. Note that it destroys the file system of the external device used. Also, it is not entirely bug-free and in rare cases it can damage the file system of the optimized device. This code can be compiled in the Linux kernel version 2.6.24. Download EXCES.

projects/exces/start.txt · Last modified: m/d/Y H:i by raju