OK, I will try to give a short overview on the functionality. First, we decided to use 'internal' snapshots for our 'live snapshot' implementation. Internal snapshots almost always use some kind of reference counting, making snapshot action (like 'create/delete snapshot') quite efficient and fast.
Internal snapshot totally depends on the storage backend. For now we can create internal snapshots on the following storage backend: * qcow2 files * rbd * sheepdog * nexenta iscsi As you can see, creating internal snapshots sometimes needs external tool. For example we use the nexenta API to create snapshots, while we use libiscsi to access them inside qemu. So our snapshot implementation uses the following steps: 1.) qmp: savevm-start [statefile] This save the VM state into [statefile] and then stops the VM. 2.) qga freezefs 3.) create snapshots: either using external tools or by qmp: snapshot-drive 4.) gqa unfreezefs 5.) qmp: savevm-end This restarts/resumes the VM > Have some questions: > in qmp_savevm_start(), vm_stop(RUN_STATE_SAVE_VM), I think this will > stop the VM running make it not lively, am I right? Yes, we need to halt the VM for a short period of time while we make snapshots. But that time is usually short. - Dietmar