Linux Driver for fine-grain and low overhead access to on-chip performance counters
In recent years, energy-efficiency is becoming a key challenge in the High Performance Computing (HPC) domain. Indeed, while the demand for more powerful supercomputers is constantly increasing, integrated computing architectures are facing power/thermal challenges that are limiting the performance benefits of technology scaling. Optimizing for energy efficiency requires methods of correlating the application execution with fine-grain power measurements, as well as architectural events. Current processors, like Intel processors, embeds performance counters to monitor online the energy consumption and other architectural parameters. However, the software libraries which wraps such performance counters becomes bulky and lead to significant overheads when accessed with high-frequency to track fast workload variations. Currently HPC-infrastructure monitoring-systems sample these values with periods above the seconds to limit the overhead. However, most of this overhead is linked to traversing the user-space to kernel-space interface more than the direct access to the counter. Linux OS has already an IIO-Subsystem which allows to efficiently move time traces from kernel-space to user-space, by implementing SW and HW-interrupt methods. However, this is only used to interface with external monitors and not with the internal per-core architectural performance counters.
Goal of this Project → Implementation and testing of a Linux Device Driver for handling architectural performance counters as an IIO device. This project allows the student to get practical experience with Linux Kernel Programming, IIO Linux Subsystem (widely used in Linux-Based SoCs for handling ADCs) and architectural performance counters.
- Experience on writing Linux Device Drivers (kernel-level development).
- Good knowledge of C.
- Knowledge of the Linux Operating System architecture
- 20% Theory
- 50% Implementation
- 30% Testing
Detailed Task Description