In this talk, we present a light-weight software-only checkpointing framework that heavily leverages on compiler analysis and runtime techniques to aggressively optimize checkpointing performance. Programs are instrumented on source level through either programmer or compiler introduced annotations. Individual memory location is backed up only if there is a memory write into it. Optimizations focus on hoisting backup function calls from within loops and aggregating multiple backup calls into a single one covering a consecutive memory range, so that i) the number of backup calls is minimized and ii) the amount of to-be-copied memory is minimized. Finally, each memory backup operation is optimized from a function call into one or a few memory copy instructions, with only necessary bookkeeping structures for recovery.