[v5,0/8] lazy-pages: add support for remote pages

Submitted by Adrian Reber on June 30, 2016, 12:53 p.m.

Details

Message ID 20160630125311.GI28340@redhat.com
State Rejected
Series "criu: make pagemap friendlier to random access"
Headers show

Commit Message

Adrian Reber June 30, 2016, 12:53 p.m.
I also tried this version of your patches and it still works.

I like that the pages are now marked as lazy/zero during dump. This is
something I thought being necessary when combining pre-copy and
post-copy.

Looking with crit at the output of my pagemap I see, in my example, that
0x7ffc8829b000 is only marked as lazy but not as zero. Lazy restoring the
process claims that it is a zero page:

(08.030380) lazy-pages: uffdio_zeropage.range.start 0x7ffc8829b000
(08.030410) lazy-pages: ioctl UFFDIO_ZEROPAGE rc 0x0

It is not clear to me if that is the way it is supposed to be or if
something is going wrong.

Also, when the restore finishes the uffd daemon claims that not all pages have
been transferred, which can be solved with the following simple patch:



		Adrian


On Wed, Jun 29, 2016 at 08:55:05AM +0300, Mike Rapoport wrote:
> Hi,
> 
> Yet another respin.
> The most significant difference is addition of lazy and zero pages notion.
> This makes the pagemap somewaht more consistent. The zero pages were not
> strictly necessary for the current series, but I think that this
> information will be very relevant for lazy-pages performance optimizations.
> 
> v5 changes:
> * added notion of zero pages and lazy pages in the pagemap.
> * added several tcp_{cork,nodelay} to speedup network tranfers
> 
> v4 changes:
> * fixed ppb_alloc_resize to pass nr_pages instead of nr_bytes to fcntl
> * added removal of ppb's right after they are spliced to socked
> 
> v3 changes:
> * fixed initialization of pp->own_iovs, thanks Mr. Jenkins
> 
> v2 changes:
> * added helpers to page-xfer to reduce code duplication
> * modified protocol between dump side page server and lazy pages daemon as
> per Pavel's comments
> * some changes in the way parasite_dump_pages_seized is refactored. There's
> still more to improve here, even without addition of lazy pages support :)
> 
> TODO:
> * cointinue refactoring of page-reader to support random access and remote
> page reads
> * make lazy-pages non-blocking with respect to #PFs
> * performance imporvements
> 
> Mike Rapoport (8):
>   criu: page-pipe: add ability to allocate IOVs
>   criu: slightly refactor memory dump to support delaying it
>   criu: page-pipe: add a wrapping structure for holes and pages iovs
>   criu: page-{pipe,xfer}: add helper function for dumping holes
>   criu: pagemap: add entries for zero pages
>   criu: add ability to skip writing lazy pages
>   criu: page-xfer: add PS_IOV_GET interface
>   criu: lazy-pages: enable remoting of lazy pages
> 
>  criu/cr-dump.c                  |  57 +++++++---
>  criu/include/mem.h              |   3 +-
>  criu/include/page-pipe.h        |  33 ++++--
>  criu/include/page-xfer.h        |   6 +-
>  criu/include/parasite-syscall.h |   1 -
>  criu/include/pstree.h           |   2 +
>  criu/include/stats.h            |   2 +
>  criu/mem.c                      |  72 ++++++++-----
>  criu/page-pipe.c                | 102 +++++++++++-------
>  criu/page-xfer.c                | 234 ++++++++++++++++++++++++++++++----------
>  criu/pagemap.c                  |  27 +++--
>  criu/parasite-syscall.c         |   2 +
>  criu/shmem.c                    |  13 +--
>  criu/stats.c                    |   2 +
>  criu/uffd.c                     |   9 +-
>  images/pagemap.proto            |   2 +
>  images/stats.proto              |   3 +
>  17 files changed, 402 insertions(+), 168 deletions(-)
> 
> -- 
> 1.9.1
>

Patch hide | download patch | download mbox

diff --git a/criu/uffd.c b/criu/uffd.c
index 9dee9d9..00180dd 100644
--- a/criu/uffd.c
+++ b/criu/uffd.c
@@ -418,6 +418,7 @@  static int uffd_zero_page(struct lazy_pages_info *lpi, __u64 address)
                return -1;
        }
 
+       lpi->copied_pages++;
        return ps;
 }
 

Comments

Mike Rapoport July 3, 2016, 5:14 a.m.
On Thu, Jun 30, 2016 at 3:53 PM, Adrian Reber <areber@redhat.com> wrote:
> I also tried this version of your patches and it still works.
>
> I like that the pages are now marked as lazy/zero during dump. This is
> something I thought being necessary when combining pre-copy and
> post-copy.
>
> Looking with crit at the output of my pagemap I see, in my example, that
> 0x7ffc8829b000 is only marked as lazy but not as zero. Lazy restoring the
> process claims that it is a zero page:
>
> (08.030380) lazy-pages: uffdio_zeropage.range.start 0x7ffc8829b000
> (08.030410) lazy-pages: ioctl UFFDIO_ZEROPAGE rc 0x0

Hmm, this seems like a bug :(

> It is not clear to me if that is the way it is supposed to be or if
> something is going wrong.
>
> Also, when the restore finishes the uffd daemon claims that not all pages have
> been transferred, which can be solved with the following simple patch:

Thanks for the fix

> diff --git a/criu/uffd.c b/criu/uffd.c
> index 9dee9d9..00180dd 100644
> --- a/criu/uffd.c
> +++ b/criu/uffd.c
> @@ -418,6 +418,7 @@ static int uffd_zero_page(struct lazy_pages_info *lpi, __u64 address)
>                 return -1;
>         }
>
> +       lpi->copied_pages++;
>         return ps;
>  }
>
>
>
>                 Adrian
>
>
> On Wed, Jun 29, 2016 at 08:55:05AM +0300, Mike Rapoport wrote:
>> Hi,
>>
>> Yet another respin.
>> The most significant difference is addition of lazy and zero pages notion.
>> This makes the pagemap somewaht more consistent. The zero pages were not
>> strictly necessary for the current series, but I think that this
>> information will be very relevant for lazy-pages performance optimizations.
>>
>> v5 changes:
>> * added notion of zero pages and lazy pages in the pagemap.
>> * added several tcp_{cork,nodelay} to speedup network tranfers
>>
>> v4 changes:
>> * fixed ppb_alloc_resize to pass nr_pages instead of nr_bytes to fcntl
>> * added removal of ppb's right after they are spliced to socked
>>
>> v3 changes:
>> * fixed initialization of pp->own_iovs, thanks Mr. Jenkins
>>
>> v2 changes:
>> * added helpers to page-xfer to reduce code duplication
>> * modified protocol between dump side page server and lazy pages daemon as
>> per Pavel's comments
>> * some changes in the way parasite_dump_pages_seized is refactored. There's
>> still more to improve here, even without addition of lazy pages support :)
>>
>> TODO:
>> * cointinue refactoring of page-reader to support random access and remote
>> page reads
>> * make lazy-pages non-blocking with respect to #PFs
>> * performance imporvements
>>
>> Mike Rapoport (8):
>>   criu: page-pipe: add ability to allocate IOVs
>>   criu: slightly refactor memory dump to support delaying it
>>   criu: page-pipe: add a wrapping structure for holes and pages iovs
>>   criu: page-{pipe,xfer}: add helper function for dumping holes
>>   criu: pagemap: add entries for zero pages
>>   criu: add ability to skip writing lazy pages
>>   criu: page-xfer: add PS_IOV_GET interface
>>   criu: lazy-pages: enable remoting of lazy pages
>>
>>  criu/cr-dump.c                  |  57 +++++++---
>>  criu/include/mem.h              |   3 +-
>>  criu/include/page-pipe.h        |  33 ++++--
>>  criu/include/page-xfer.h        |   6 +-
>>  criu/include/parasite-syscall.h |   1 -
>>  criu/include/pstree.h           |   2 +
>>  criu/include/stats.h            |   2 +
>>  criu/mem.c                      |  72 ++++++++-----
>>  criu/page-pipe.c                | 102 +++++++++++-------
>>  criu/page-xfer.c                | 234 ++++++++++++++++++++++++++++++----------
>>  criu/pagemap.c                  |  27 +++--
>>  criu/parasite-syscall.c         |   2 +
>>  criu/shmem.c                    |  13 +--
>>  criu/stats.c                    |   2 +
>>  criu/uffd.c                     |   9 +-
>>  images/pagemap.proto            |   2 +
>>  images/stats.proto              |   3 +
>>  17 files changed, 402 insertions(+), 168 deletions(-)
>>
>> --
>> 1.9.1
>>