Please, read the article about Live migration before this one.
This page describes how to reduce the freeze time of an application by using the memory changes tracking ability.
Migration sequence
The steps below look like those in regular live migration, but include one of more pre-dump stages.
Pre-dump
Take tasks you're about to migrate and pre-dump them into some place. Tasks will remain running after pre-dump, unlike regular dump.
[src]# criu pre-dump --tree <pid> --images-dir <path-to-existing-directory-A>
The directory with images can be on a shared storage, or you can use disk-less migration to avoid the Copy step.
Now you can either proceed to next step and do regular dump, or perform the pre-dump step again. In the latter case pre-dump would generate another set of pre-dump images which will contain memory, that has changed from previous step. Doing several pre-dump stages (or iterations) may reduce the amount of data dumped on dump stage and thus -- smaller freeze time.
Dump
Now you can do regular dump of your processes.
[src]# criu dump --tree <pid> --images-dir <path-to-existing-directory-B> --prev-images-dir <path-to-directory-A-relative-to-B> --leave-stopped
Note, that
- this dump would work faster, than it would if there were no the pre-dump stage, as this dump only takes the memory that has changed, since the pre-dump step.
- the
--prev-images-dir
should contain path to the directory with pre-dump images relative to the directory where the dump images will be put
Copy
Copy images to destination node:
[src]# scp -r <path-to-images-dir> <dst>:/<path-to-images>
Restore
Go to the destination node and restore the apps from images on it:
[dst]# criu restore --tree <pid> --images-dir <path-to-images>
Kill
If everything went OK you can return on the source node and kill stopped tasks on it.
[src]# FIXME put command here