[CRIU] [PATCH v4 2/2] lazy-pages: add support to combine pre-copy and post-copy
Mike Rapoport
rppt at linux.vnet.ibm.com
Fri Oct 7 04:37:49 PDT 2016
On Thu, Sep 22, 2016 at 09:45:11AM +0200, Adrian Reber wrote:
> From: Adrian Reber <areber at redhat.com>
>
> Only the UFFD daemon is aware if pages are in the parent or not. The
> restore will continue to work as any lazy-restore except that pages from
> parent checkpoints will be pre-populated by the restorer.
>
> The restorer will still register the whole memory region as being
> handled by userfaultfd even if it contains pages from parent
> checkpoints. Userfaultfd page faults will only happen on pages which
> contain no data. This means from the parent pre-populated pages will not
> trigger a userfaultfd message even if marked as being handled by
> userfaultfd.
>
> The UFFD daemon knows about pages which are available in the parent
> checkpoints and will not push those pages unnecessarily to userfaultfd.
>
> Following steps to migrate a process are now possible:
>
> Source system:
>
> * criu pre-dump -D /tmp/cp/1 -t <PID>
> * rsync -a /tmp/cp <destination>:/tmp
> * criu dump -D /tmp/cp/2 -t <PID> --port 27 --lazy-pages \
> --prev-images-dir ../1/ --track-mem
>
> Destination system:
>
> * rsync -a <source>:/tmp/cp /tmp/
> * criu lazy-pages --page-server --address <source> --port 27 \
> -D /tmp/cp/2 &
> * criu restore --lazy-pages -D /tmp/cp/2
>
> This will now restore all pages from the parent checkpoint if they
> are not marked as lazy in the second checkpoint.
>
> v2:
> - changed parent detection to use pagemap_in_parent()
>
> v3:
> - unfortunately this reverts
> c11cf95afbe023a2816a3afaecb65cc4fee670d7
> "criu: mem: skip lazy pages during restore based on pagemap info"
> To be able to split the VMA-s in the right chunks for the restorer
> it is necessary to make the decision lazy or not on the VmaEntry
> level.
>
> v4:
> - everything has changed thanks to Mike Rapoport's suggestion
> - the VMA-s are no longer touched or split
> - instead of over 100 lines of changes this is now two line patch
>
> Signed-off-by: Adrian Reber <areber at redhat.com>
Acked-by: Mike Rapoprot <rppt at linux.vnet.ibm.com>
> ---
> criu/uffd.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/criu/uffd.c b/criu/uffd.c
> index 81dc7ae..fbf1cb6 100644
> --- a/criu/uffd.c
> +++ b/criu/uffd.c
> @@ -508,7 +508,8 @@ static int collect_uffd_pages(struct page_read *pr, struct lazy_pages_info *lpi)
> */
> if (base >= vma->e->start && base < vma->e->end) {
> if (vma_entry_can_be_lazy(vma->e)) {
> - uffd_page = true;
> + if(!pagemap_in_parent(pr->pe))
> + uffd_page = true;
> break;
> }
> }
> --
> 2.7.4
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
>
More information about the CRIU
mailing list