Developing Energy-Aware Software

Steven te Brinke

promotor: prof. dr. Mehmet Akşit (UT)
co-promotor: Dr.-Ing. C. Bockisch (OU)
Universiteit Twente
Date: 4 June, 2015
Thesis: PDF


Awareness of environmental sustainability, together with an increasing use of software, makes optimization of software energy consumption evermore important. Energy is one of many resources that is managed by software, and reducing energy consumption cannot be considered without taking into account the trade-offs with other resources and services.

Optimization techniques, implemented in software, can lead to substantial reduction of resource consumption, within both the computer system and the system being controlled. This thesis focusses on the reduction of energy consumption by controlling various external hardware components that are energy intensive.

Today’s software faces the problem of complexity, and modularization is considered as means to cope with the complexity of software. Therefore, we modularized energy optimizers from the rest of the software. This thesis introduces a modeling notation that supports energy behavior. Our notation is used to understand the energy behavior of the system and to analyze which control strategy reduces the energy consumption. We also present guidelines for designing models that contain energy behavior and present a method to automatically extract models, including energy behavior, from source code together with profiling of the application. These Resource-Utilization Models (RUMs) are over-abstractions of the application and can be analyzed formally, for example, with the model checker Uppaal.

Energy is actually consumed during the execution of the software. Therefore, it is inevitable to carry out optimizations at runtime. In order to support such software design, it must be possible to reuse the energy models at runtime without compromising the modularity of the implementation. However, fully supporting our models in a mainstream programming language reduces the readability of the source code. Therefore, this thesis introduces a programming language, named Co-op, that aims to address this issue. Co-op can be positioned between Aspect-Oriented Programming (AOP) and a Meta-Object Protocol (MOP): it is less expressive than a full MOP, but more expressive than AOP. This way, it supports all operations needed for implementing our models, because as well too expressive as too limiting languages reduce the readability of the source code.

Combining design and implementation support for Resource-Utilization Models allows software developers to optimize the energy consumption of their software in a modular way. This reduces the energy footprint of software while improving its maintainability and understandability. Hopefully, our approach will be adopted in practice to create a better planet with higher quality software.