From patchwork Fri Apr 30 19:52:27 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michel Lespinasse X-Patchwork-Id: 12234189 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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham 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 9BECDC433ED for ; Fri, 30 Apr 2021 19:53:06 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 4DB276145A for ; Fri, 30 Apr 2021 19:53:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4DB276145A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=lespinasse.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 281F06B0082; Fri, 30 Apr 2021 15:52:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 893BA6B0092; Fri, 30 Apr 2021 15:52:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0081C6B0081; Fri, 30 Apr 2021 15:52:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0118.hostedemail.com [216.40.44.118]) by kanga.kvack.org (Postfix) with ESMTP id 24A746B008C for ; Fri, 30 Apr 2021 15:52:38 -0400 (EDT) Received: from smtpin08.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id DA8F0181AF5D0 for ; Fri, 30 Apr 2021 19:52:37 +0000 (UTC) X-FDA: 78090080754.08.5230EBE Received: from server.lespinasse.org (server.lespinasse.org [63.205.204.226]) by imf08.hostedemail.com (Postfix) with ESMTP id 5B3DD80192E9 for ; Fri, 30 Apr 2021 19:52:14 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=lespinasse.org; i=@lespinasse.org; q=dns/txt; s=srv-14-ed; t=1619812353; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : from; bh=GfsT7km1e4u9essBB1Wu9kC04UOBGN5ahWAVC6IN8es=; b=QJjr+jhIyojTjZZUIgmmlJdhwxp1SplGNE0HRwgP8Nt0MWqhEvdhVMBV6dKGh9nbTPbnl EwzltSshob+oxI6BQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lespinasse.org; i=@lespinasse.org; q=dns/txt; s=srv-14-rsa; t=1619812353; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : from; bh=GfsT7km1e4u9essBB1Wu9kC04UOBGN5ahWAVC6IN8es=; b=wKDBDf36V1KWAErgdFzL/otW+avow+vT/EaKwdglJLtyRP95dA3S7xlKS+lK3mwNFj0lj MHPXq5SZRut4O8MZby6+wWCIuBmJtC8/Zex9JuElWKPSuaeBrbklTpODIHHKojHY3Qp7Sd2 aw4XbgGFObcnn57pMDO9JTHRFsG3cDTzhVCXEamUpBn5vRExQ/8E4+1vI8x6HIx2ZEDzkwR WGynlLA+SouY0L+mVA+lVh/dbllPZsBTwFI86XwEbVz/jaQWEcVzBLsbhScf1TY/3XqI8cF maV2tfOCc2KsvtVGDc/TEZFftizW8kBY1t6UJYzRq1dQRS+JV+xLHrEtv2EQ== Received: from zeus.lespinasse.org (zeus.lespinasse.org [IPv6:fd00::150:0]) by server.lespinasse.org (Postfix) with ESMTPS id B6CC8160365; Fri, 30 Apr 2021 12:52:33 -0700 (PDT) Received: by zeus.lespinasse.org (Postfix, from userid 1000) id A802819F521; Fri, 30 Apr 2021 12:52:33 -0700 (PDT) From: Michel Lespinasse To: Linux-MM , Linux-Kernel Cc: Laurent Dufour , Peter Zijlstra , Michal Hocko , Matthew Wilcox , Rik van Riel , Paul McKenney , Andrew Morton , Suren Baghdasaryan , Joel Fernandes , Andy Lutomirski , Michel Lespinasse Subject: [PATCH 26/29] mm: disable rcu safe vma freeing for single threaded user space Date: Fri, 30 Apr 2021 12:52:27 -0700 Message-Id: <20210430195232.30491-27-michel@lespinasse.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210430195232.30491-1-michel@lespinasse.org> References: <20210430195232.30491-1-michel@lespinasse.org> MIME-Version: 1.0 Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=lespinasse.org header.s=srv-14-ed header.b=QJjr+jhI; dkim=pass header.d=lespinasse.org header.s=srv-14-rsa header.b=wKDBDf36; dmarc=pass (policy=none) header.from=lespinasse.org; spf=pass (imf08.hostedemail.com: domain of walken@lespinasse.org designates 63.205.204.226 as permitted sender) smtp.mailfrom=walken@lespinasse.org X-Stat-Signature: kmnisxhurqoyuc13m1xp3ckx3ak6z5h1 X-Rspamd-Queue-Id: 5B3DD80192E9 X-Rspamd-Server: rspam05 Received-SPF: none (lespinasse.org>: No applicable sender policy available) receiver=imf08; identity=mailfrom; envelope-from=""; helo=server.lespinasse.org; client-ip=63.205.204.226 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1619812334-323111 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Performance tuning: as single threaded userspace does not use speculative page faults, it does not require rcu safe vma freeing. Turn this off to avoid the related (small) extra overheads. For multi threaded userspace, we often see a performance benefit from the rcu safe vma freeing - even in tests that do not have any frequent concurrent page faults ! This is because rcu safe vma freeing prevents recently released vmas from being immediately reused in a new thread. Signed-off-by: Michel Lespinasse --- kernel/fork.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/fork.c b/kernel/fork.c index 7c22bf2b1f9d..18659d802d24 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -381,10 +381,12 @@ static void __vm_area_free(struct rcu_head *head) void vm_area_free(struct vm_area_struct *vma) { #ifdef CONFIG_SPECULATIVE_PAGE_FAULT - call_rcu(&vma->vm_rcu, __vm_area_free); -#else - kmem_cache_free(vm_area_cachep, vma); + if (atomic_read(&vma->vm_mm->mm_users) > 1) { + call_rcu(&vma->vm_rcu, __vm_area_free); + return; + } #endif + kmem_cache_free(vm_area_cachep, vma); } static void account_kernel_stack(struct task_struct *tsk, int account)