[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