Summary
Traditionally, Internet of Things (IoT) devices have been powered by batteries with finite energy storage. To circumvent the limitations of this finite energy supply, IoT devices are harvesting energy, giving rise to transiently-powered IoT devices. Transiently-powered (or intermittent) IoT networks are networks of resource-constrained devices that are capable of providing correct and timely operation, i.e. operation which meets the required functionality, despite devices experiencing loss of power and crashing. The ensuing crash due to loss of power results in the state of the devices being lost. To persist state, current transient systems save their state on non-volatile memory (NVM) such as flash memory, to enable the transient network to survive the crashes gracefully. The state recording process is called checkpointing. When a crashed device has enough energy, it restarts and reloads the latest saved checkpoint. Due to resource limitations, different rules are devised for checkpointing, e.g., only saving variables that have been changed since the last checkpoint, or periodic checkpointing among others.
Towards this drive to make checkpointing more efficient, recent works have shown that there are programs for which checkpointing adversely affects their performance. Further, for programs that require checkpointing, it appears that there are variables that are more critical than others for correct and timely operation of the network, suggesting that only those critical variables that have been changed since the last checkpoint that need saving. However, little work has been done to identify those critical variables. Additionally, there are relationships across various network layers, making it difficult to decide when and what to checkpoint.
This project will develop the theoretical underpinnings to solve two problems: (i) what variables to checkpoint and (ii) when to checkpoint. The project will involve large scale simulations and running actual testbed experiments to test and validate the theory that will be developed. The candidate needs to have strong programming skills in C/C++, Java and Python. The candidate should also be comfortable with mathematical modelling.
