Reducing fate sharing in software systems via fine-grained checkpoint and restore