SEEP: Proactive Methodology for Energy-Aware Programming
The SEEP project focuses on the research and development of new approaches to create energy-aware systems.
Computing systems at various scales (embedded systems, mobile computing systems, distributed systems) require effective energy-saving techniques to exploit energy resources in the most efficient manner. To spend energy more efficiently, various energy saving techniques have been established over the past years. Most of these techniques focus on exploiting available hardware energy saving features (e.g. dynamic voltage and frequency scaling, sleep states).
In contrast to these established energy saving techniques, SEEP proposes a new paradigm for energy-aware programming. Energy-aware programming guides developers during the development of system software and software components (e.g. applications) to make programming decisions in the awareness of their impact on energy consumption.
Until now only few tools are available that assist developers to optimize their code at hand for energy efficiency. Beyond that, due to the complexity of systems, examining applications for energy hogs is a very time-consuming task. The SEEP approach turns the modus operandi of energy-aware programming into a forward-looking process. Taking advantage of symbolic execution engines and platform-specific energy profiles, SEEP assists software developers in making application design decisions in the awareness of the decisions' impact on the energy footprint of the code under development. This allows the purposeful design of energy-efficient programs.
Three key aspects are pursued by the SEEP project. First, the framework
provides energy estimates for heterogeneous target platforms. Second SEEP
exploits different profiles to speed up both, the examination of program code and
the calculation of energy estimates. Third, energy estimates are being calculated
Heterogeneous and Proactive Approach
Energy-aware programming requires reliable and accurate tools that support
developers during development. Instead of reacting on energy hotspots reported
by users of an application, SEEP turns this process into a forward-looking
process to avoid such energy bugs before the application is being deployed. Furthermore,
SEEP aims at not being restricted to specific architectures but to be adaptable
to a variety of heterogeneous target platforms. As the framework does not make any
restrictions here, new hardware components and technologies can be
One of SEEP's main principles is the extensive use of profiles. Once an energy
model has been defined for a specific target architecture, energy measurements
are performed to create a concrete target-specific profile. Such
profiles must be created only once, i.e., on the one hand, during the energy
profiling process no active measurements (e.g., voltage, current, time) have to
be taken, and on the other hand, profiles can be reused and
shared among developers. Furthermore, using
profiles speeds up the complete energy estimation process while still providing
accurate energy values. SEEP provides energy profiles for low-level instructions but
also for complete functions.
The aforementioned function profiles are created while the framework is
actually used. Specific applications can be prepared whose execution is
intended for creating as many function profile entries as possible. We
consider this as an iterative, bottom-up approach: at first, low-level
functions that do not use any other functions are analyzed. Once they
have been analyzed, their callers can be analyzed, then the callers of
these callers, and so on. Analysis means in this case that energy
profiling has to be applied, which first needs to use low-level
instruction profiles. Applications that use previously analyzed
libraries benefit from this approach since deeper, low-level
analyses can be skipped and the number of paths that have to be explored
The framework is designed as a three-tier approach. In the first component, the path explorer, all paths of a program under test are analyzed. For this we exploit symbolic execution techniques, which is effective at exploring program paths automatically. In the second component, the complexity explorer, path entities are created, i.e., concrete binaries with predefined input data for each path. In the third component, the profile merger, by means of predefined instruction and function profiles, concrete energy values are being calculated and energy hotspots can be unveiled. This requires to create native target code, which can either be executed using virtualization on the development platform (where SEEP is running) or directly on the respective target platform (for best accuracy). The latter method requires profilers, which can output the number of executions of each target instruction. For instance, this can be achieved by injecting basic block counters directly into target binaries. Basic blocks are code sequences with no branches.
The framework can also be divided into three different layers. The first layer is responsible for the path exploration process. Interaction with the symbolic execution engine (KLEE) takes place here. The second layer is responsible for actual energy profiling exploiting both instruction and function profiles. Hardware-dependent classes are implemented in the target-dependent sub layer.
Timo Hönig, Heiko Janker, Christopher Eibel, Oliver Mihelic, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. Proactive Energy-Aware Programming with PEEK. In Proceedings of the 2014 Conference on Timely Results in Operating Systems (TRIOS '14), 2014.
|OSR (Vol. 45/3)||
Timo Hönig, Christopher Eibel, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. SEEP: Exploiting Symbolic Execution for Energy-Aware Programming. In Best Papers from SOSP 2011 Workshops, pages 58–62, 2012.
Timo Hönig, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. ProSEEP: A Proactive Approach to Energy-Aware Programming. In Proceedings of the 2012 USENIX Annual Technical Conference (ATC 2012), Poster Session, 2012.
Timo Hönig, Christopher Eibel, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. Energy-Aware Programming Utilizing the SEEP Framework and Symbolic Execution. In Proceedings of the 23rd ACM Symposium on Operating Systems Principles (SOSP 2011), Poster Session, 2011.
Timo Hönig, Christopher Eibel, Rüdiger Kapitza, and Wolfgang Schröder-Preikschat. SEEP: Exploiting Symbolic Execution for Energy-Aware Programming. In Proceedings of the 4th Workshop on Power-Aware Computing and Systems (HotPower 2011), 2011.
Institute of Operating Systems and Computer Networks