\documentclass[../thesis.tex]{subfiles}
\begin{document}

\chapter{Introduction}

Nowadays, resource consumption of software is increasingly becoming a concern for users as well as software developers. With mobile devices dominating the electronics market the need also for having optimal resource consumption is more than clear, but the same need applies to other types of devices. Personal desktops, servers (mainly in the \Gls{hpc} space), \Gls{iot} devices or other smart machines need to perform efficiently as well. 

There is quite a high number of different resources a software can consume. For many of these one can use an abundance of existing tools analysers to cover most, if not all, use cases. However, many of the resources are yet to be properly research. A resource lacking well established tools is energy consumption. Resources like CPU or memory are being optimized for in most software as their are the easiest to optimize for. If a software developer had in their toolbox a tool for quick, reliable and detailed analysis of their software energy consumption, they could start optimizing the software for optimal energy consumption as well. Optimizing for performance can often lead to overheating and in-general unfavourable execution time/energy consumed ratio which optimizing for energy consumption could help to mitigate.

% emphasis is mainly put on correctness and speed, not on cost and effectiveness; developers lack the knowledge and tools for effective and informative energy profiling

Currently, most tools that support measuring energy consumption do not provide detailed enough information and lack any context. We see this as an opportunity to make use of current state-of-the-art technology and existing research to create an open-source profiler for detailed profiling of energy consumption. We believe such profiler could be used as a stepping stone for further research, especially if employed in some wider performance analyses project.

% one-shot profiling is common but continuous with proper visualization is not -> Perun + modules

% For the past decade \emph{continuous integration} (\emph{CI}) and \emph{continuous delivery} (\emph{CD}) have been on the rise and have become standards in software development. Together with the \emph{agile movement}\cite{ManifestoAgileSoftware} it has allowed development teams to shorten the $plan > develop > test > deploy$ cycle while ensuring the same or even higher levels of quality. The automation of unit, system, smoke, regression, load and many other types of testing via \emph{CI} was very often a natural step as they are often very clear to understand (failed/passed) and their results do not usually require any kind of post-processing and analysis. Performance testing and energy-aware testing are disciplines still not widely automated and rely on manual execution by developers.

In this work we build on the research of the domain of energy profiling and different technologies and techniques for profiling energy consumption. We will apply these in a novel open-source energy profiler and a reporter of its findings with support for non-trivial visualizations. With the created profiler we then conduct a list of experiments to showcase its capabilities and demonstrate the usefulness of knowing energy consumption. As the last step we want to integrate the created profiler in Perun, a performance version system.

\paragraph{Structure of the Thesis}

Chapter \ref{background-related-work} summarizes existing research related to the areas of energy profiling and energy-efficient programming. The performance tracker Perun is introduced in Chapter \ref{perun}. Chapter \ref{ebpf} explains the \emph{eBPF} technology, how to use and how it is used in this work. Chapter \ref{existing-methods-technology} cherry-picks technolgies and approaches to energy profiling that will be leveraged in this work from the research in Chapter \ref{background-related-work}. Chapter \ref{sysrapl} covers the technical details of the resulting profiler and a reporting tool for creating visualizations of the profiled data. We explain the profiler's architecture and data format, how well does it perform, and how exactly the visualizer works and what does it produce. The last Chapter \ref{experiments} showcases on several existing open-source projects the capabilities of the created profiler.

\end{document}
