On Thu, May 16, 2019 at 3:03 PM Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> wrote: > On 15.05.2019 21:46, Jann Horn wrote: > > On Wed, May 15, 2019 at 5:11 PM Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> wrote: > >> This patchset adds a new syscall, which makes possible > >> to clone a mapping from a process to another process. > >> The syscall supplements the functionality provided > >> by process_vm_writev() and process_vm_readv() syscalls, > >> and it may be useful in many situation. > >> > >> For example, it allows to make a zero copy of data, > >> when process_vm_writev() was previously used: > > [...] > >> This syscall may be used for page servers like in example > >> above, for migration (I assume, even virtual machines may > >> want something like this), for zero-copy desiring users > >> of process_vm_writev() and process_vm_readv(), for debug > >> purposes, etc. It requires the same permittions like > >> existing proc_vm_xxx() syscalls have. > > > > Have you considered using userfaultfd instead? userfaultfd has > > interfaces (UFFDIO_COPY and UFFDIO_ZERO) for directly shoving pages > > into the VMAs of other processes. This works without the churn of > > creating and merging VMAs all the time. userfaultfd is the interface > > that was written to support virtual machine migration (and it supports > > live migration, too). > > I know about userfaultfd, but it does solve the discussed problem. > It allocates new pages to make UFFDIO_COPY (see mcopy_atomic_pte()), > and it accumulates all the disadvantages, the example from [0/5] > message has. Sorry, right, I misremembered that.