Docker containers are spreading and becoming the reference tool for managing applications in the cloud. DEEP-mon efficiently monitors performance and power of containers to enable energy awareness and autonomic management of the next generation of cloud computing systems.
By Rolando Brondolin
PhD student @Politecnico di Milano
Data-centers and cloud computing are in our everyday life even if we don’t always see them. From the instant message we sent this morning with our smartphone to car sharing, e-commerce and social media, most of our interactions with the web are powered by cloud computing. In this context, performance and energy efficiency are two important aspects of this web revolution. On the one hand, performance means speed and ease of use for the applications that we use in our everyday life. On the other hand, supporting this performance is a huge cost in terms of energy: data-centers alone represents 2% of the overall energy consumption of the world.
Several techniques were proposed in the past to optimize the energy footprint of data-centers at several layers of the stack, however, the emerging technologies that are used nowadays require to rethink how we manage workloads in this scenario. One of these technologies is Docker, which is a software component able to isolate and virtualize resources for applications running in data-centers. Docker packages each microservice (e.g. an application or a functionality of a complex system) into a container, allowing it to scale horizontally at runtime and to cope with the increasing amount of requests coming from the outside world.
Given that “dockerized” environments are so dynamic and unpredictable, managing each component of such systems is becoming increasingly harder. To cope with this complexity we built a run-time monitoring tool called DEEP-mon. DEEP-mon stands for Dynamic Energy Efficient Power monitor and its goal is to observe how much power the containers are using and how they are using it. This is of paramount importance when dealing with power constrained systems and is the first step towards optimizing power consumption with respect to the performance of an application.
DEEP-mon leverages a component of the Linux OS called Berkeley Packet Filter (BPF). BPF was used to filter and trace network communication, but nowadays it can trace several other things that are going on in our systems. For instance, we can know when an application started to execute on the CPU, and from this data we can trace how it is using the hardware. We can trace CPU usage, execution time and other useful performance metrics. However, our goal is also to measure power consumption of each application. This is not a trivial task, as power consumption can be collected only at the entire CPU level using Intel Running Average Power Limit (RAPL): from a single power measurement we do not know who generated that power consumption. We leveraged the number of cycles each application consumed to understand who is exploiting the hardware the most, and from this we attributed power consumption to each container running in the system. Our approach has a very limited overhead on the system with 3% slowdown of the applications, 1% increase in power usage and negligible impact on network tail latency. These results open the way for novel techniques able to manage power consumption at runtime, reducing energy waste in the long run.