The Internet-of-Things includes several billions of battery-powered small-scale devices that enable smart applications such as environmental monitoring, industrial automation, and traffic management.
Using the energy harvested from the environment as the only power source for these devices not only unlocks applications and services considered to be impractical due to battery limitations, but also results in lower maintenance costs, lower environmental impact, and longer device lifetime.
The lack of batteries, in combination with unpredictable power sources, causes devices to compute only when energy is available. As a consequence, the execution model is no longer continuous, but becomes intermittent: devices experience intervals of active computation, interleaved by periods in which they are completely powered off.
The presence of frequent and unpredictable shutdowns creates three major challenges.
The first challenge concerns program forward progress. Devices must preserve the computation done during their active periods. Otherwise, a power failure will cause the loss of the work done until that point. As a consequence, the device will be stuck at executing the same operations across every power failure.
The second challenge concerns the reliability of computation. Devices must guarantee that any intermittent execution of the program leads to the same results and effects that the continuous execution of the same program produces. Otherwise, the device reaches a state unattainable in the continuous execution, and the correctness of the subsequent computation is no longer guaranteed.
The third challenge concerns energy efficiency. Devices must manage the harvested energy efficiently, so to obtain the most possible computation out of it. This requires different optimizations both at software and hardware levels, including execution, communication, and peripheral accesses.
These three major challenges are directly connected and offer plenty of unexplored space: a mechanism for ensuring program forward progress must guarantee a reliable computation, while introducing the lowest possible time and energy overhead.
The current state of the art primarily focuses on the different faces of the first two challenges, proposing different solutions to correctly retain the computational state across power failures and to enable communications between battery-less devices.
The aim of the PhD is to explore new designs to interface hardware and software, with the objective of increasing the system efficiency, while ensuring program forward progress and computational correctness. Starting from a detailed analysis of how the different solutions approach and combine the three challenges, we will identify the set of features required for a reliable forward progress. Then, comparing the current solutions will allow us to verify how the different combinations and implementations of these features lead to different levels of performance, efficiency, and reliability. The entire analysis will help us find bottlenecks and pitfalls of current design choices, and act as a starting point for identifying where and how efficiency can be improved. Based on the corresponding results, we will then explore new approaches and technologies for combining and implementing the set of features required for a reliable forward progress, with the aim of maximizing the overall system efficiency.