|Thesis abstract: |
Whereas hardware is physically responsible for power consumption, hardware operations are guided by software, which is indirectly responsible of energy consumption. Research on Information Technology (IT) energy efficiency has mainly focused on hardware. This thesis focus on software energy consumption with the goal of providing a methodology to identify and reduce energy inefficiencies. In our approach, we estimate the energy consumption of application software independent of the infrastructure on which the software is deployed. Our methodology make a distinction between the usage of computational resources and the unit energy consumption of each resource. In this way, usage of resources and unit energy consumption can be measured independently. As thoroughly discussed in the thesis, this separation allows the definition of energy consumption benchmarks for homogenous clusters of transactions or software applications. These metrics can be used to define classes of energy efficiency within each cluster, thus enabling the comparison of the energy efficiency of similar applications/transactions. Benchmarks are used to identify energy inefficient software applications. The thesis proposes a memoization-based approach to improve the energy efficiency of inefficient software that does not require a refactoring of code. Optimizing code has a direct beneficial impact on energy efficiency, but it requires domain knowledge and an accurate analysis of the algorithms, which may not be feasible and is always too costly to perform for large code bases. We present an approach based on dynamic memoization to increase software energy efficiency without a need for a direct optimization of existing code. We analyze code automatically to identify a subset of pure functions that can be tabulated and automatically store results. The basic idea of our memoization-based approach is to fetch previously computed results from memory to avoid computation. This idea raises a number of research challenges. The thesis discusses a software framework that provides a tool-set to apply memoization to any software application tested on a sample of financial functions provided by a large Italian corporation that have accepted to participate in the empirical testing of our methodology as a pilot case set. Empirical results show how our approach can provide significant energy and time savings at limited costs, with a considerably positive economics impact.