by Adel Noureddine and Olivier Le Goaër (Université de Pau et des Pays de l’Adour)
Reducing the energy and carbon footprint of software is a major concern for practitioners and researchers today. But what tools does a student in computer science or a professional developer have at their disposal to improve the energy efficiency of their software? At our LIUPPA laboratory, we create and develop tools to help software developers understand and improve the energy efficiency of their software.
With the rise of the ecological question and sustainable development in the economical and political agenda worldwide, the information technology (IT) sector is receiving increasing attention. Indeed, its ecological impact (energy consumption, induced CO2 emissions and resource exhaustion) cannot be ignored. Among the different layers in modern systems, the role of software is paramount in reducing the energy and carbon footprint of IT industries.
As stated in recent surveys, developers need tools to help them get a better understanding of the energy consumption of software systems at large and the root causes behind it, and then to find efficient ways to improve it. This implies providing tools to measure power and energy consumption, but also tools to make the link between energy measurements and source code in order to improve the software quality from an ecological perspective.
When tackling the energy question, the reality of modern software development involves targeting different platforms (IoT, server, mobile devices), at different times (runtime, design-time), and at different granularity levels (system, software, lines of code).
In our laboratory, we design and build multiple tools aimed at filling the gap in measuring and optimising energy consumption of software systems. We describe, below, our main four tools that are aimed at covering multiple platforms, operating systems, and stages of software lifecycles:
- PowDroid [L1] is a command-line tool collecting system-wide energy-related metrics from any Android device plugged through USB to a desktop PC. Metrics include status of energy-hungry components over time (Screen, GPS, Wifi, etc.), along with evolution of physical measures (voltage, charge, intensity, power). It gives real energy consumption of a hardware device. If an app is tested in good isolation (i.e., without running other apps or services), PowDroid can therefore give an estimation of the energy consumption of an app itself. The tool is straightforward to use and generates a detailed and continuous CSV file of the energy consumption of the Android phone.
- PowerJoular [L2] is a multi-platform power-monitoring tool that can monitor, in real time, the power consumption of hardware components (CPU, GPU) and software (at the process level). It currently supports Intel and AMD CPUs on GNU/Linux, Nvidia GPUs, and Raspberry Pi’s ARM CPUs. PowerJoular uses RAPL for Intel/AMD CPU energy, and regression models we build for ARM CPU energy. The tool can run automatically with a systemd service, and write export data for later analysis. Therefore, it can also be used by system administrators to monitor a fleet of devices (such as devices deployed in an industrial setup, or multiple servers in a data centre). PowerJoular is written in Ada and has low overhead for runtime monitoring.
- JoularJX [L3] is a Java-based agent that provides real-time power monitoring of methods in Java applications. The tool supports Linux (using RAPL) and Windows (using Intel’s API), and Java 11+. JoularJX exports its power readings in a CSV file on runtime (a file is created and overwritten every second), and therefore allows real-time monitoring of power fluctuations of each method in a Java application. It can also provide total energy readings at the program's end. JoularJX provides valuable input for software developers to diagnose and improve the energy efficiency of their software, with fine-grained and real-time power monitoring that allows tracing an energy profile through time for each method of an application.
- ecoCode [L4] is a sonarQube plugin that extends clean code with green code. The most advanced component so far targets native Android projects written in Java, enabling the static detection of 40 energy code smells on any codebase. The android-specific smells catalogue originated from existing research literature, mining of the Android API reference and interviews of senior mobile app developers. It also comes with a customised UI for a new user experience on that topic. New components are already underway for this growing open source project in order to target further technologies (pure java or python programs, iOS projects, etc.).
Our tools series covers a wide spectrum of energy and power tools aimed at helping software developers and administrators monitor and optimise devices and software systems, and to aid developers in designing lower carbon software. We hope our tools help the research community in conducting more empirical software research around green IT, and help practitioners and software developers on both legacy and new systems.
 F. Bouaffar, O. Le Goaer, A. Noureddine, “PowDroid: Energy Profiling of Android Applications”, in Proc. of SUSTAINSE/ASE'21, 2021.
 A. Noureddine, “PowerJoular and JoularJX: Multi-Platform Software Power Monitoring Tools”, in Proc. of IE2022, 2022.
 O. Le Goaer, J. Hertout, “ecoCode: a SonarQube Plugin to Remove Energy Smells from Android Projects”, in Proc. of ASE 2022, 2022.