Hi "libvhost-user: madvises for postcopy" for ex, would be nicer imho
On Thu, Aug 24, 2017 at 12:27 PM, Dr. David Alan Gilbert (git) <dgilb...@redhat.com> wrote: > From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> > > Clear the area and turn off THP. > > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > contrib/libvhost-user/libvhost-user.c | 32 ++++++++++++++++++++++++++++++-- > 1 file changed, 30 insertions(+), 2 deletions(-) > > diff --git a/contrib/libvhost-user/libvhost-user.c > b/contrib/libvhost-user/libvhost-user.c > index 5ec54f7d60..d816851c6d 100644 > --- a/contrib/libvhost-user/libvhost-user.c > +++ b/contrib/libvhost-user/libvhost-user.c > @@ -450,11 +450,39 @@ vu_set_mem_table_exec(VuDev *dev, VhostUserMsg *vmsg) > } > > if (dev->postcopy_listening) { > + int ret; > /* We should already have an open ufd need to mark each memory > * range as ufd. > - * Note: Do we need any madvises? Well it's not been accessed > - * yet, still probably need no THP to be safe, discard to be > safe? > */ > + > + /* Discard any mapping we have here; note I can't use MADV_REMOVE > + * or fallocate to make the hole since I don't want to lose > + * data that's already arrived in the shared process. > + * TODO: How to do hugepage > + */ > + ret = madvise((void *)dev_region->mmap_addr, > + dev_region->size + dev_region->mmap_offset, > + MADV_DONTNEED); > + if (ret) { > + fprintf(stderr, > + "%s: Failed to madvise(DONTNEED) region %d: %s\n", > + __func__, i, strerror(errno)); > + } > + /* Turn off transparent hugepages so we dont get lose wakeups > + * in neighbouring pages. > + * TODO: Turn this backon later. > + */ > + ret = madvise((void *)dev_region->mmap_addr, > + dev_region->size + dev_region->mmap_offset, > + MADV_NOHUGEPAGE); > + if (ret) { > + /* Note: This can happen legally on kernels that are > configured > + * without madvise'able hugepages > + */ > + fprintf(stderr, > + "%s: Failed to madvise(NOHUGEPAGE) region %d: %s\n", > + __func__, i, strerror(errno)); > + } > struct uffdio_register reg_struct; > reg_struct.range.start = (uintptr_t)dev_region->mmap_addr; > reg_struct.range.len = dev_region->size + > dev_region->mmap_offset; > -- > 2.13.5 > Errors are non-fatal? patch looks ok to me, despite the TODOs :). Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> -- Marc-André Lureau