Performance and Energy Aware Self-Tuning Middleware Components
Physical limits, like power and memory walls, pushed industry towards more complex chip architectures. As a result modern systems rely on multi-core and on out-of-order execution engines, speculative support and hierarchical memory organization, which may lead to several cache levels or non-uniform memory access (NUMA). In such a complex scenario, understanding software structure and thoroughly analyzing its behavior at runtime represent a fundamental, yet challenging, task to address efficiency problems or security issues.
At the same time, a recent study from the Digital Power Group claims that the ICT ecosystem is approaching 10% of world electricity demand. In data centers, energy usage represents one of the major factor affecting operational costs. Moreover, at mobile and Internet of Things scale, devices are generally battery-powered which makes energy usage directly connected to usability. Such concern led manufacturers to introduce hardware mechanisms oriented to improve energy efficiency in operational contexts.
The complexity of the modern software stack, anyhow, is such that it is very difficult to understand what are the performance and energy profiles shown by applications. Traditional profiling approaches, such as those enforced by tools like perf of pin, are not viable to effectively shape the computing power and energy demands of generic applications. Moreover, this complexity is exacerbated by "heisenmonitoring" problems, related to the intrusiveness of profiling activities and their orchestration.
The goal of this research project is to identify methodologies and techniques for the construction of innovative monitoring middleware components. They will allow to extract significant energy and performance traces from generic (distributed and concurrent) applications, in a non-intrusive way. The project's goals also tackle the identification of a proper API to take action (at the level of the system) to control resource usage.