OK, I'll adjust the code into the upstream framework, thanks for your declaration.
> 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 > -- Best Regards Wenchao Xia