From patchwork Fri Jul 7 16:52:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Yin, Fengwei" X-Patchwork-Id: 13305124 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id CC357EB64D9 for ; Fri, 7 Jul 2023 16:52:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6FBA56B0072; Fri, 7 Jul 2023 12:52:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6AC928D0005; Fri, 7 Jul 2023 12:52:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 573FE8D0003; Fri, 7 Jul 2023 12:52:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 496C66B0072 for ; Fri, 7 Jul 2023 12:52:53 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 127E5A0137 for ; Fri, 7 Jul 2023 16:52:53 +0000 (UTC) X-FDA: 80985410226.20.3162CE5 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by imf14.hostedemail.com (Postfix) with ESMTP id F331A100015 for ; Fri, 7 Jul 2023 16:52:50 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=T1Oaskz8; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf14.hostedemail.com: domain of fengwei.yin@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=fengwei.yin@intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1688748771; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=n1MYy2yizNW+bwRlKUX2YbX2UWhaWjP2YNbEtM8Q7D8=; b=0pd4dmZ54GJPiQCa2HLLk5JuErK6VuMwrUYX3NRHAWKfIGI8kX+LApviX3KEIR+8gFi8em KZVx2dB2VuKJM+UiPxy8zU868gfjzP+QN0G7CY5fsCYS+7q38mCUkdcTXkE67peCo/qqpW gh96zyhoq834oEFmNq40f1py0MNuO0c= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=T1Oaskz8; dmarc=pass (policy=none) header.from=intel.com; spf=pass (imf14.hostedemail.com: domain of fengwei.yin@intel.com designates 134.134.136.65 as permitted sender) smtp.mailfrom=fengwei.yin@intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1688748771; a=rsa-sha256; cv=none; b=uBdNDrXEqttS1c3cyIVqpx9fDourbe7fhePzG+frUFdSol1fzrBA7GjHeBwNsTHomq8PPB B5miTvyT7lQ5SvdqunlLbZklCT13YsXYru3Bl9ZBy+TPeIGzVnue/ZNtJhMOjfW+uhiD0n RKEpAuagD5DRT5b0+W0uUV83pjvu6iM= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1688748771; x=1720284771; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=hMAoCmMSZm9wJK0rzWzlbRvlWfE6c9KZJN6MJC4MnjE=; b=T1Oaskz87NjS61iNGk2uxDnML1Uw/89Jb+qVNByfZBVIPbRZAYdWuRcf jBNBBKxU8yTm/Uc8eb8xcWaxF2g61tzAWND9G/Olitp1C1diR/O/Z/usb Xxh83HLDcNN3oYGZy6d56jKdRLcQg2CvMuah/KqgpZ0Jnyn1knGlJpwEv AVac9tNo1D5HclpwUQYYkdTiMPOy8kZeP15siDb9/9iOrQ3ljKp3gVG7N xYVFhGlhpil10tUqOmkSodEitXTa/U6G7USWeLUj6xnVXI3TuZyJb0bg2 NcH6Zpx4AfTZgblSPapenEYA9I4VR7wKV3+mhpMGHNzX+RW8bsE+7p0En Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10764"; a="367422316" X-IronPort-AV: E=Sophos;i="6.01,189,1684825200"; d="scan'208";a="367422316" Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jul 2023 09:52:49 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10764"; a="790040971" X-IronPort-AV: E=Sophos;i="6.01,189,1684825200"; d="scan'208";a="790040971" Received: from fyin-dev.sh.intel.com ([10.239.159.32]) by fmsmga004.fm.intel.com with ESMTP; 07 Jul 2023 09:52:46 -0700 From: Yin Fengwei To: linux-mm@kvack.org, linux-kernel@vger.kernel.org, yuzhao@google.com, ryan.roberts@arm.com, shy828301@gmail.com, akpm@linux-foundation.org, willy@infradead.org, david@redhat.com Cc: fengwei.yin@intel.com Subject: [RFC PATCH 2/3] mm: handle large folio when large folio in VM_LOCKED VMA range Date: Sat, 8 Jul 2023 00:52:20 +0800 Message-Id: <20230707165221.4076590-3-fengwei.yin@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230707165221.4076590-1-fengwei.yin@intel.com> References: <20230707165221.4076590-1-fengwei.yin@intel.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: F331A100015 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: hteu7xkb4jiryzrfnxzc1ynn7wgxked4 X-HE-Tag: 1688748770-112207 X-HE-Meta: U2FsdGVkX19i/69aGOo1oQ4fEoPy6H1aFcemmNtEklrwGa1pwohKn7CBIAZBMwo9/4owiIpdhXs9U0YK6NFZgHnLpXiwfvmnTzqwnDVDIX+9lLe4WFC1r7ur4CF3UoOsVwdBeRNopOunUzfGsbrRgDBrPgenAY488vmz8yMzBwI85EC3dthYKybHHMuflZAUMqTlGxECMEz8JfEfpyedcLNVYDgJ4+LJ/FVNrRHK4GJmFNMJSD9yeZ0Bw1Hn81fC4UjH2LsMtgLb72BSbccBcTzQvAwf4RZ9OpBVr2Y15TE9hDiCqRSnnPB7q/cMb8xlh7fNZxh70CAuAjSI+fwG2lOXwulGhTok7OrpbYhZzrTcdSiBeUtlttj0tN8jQbijXyeX5eP2IiJBCz2IAmjdOA3cYDuATEtslxjJCRdBGeM4ZcSpozjgGlMW+LOnKlpv6z6YF2MrXFp63K8d9XRDd4W6StRA3YkidhT0mmq6g2qQ+EIjGdGiRVOYlAQwug8IqQw1mZZno46cVmGM4BpNsTK01h/R+WgS0aEhT0cJETE8bGVHM1rffzS3fORtP6iz+haondGU+dVinDTWCELsDc55A18rEFivfsvuUGMBZB6kjl/4fIZL4WtJWrqan0LjrJH7Fo1hpgBWnuKztn1ZqKh/dMGaGvaN1Q5BK1rI7gesg1Qq3C2pEKGAoaUttrGpk3dyQ9YtRbRrWNxokvhG7rOLppv0JmWkYcW9cFEbr/VnHLRQqR8SkQ5hHsXd+A52szluXbtAcYdXmsJwxIvcA4hazsj2tbCzQCDbxfDIVX+KckFBmNihiLMpSyUc1u7KOYjVqPz1Gw+R2gFjNA8laQG0tNQG3Bef3aPWn/grsrbCpAGmxBnJpp/6g8CqT7UxRbFvlt//ehUGa3c8S8mU3N5OhcZh5M84SlJSqDds1hrihSd0MDn8ZNFj9chwp78bVylVH+R0R+JtdUJi3By 9VylwZfl 0JvWB2cvhBCcBbyibdRCY1KSXW4KjvMngQ4WE6DrLiVlbvstmFJW5l2mPDnauwbCCUc7OjmTTO+BxpPwlqsYHoVGuiMbenhAClUJFuWSveN/uTREuHc0Z4mKtUZy3hS30wNxk/IxE00jzsbEBh/o9zTpobvyoINbdOCW2/Ewm7YHTx3dpnDVg4oZErvRLZd/5OW7I3De13WvShis= 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: If large folio is in the range of VM_LOCKED VMA, it should be mlocked to avoid being picked by page reclaim. Which may split the large folio and then mlock each pages again. Mlock this kind of large folio to prevent them being picked by page reclaim. For the large folio which cross the boundary of VM_LOCKED VMA, we'd better not to mlock it. So if the system is under memory pressure, this kind of large folio will be split and the pages ouf of VM_LOCKED VMA can be reclaimed. Signed-off-by: Yin Fengwei --- mm/internal.h | 11 ++++++++--- mm/rmap.c | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 66117523d7d71..c7b8f0b008d81 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -637,7 +637,8 @@ static inline void mlock_vma_folio(struct folio *folio, * still be set while VM_SPECIAL bits are added: so ignore it then. */ if (unlikely((vma->vm_flags & (VM_LOCKED|VM_SPECIAL)) == VM_LOCKED) && - (compound || !folio_test_large(folio))) + (compound || !folio_test_large(folio) || + folio_in_range(folio, vma, vma->vm_start, vma->vm_end))) mlock_folio(folio); } @@ -645,8 +646,12 @@ void munlock_folio(struct folio *folio); static inline void munlock_vma_folio(struct folio *folio, struct vm_area_struct *vma, bool compound) { - if (unlikely(vma->vm_flags & VM_LOCKED) && - (compound || !folio_test_large(folio))) + /* + * To handle the case that a mlocked large folio is unmapped from VMA + * piece by piece, allow munlock the large folio which is partially + * mapped to VMA. + */ + if (unlikely(vma->vm_flags & VM_LOCKED)) munlock_folio(folio); } diff --git a/mm/rmap.c b/mm/rmap.c index 2668f5ea35342..7d6547d1bd096 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -817,7 +817,8 @@ static bool folio_referenced_one(struct folio *folio, address = pvmw.address; if ((vma->vm_flags & VM_LOCKED) && - (!folio_test_large(folio) || !pvmw.pte)) { + (!folio_test_large(folio) || !pvmw.pte || + folio_in_range(folio, vma, vma->vm_start, vma->vm_end))) { /* Restore the mlock which got missed */ mlock_vma_folio(folio, vma, !pvmw.pte); page_vma_mapped_walk_done(&pvmw);