Give a global snapshot algorithm which can be invoked multiple times, but which has the property that if an instance of the algorithm has already been initiated, a new instance will not begin until after the previous one has completed on every node of the system.
Your algorithm should begin taking each snapshot as soon as possible (a node should not continue to wait once it knows that the previous instance of global snapshot has already completed on every node).