From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B87B5C04AB4 for ; Thu, 16 May 2019 13:57:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 941EB20848 for ; Thu, 16 May 2019 13:57:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727779AbfEPN5E (ORCPT ); Thu, 16 May 2019 09:57:04 -0400 Received: from relay.sw.ru ([185.231.240.75]:54072 "EHLO relay.sw.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726911AbfEPN5E (ORCPT ); Thu, 16 May 2019 09:57:04 -0400 Received: from [172.16.25.169] by relay.sw.ru with esmtp (Exim 4.91) (envelope-from ) id 1hRGsK-00075H-1m; Thu, 16 May 2019 16:56:48 +0300 Subject: Re: [PATCH RFC 0/5] mm: process_vm_mmap() -- syscall for duplication a process mapping To: Jann Horn Cc: Andrew Morton , Dan Williams , Michal Hocko , keith.busch@intel.com, "Kirill A . Shutemov" , pasha.tatashin@oracle.com, Alexander Duyck , ira.weiny@intel.com, Andrey Konovalov , arunks@codeaurora.org, Vlastimil Babka , Christoph Lameter , Rik van Riel , Kees Cook , hannes@cmpxchg.org, npiggin@gmail.com, Mathieu Desnoyers , Shakeel Butt , Roman Gushchin , Andrea Arcangeli , Hugh Dickins , Jerome Glisse , Mel Gorman , daniel.m.jordan@oracle.com, kernel list , Linux-MM , Linux API References: <155793276388.13922.18064660723547377633.stgit@localhost.localdomain> From: Kirill Tkhai Message-ID: <89124a45-ddfd-9c96-1957-304f67d4b9bc@virtuozzo.com> Date: Thu, 16 May 2019 16:56:46 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 16.05.2019 16:32, Jann Horn wrote: > On Wed, May 15, 2019 at 5:11 PM Kirill Tkhai 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. > [...] >> The proposed syscall aims to introduce an interface, which >> supplements currently existing process_vm_writev() and >> process_vm_readv(), and allows to solve the problem with >> anonymous memory transfer. The above example may be rewritten as: >> >> void *buf; >> >> buf = mmap(NULL, n * PAGE_SIZE, PROT_READ|PROT_WRITE, >> MAP_PRIVATE|MAP_ANONYMOUS, ...); >> recv(sock, buf, n * PAGE_SIZE, 0); >> >> /* Sign of @pid is direction: "from @pid task to current" or vice versa. */ >> process_vm_mmap(-pid, buf, n * PAGE_SIZE, remote_addr, PVMMAP_FIXED); >> munmap(buf, n * PAGE_SIZE); > > In this specific example, an alternative would be to splice() from the > socket into /proc/$pid/mem, or something like that, right? > proc_mem_operations has no ->splice_read() at the moment, and it'd > need that to be more efficient, but that could be built without > creating new UAPI, right? I have just never seen, a socket memory may be preempted into swap. If so, there is a fundamental problem. But, anyway, like you guessed below: > But I guess maybe your workload is not that simple? What do you > actually do with the received data between receiving it and shoving it > over into the other process? Data are usually sent encrypted and compressed by socket, so there is no possibility to go this way. You may want to do everything with data, before passing to another process. Kirill From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kirill Tkhai Subject: Re: [PATCH RFC 0/5] mm: process_vm_mmap() -- syscall for duplication a process mapping Date: Thu, 16 May 2019 16:56:46 +0300 Message-ID: <89124a45-ddfd-9c96-1957-304f67d4b9bc@virtuozzo.com> References: <155793276388.13922.18064660723547377633.stgit@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org To: Jann Horn Cc: Andrew Morton , Dan Williams , Michal Hocko , keith.busch@intel.com, "Kirill A . Shutemov" , pasha.tatashin@oracle.com, Alexander Duyck , ira.weiny@intel.com, Andrey Konovalov , arunks@codeaurora.org, Vlastimil Babka , Christoph Lameter , Rik van Riel , Kees Cook , hannes@cmpxchg.org, npiggin@gmail.com, Mathieu Desnoyers , Shakeel Butt , Roman Gushchin , Andrea Arcangeli , Hugh Dickins , Jerome Glisse List-Id: linux-api@vger.kernel.org On 16.05.2019 16:32, Jann Horn wrote: > On Wed, May 15, 2019 at 5:11 PM Kirill Tkhai 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. > [...] >> The proposed syscall aims to introduce an interface, which >> supplements currently existing process_vm_writev() and >> process_vm_readv(), and allows to solve the problem with >> anonymous memory transfer. The above example may be rewritten as: >> >> void *buf; >> >> buf = mmap(NULL, n * PAGE_SIZE, PROT_READ|PROT_WRITE, >> MAP_PRIVATE|MAP_ANONYMOUS, ...); >> recv(sock, buf, n * PAGE_SIZE, 0); >> >> /* Sign of @pid is direction: "from @pid task to current" or vice versa. */ >> process_vm_mmap(-pid, buf, n * PAGE_SIZE, remote_addr, PVMMAP_FIXED); >> munmap(buf, n * PAGE_SIZE); > > In this specific example, an alternative would be to splice() from the > socket into /proc/$pid/mem, or something like that, right? > proc_mem_operations has no ->splice_read() at the moment, and it'd > need that to be more efficient, but that could be built without > creating new UAPI, right? I have just never seen, a socket memory may be preempted into swap. If so, there is a fundamental problem. But, anyway, like you guessed below: > But I guess maybe your workload is not that simple? What do you > actually do with the received data between receiving it and shoving it > over into the other process? Data are usually sent encrypted and compressed by socket, so there is no possibility to go this way. You may want to do everything with data, before passing to another process. Kirill