libhashckpt:基于哈希的GPU增量检查点技术
1 背景与概述
在大规模应用中,检查点性能对应用的可扩展性影响巨大。许多高性能应用为了减少保存检查点状态的时间(即检查点提交时间),采用了特定于应用的检查点机制。这种方法虽然能减少写入磁盘的应用状态,但需要深入了解应用的计算和数据结构,难以推广到其他应用。
传统检查点/重启的一种常见优化方法是增量检查点。它通过仅保存与上一个检查点的状态差异,来减小检查点的大小和写入时间。然而,现有的增量方法在减小检查点大小方面效果不佳,主要原因是依赖页面保护机制来确定检查点间隔内哪些地址范围被写入(即变脏)。这种基于页面的机制以操作系统页面大小为粒度,即使一个页面中只有一个字节被写入,整个页面也会被标记为脏并保存。而且,若相同值被写入某个位置,该页面仍会被标记为脏。现代处理器页面大小的增加以及高性能计算(HPC)应用在大页面上的性能提升,进一步加剧了这些问题。
为解决这些限制,我们引入了libhashckpt,这是一种混合增量检查点方法。它结合了页面保护机制、哈希机制和MPI钩子,以确定页面内发生变化的位置。为减少哈希计算的开销,libhashckpt还利用图形处理单元(GPU)来卸载哈希计算任务。
2 方法
2.1 概述
libhashckpt中的基于哈希的增量检查点机制工作流程如下:
1. 标记潜在脏页 :应用运行时,库使用页面保护机制将检查点间隔内被写入的虚拟内存页面标记为潜在脏页。对于MPI应用,库还会拦截接收调用,将消息缓冲区标记为脏页,因为用户级网络硬件引起的内存变化不受处理器页面保护机制的约束。
2.