From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Laurent Vivier <lvivier@redhat.com>
Cc: qemu-devel@nongnu.org, quintela@redhat.com, aarcange@redhat.com
Subject: Re: [Qemu-devel] [PATCH v2 09/16] postcopy: Use temporary for placing zero huge pages
Date: Fri, 24 Feb 2017 15:46:07 +0000 [thread overview]
Message-ID: <20170224154606.GJ8830@work-vm> (raw)
In-Reply-To: <4c0083ac-7b1d-ace6-d8f0-dfaa1686bd3b@redhat.com>
* Laurent Vivier (lvivier@redhat.com) wrote:
> On 06/02/2017 18:32, Dr. David Alan Gilbert (git) wrote:
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> > The kernel can't do UFFDIO_ZEROPAGE for huge pages, so we have
> > to allocate a temporary (always zero) page and use UFFDIO_COPYPAGE
> > on it.
> >
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > Reviewed-by: Juan Quintela <quintela@redhat.com>
> > ---
> > include/migration/migration.h | 1 +
> > migration/postcopy-ram.c | 23 +++++++++++++++++++++--
> > 2 files changed, 22 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/migration/migration.h b/include/migration/migration.h
> > index c9c1d5f..bd399fc 100644
> > --- a/include/migration/migration.h
> > +++ b/include/migration/migration.h
> > @@ -108,6 +108,7 @@ struct MigrationIncomingState {
> > QEMUFile *to_src_file;
> > QemuMutex rp_mutex; /* We send replies from multiple threads */
> > void *postcopy_tmp_page;
> > + void *postcopy_tmp_zero_page;
> >
> > QEMUBH *bh;
> >
> > diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c
> > index a8b7fed..4c736d2 100644
> > --- a/migration/postcopy-ram.c
> > +++ b/migration/postcopy-ram.c
> > @@ -324,6 +324,10 @@ int postcopy_ram_incoming_cleanup(MigrationIncomingState *mis)
> > munmap(mis->postcopy_tmp_page, mis->largest_page_size);
> > mis->postcopy_tmp_page = NULL;
> > }
> > + if (mis->postcopy_tmp_zero_page) {
> > + munmap(mis->postcopy_tmp_zero_page, mis->largest_page_size);
> > + mis->postcopy_tmp_zero_page = NULL;
> > + }
> > trace_postcopy_ram_incoming_cleanup_exit();
> > return 0;
> > }
> > @@ -593,8 +597,23 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host,
> > return -e;
> > }
> > } else {
> > - /* TODO: The kernel can't use UFFDIO_ZEROPAGE for hugepages */
> > - assert(0);
> > + /* The kernel can't use UFFDIO_ZEROPAGE for hugepages */
> > + if (!mis->postcopy_tmp_zero_page) {
> > + mis->postcopy_tmp_zero_page = mmap(NULL, mis->largest_page_size,
> > + PROT_READ | PROT_WRITE,
> > + MAP_PRIVATE | MAP_ANONYMOUS,
> > + -1, 0);
> > + if (mis->postcopy_tmp_zero_page == MAP_FAILED) {
> > + int e = errno;
> > + mis->postcopy_tmp_zero_page = NULL;
> > + error_report("%s: %s mapping large zero page",
> > + __func__, strerror(e));
> > + return -e;
> > + }
> > + memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size);
> > + }
> > + return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page,
> > + pagesize);
> > }
>
> It's sad to have to allocate 1 huge page just to zero them.
>
> Are you sure the kernel doesn't support UFFDIO_ZEROPAGE for huge page.
> It seems __mcopy_atomic() manages HUGETLB vma (it is called by
> mfill_zeropage(), called by userfaultfd_zeropage())?
That's as I understand it from Andrea; and I think it does fail if you try it.
> Anyway, the code looks good:
> Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Thanks.
Dave
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2017-02-24 15:46 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-06 17:32 [Qemu-devel] [PATCH v2 00/16] Postcopy: Hugepage support Dr. David Alan Gilbert (git)
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 01/16] postcopy: Transmit ram size summary word Dr. David Alan Gilbert (git)
2017-02-24 10:16 ` Laurent Vivier
2017-02-24 13:10 ` Juan Quintela
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 02/16] postcopy: Transmit and compare individual page sizes Dr. David Alan Gilbert (git)
2017-02-24 10:31 ` Laurent Vivier
2017-02-24 10:48 ` Dr. David Alan Gilbert
2017-02-24 10:50 ` Laurent Vivier
2017-02-24 13:13 ` Juan Quintela
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 03/16] postcopy: Chunk discards for hugepages Dr. David Alan Gilbert (git)
2017-02-24 13:48 ` Laurent Vivier
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 04/16] exec: ram_block_discard_range Dr. David Alan Gilbert (git)
2017-02-24 13:14 ` Juan Quintela
2017-02-24 14:04 ` Laurent Vivier
2017-02-24 16:50 ` Dr. David Alan Gilbert
2017-02-24 14:08 ` Laurent Vivier
2017-02-24 15:35 ` Dr. David Alan Gilbert
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 05/16] postcopy: enhance ram_block_discard_range for hugepages Dr. David Alan Gilbert (git)
2017-02-24 13:20 ` Juan Quintela
2017-02-24 13:44 ` Dr. David Alan Gilbert
2017-02-24 14:20 ` Laurent Vivier
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 06/16] Fold postcopy_ram_discard_range into ram_discard_range Dr. David Alan Gilbert (git)
2017-02-24 13:21 ` Juan Quintela
2017-02-24 14:26 ` Laurent Vivier
2017-02-24 16:02 ` Dr. David Alan Gilbert
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 07/16] postcopy: Record largest page size Dr. David Alan Gilbert (git)
2017-02-24 13:22 ` Juan Quintela
2017-02-24 14:37 ` Laurent Vivier
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 08/16] postcopy: Plumb pagesize down into place helpers Dr. David Alan Gilbert (git)
2017-02-24 13:24 ` Juan Quintela
2017-02-24 15:10 ` Laurent Vivier
2017-02-24 15:21 ` Dr. David Alan Gilbert
2017-02-06 17:32 ` [Qemu-devel] [PATCH v2 09/16] postcopy: Use temporary for placing zero huge pages Dr. David Alan Gilbert (git)
2017-02-24 15:31 ` Laurent Vivier
2017-02-24 15:46 ` Dr. David Alan Gilbert [this message]
2017-02-24 17:24 ` Laurent Vivier
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 10/16] postcopy: Load huge pages in one go Dr. David Alan Gilbert (git)
2017-02-24 15:54 ` Laurent Vivier
2017-02-24 16:32 ` Dr. David Alan Gilbert
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 11/16] postcopy: Mask fault addresses to huge page boundary Dr. David Alan Gilbert (git)
2017-02-24 15:59 ` Laurent Vivier
2017-02-24 16:34 ` Dr. David Alan Gilbert
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 12/16] postcopy: Send whole huge pages Dr. David Alan Gilbert (git)
2017-02-24 16:06 ` Laurent Vivier
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 13/16] postcopy: Allow hugepages Dr. David Alan Gilbert (git)
2017-02-24 16:07 ` Laurent Vivier
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 14/16] postcopy: Update userfaultfd.h header Dr. David Alan Gilbert (git)
2017-02-24 16:09 ` Laurent Vivier
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 15/16] postcopy: Check for userfault+hugepage feature Dr. David Alan Gilbert (git)
2017-02-24 16:12 ` Laurent Vivier
2017-02-06 17:33 ` [Qemu-devel] [PATCH v2 16/16] postcopy: Add doc about hugepages and postcopy Dr. David Alan Gilbert (git)
2017-02-24 13:25 ` Juan Quintela
2017-02-24 16:12 ` Laurent Vivier
2017-02-06 17:45 ` [Qemu-devel] [PATCH v2 00/16] Postcopy: Hugepage support Dr. David Alan Gilbert
2017-02-13 17:11 ` Alexey Perevalov
2017-02-13 17:57 ` Andrea Arcangeli
2017-02-13 18:10 ` Andrea Arcangeli
2017-02-13 21:59 ` Mike Kravetz
2017-02-14 14:48 ` Alexey Perevalov
2017-02-17 16:47 ` Andrea Arcangeli
2017-02-20 16:01 ` Alexey Perevalov
2017-02-13 18:16 ` Dr. David Alan Gilbert
2017-02-14 16:22 ` Alexey Perevalov
2017-02-14 19:34 ` Dr. David Alan Gilbert
2017-02-21 7:31 ` Alexey Perevalov
2017-02-21 10:03 ` Dr. David Alan Gilbert
2017-02-27 11:05 ` Alexey Perevalov
2017-02-27 11:26 ` Dr. David Alan Gilbert
2017-02-27 15:00 ` Andrea Arcangeli
2017-02-27 15:47 ` Daniel P. Berrange
2017-02-27 19:04 ` Alexey Perevalov
2017-02-22 16:43 ` Laurent Vivier
2017-02-24 10:04 ` Dr. David Alan Gilbert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170224154606.GJ8830@work-vm \
--to=dgilbert@redhat.com \
--cc=aarcange@redhat.com \
--cc=lvivier@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.