Trading Functionality for Power within Applications

When operating systems and hardware manage power and energy, they must be conservative in order to deliver requested resources while maintaining an expected rate of system throughput. Application-level energy management is more flexible, because applications can choose to request fewer resources or expect less performance, effectively trading accuracy or runtime for power. We propose to leverage this flexibility with energy exchanges, a C++ library extension that allows software to dynamically react to measured power and energy use by reducing functionality. 1. Background and Problem Given energy’s status as a precious commodity, many have ideas about how to police its use. Solutions for power and energy management abound, from hardware to the operating system to the virtual machine and the compiler. At the base of the stack, hardware has become dynamically adjustable, offering a range of supply voltages, operating frequencies, and sleep states. In the middle, operating systems tune hardware based on the measured and expected needs of applications running above. For example, Linux has policies to manage processor idle states and frequency scaling [5], power-aware scheduling algorithms have been proposed to schedule applications such that resource slow-downs can be made for longer periods or at a larger scale [4]. Such hardware and operating system adjustments need no application-level changes. Sometimes, this is desirable: many application developers cannot or will not modify their programs. However, keeping applications out of the energy management picture limits efficiency potentials, because applications have three energy control mechanisms that lower levels do not. First, only applications have the ability to request fewer processing and memory resources; hardware