Difference between revisions of "Disk-less migration"

From CRIU
Jump to navigation Jump to search
(Initial article)
(No difference)

Revision as of 15:19, 14 March 2013

When performing a live migration crtools will put image files with applications memory on a storage user provides. If the images with applications' memory are too big, this will result in big delays, due to the need to copy this data several times. Other than this, in some situation it would be desirable to avoid using the storage at all not to increase the load on it. This article describes how one can do live migration without putting images on disk.

step 1
Prepare a tmpfs mount on both sides, where you will put all images, but those with apps memory. These images are typically very small and will not create significant memory pressure on nodes.
dst# mount -t tmpfs none <dir>
src# mount -t tmpfs none <dir>
step 2
Launch a page server on destination node. The page server will accept pages from crtools and will put them into the tmpfs mount. Since we're about to rucn the apps on destination node, it will have to bear with this memory consumption. The source node will not have to store these images.
dst# crtools page-server --images-dir <dir> --port <port>

After this crtools will wait for incoming connections to read the apps memory and put them into <dir>.

step 3
Dump the applications, just like it should be done when doing live migration, but with options explaining to crtools where the page server is
src# crtools dump --tree <pid> --images-dir <dir> --leave-stopped --page-server --address <dst> --port <port>
step 4
Copy rest images onto destination node
src# scp -r <dir> <dst-node>/<dir>

As was said, CRIU images other than those with pages are very small and this won't take long.

step 5
Restore the applications. By that time page server mush have stopped (check this by it's ret code) and images with pages are already in the <dir>.
dst# crtools restore --tree <pid> --images-dir <dir>
step 6
Kill the tmpfs mount with old images. It's no longer required
dst# umount <dir>
step 7
Kill apps on source node, as they are already on the destination one