On Disk-based and Diskless Checkpointing for Parallel and Distributed Systems: An Empirical Analysis