  Energy harvesting systems have shown their unique benefit of ultra-long
operation time without maintenance and are expected to be more prevalent in the
era of Internet of Things. However, due to the batteryless nature, they suffer
unpredictable frequent power outages. They thus require a lightweight mechanism
for crash consistency since saving/restoring checkpoints across the outages can
limit forward progress by consuming hard-won energy. For the reason, energy
harvesting systems have been designed with a non-volatile memory (NVM) only.
The use of a volatile data cache has been assumed to be not viable or at least
challenging due to the difficulty to ensure cacheline persistence. In this
paper, we propose ReplayCache, a software-only crash consistency scheme that
enables commodity energy harvesting systems to exploit a volatile data cache.
ReplayCache does not have to ensure the persistence of dirty cachelines or
record their logs at run time. Instead, ReplayCache recovery runtime
re-executes the potentially unpersisted stores in the wake of power failure to
restore the consistent NVM state, from which interrupted program can safely
resume. To support store replay during recovery, ReplayCache partitions program
into a series of regions in a way that store operand registers remain intact
within each region, and checkpoints all registers just before power failure
using the crash consistency mechanism of the commodity systems. For
performance, ReplayCache enables region-level persistence that allows the
stores in a region to be asynchronously persisted until the region ends,
exploiting ILP. The evaluation with 23 benchmark applications show that
compared to the baseline with no caches, ReplayCache can achieve about 10.72x
and 8.5x-8.9x speedup (on geometric mean) for the scenarios without and with
power outages, respectively.
