|dc.description.abstract||The power cost of running a data center is a significant portion of its total annual operating budget. Although the hardware subsystems, namely, processors, memory, disk, and network interfaces of a server actually consume power, it is the software activities that drive the operations of the hardware subsystems leading to varying dynamic power cost. With the aim of reducing power bills of data centers, "Green Computing" has emerged with the primary goal of making software more energy efficient without compromising the performance. Developers play an important role in controlling the energy cost of data center software while writing code.
Bearing green principles in mind during design and coding stages of the software life-cycle can have a great impact on the energy efficiency of the final software product. There are a number of ways to optimize application programs at their design stages but it is difficult for the developers to analyse their applications in terms of power cost on the real servers. Reading big data, moving large amount of data from one server to another, compressing data to gain storage space, and decompressing it back are some key operations that are performed extensively on large scale servers in data centers.
In the first part of this thesis, we present the design of an automated test bench to measure the power cost of an application running on a server. We show how our test bench can be used by software developers to measure and improve the energy cost of two Java file access methods. Another benefit of our test bench has been demonstrated by comparing the energy footprint measurements of compression and decompression features provided by two popular Linux packages: 7z and rar. This information will be helpful in choosing a Green Software among others to perform a desired function.
In the second part, we show how software developers can contribute to energy efficiency of servers by choosing energy efficient APIs (Application Programming Interface) with the optimal choice of parameters while implementing file reading, file copy, file compression and file decompression operations in Java. We performed extensive measurements of energy cost of those operations on a Dell Power Edge 2950 machine running Linux and Windows servers. Measurement results show that energy costs of various APIs for those operations are sensitive to the buffer size selection.
The choice of a particular Java API for file reading with different buffer sizes has significant impact on the energy cost, giving an opportunity to save up to 76%. To save energy while copying files, it is important to use APIs with tunable buffer sizes, rather than APIs using fixed size buffers. In addition, there is a trade off between compression ratio and energy cost: because of higher compression ratio, xz compression API consumes more energy than zip and gzip compression APIs.
The third part of the thesis presents a design of a framework in which one developer generates energy cost models for the common design options. Afterwords, other developers can make use of those models to find the energy costs for the same design options instead of direct measurements.
Overall, this thesis makes a contribution to reduce the perception gap between high level programs and the concept of energy efficiency.||en