  This paper presents CoSpec, a new architecture/compiler co-design scheme that
works for commodity in-order processors used in energy-harvesting systems. To
achieve crash consistency without requiring unconventional architectural
support, CoSpec leverages speculation assuming that power failure is not going
to occur and thus holds all committed stores in a store buffer (SB), as if they
were speculative, in case of mispeculation. CoSpec compiler first partitions a
given program into a series of recoverable code regions with the SB size in
mind, so that no region overflows the SB. When the program control reaches the
end of each region, the speculation turns out to be successful, thus releasing
all the buffered stores of the region to NVM. If power failure occurs during
the execution of a region, all its speculative stores disappear in the volatile
SB, i.e., they never affect program states in NVM. Consequently, the
interrupted region can be restarted with consistent program states in the wake
of power failure. To hide the latency of the SB release, i.e., essentially NVM
writes, at each region boundary, CoSpec overlaps the NVM writes of the current
region with the speculative execution of the next region. Such instruction
level parallelism gives an illusion of out-of-order execution on top of the
in-order processor, achieving a speedup of more than 1.2X when there is no
power outage. Our experiments on a set of real energy harvesting traces with
frequent outages demonstrate that CoSpec outperforms the state-of-the-art
scheme by 1.8~3X on average.
