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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 930A7C3271E for ; Mon, 8 Jul 2024 11:03:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F5856B0083; Mon, 8 Jul 2024 07:03:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1A5916B0088; Mon, 8 Jul 2024 07:03:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 094CB6B0089; Mon, 8 Jul 2024 07:03:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id E0E5D6B0083 for ; Mon, 8 Jul 2024 07:03:06 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 94D77121281 for ; Mon, 8 Jul 2024 11:03:06 +0000 (UTC) X-FDA: 82316298372.03.85A4FC0 Received: from mail-oi1-f169.google.com (mail-oi1-f169.google.com [209.85.167.169]) by imf10.hostedemail.com (Postfix) with ESMTP id AA5BBC0021 for ; Mon, 8 Jul 2024 11:03:03 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=none); spf=pass (imf10.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.167.169 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720436561; a=rsa-sha256; cv=none; b=7PRqi+cIH8AzP0Axy1/cvp2zHSs9/wpPfL8uLE+VvpejoCScn62cEdq7Vzmdt7L7EydG+Z PnUsQGkqtFinJMmRmrJFoMekq2X6czpA3c7RGpS/q+Hd83odk/dy8lcyHBpQjYdomruOM3 a9+3sVraxt7yda0uKlrToDsY13v5FJQ= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=kernel.org (policy=none); spf=pass (imf10.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.167.169 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720436561; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bo4b9I6ylPe18YYNtc6T8gfq4Lk6GA+7kAUDRH8ZCsQ=; b=1Q2GNf7STrh22YztKP9Xi5uhHe2GClr1qFD2He9HFVi2QR148BLvuXK51Irt1hdF2lVaOn dpFQ7APAKMsK8j08eAL1Ytd6eXUZJnSMGEs9rMBWsb9rwuk8tqIPg9yfjREAo4iuhARAf6 rmQtSQZaXMxfLm8ohSFyrxVxCaKLjdA= Received: by mail-oi1-f169.google.com with SMTP id 5614622812f47-3d9303ae2f2so558239b6e.2 for ; Mon, 08 Jul 2024 04:03:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720436583; x=1721041383; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bo4b9I6ylPe18YYNtc6T8gfq4Lk6GA+7kAUDRH8ZCsQ=; b=Z1Dr36UpE9HLYjmSUSxIOCtUZ0tVCg0Ah2glvYikmNJ9RmAYMAPX93W2/nmLuGpoW7 9Qs3IxJ9k0jJIswHg9WbktVru9dDl6Ixt3EBuTDLiK818bLyqnSEwy5vgWk5rxepkDg6 GvRInxjvh05n+Td3W4F7Qupj79XRoJzjRgTD++sHYIqESGBwhy+AfigTekrCA8MulNsb HmYCUgKAx1v8DQprWb7HmD+Q/gRGyOvXqM/D6mGGocE1G3VphixRSZisdrZ6wAulbRaA PPvgrlhHE0+B4gE2Y998kSwM/CP86MT+B/Z3On6eLVln2KjdaCa141bRhu4lrVAmU8hu vg0Q== X-Forwarded-Encrypted: i=1; AJvYcCUmMkClNG8iyRTFnX0Z1T/IDX4opm+gZR+LLvgQOWi0qHHlNCC/toPMHqXvr+cHkm9LdolRj+3uSY4GS4AyaY3is7M= X-Gm-Message-State: AOJu0Yxi+8YS2yN0z+2+dAXNcAbynjQ1XGau8czcIKWx3y8c+zJdDjOc yyF4QauSb32zue928IE5/2c0kuYE1A3GopQ6p30YZvtodWmyoQ3/vjTiAD3KIuNJZt/ca8BqR6t C26lswj3qo9Z12zFWfCyx22dEuOs= X-Google-Smtp-Source: AGHT+IEcGrboi/x6BChRZ2eScFilwlGVYUMOXXFawTk+0g+q64HkG66lldwJx0EkghEqJmRQGNvgBIDXvf0GmkcMrDE= X-Received: by 2002:a05:6808:f8f:b0:3d9:2dbe:e086 with SMTP id 5614622812f47-3d92dbee509mr5212597b6e.19.1720436582556; Mon, 08 Jul 2024 04:03:02 -0700 (PDT) MIME-Version: 1.0 References: <20240708090413.888-1-justinjiang@vivo.com> In-Reply-To: <20240708090413.888-1-justinjiang@vivo.com> From: Barry Song Date: Mon, 8 Jul 2024 23:02:51 +1200 Message-ID: Subject: Re: [PATCH v5] mm: shrink skip folio mapped by an exiting process To: Zhiguo Jiang Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, opensource.kernel@vivo.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: AA5BBC0021 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: 7om4z9wnw8cozqb4yqyezax56fz5ax3e X-HE-Tag: 1720436583-678299 X-HE-Meta: U2FsdGVkX1/zbpjskFfHswYbeD6m+hrShh+1FeIddWWvcXg8/50tlTLJZRSpttjAKXMyYgHJzR8SeumVRM0YB3pE7W6o13whK3D3mQF+w3A+4uxgof2QBuEtH8sbK+Pda3WyuZ/PO1d7sUB26y1Zd0QQjUww8zeTryCqfqAKKIc15wyryeuaExBzZ/MoNJSwPAnyNznRFKvAiYsl4mZqNDZscgJOSgOF/R7m8ZXhoZgq9ewZ5JMuQSdYZd9rMMNXnZ66Tl/0t5LXzq53XirRsh+HThqzgL9OW26R/X66zZZy36kNKy6DOjEPrUXp5ReGKsVKTMq1PsmRfEa2de72pvm0NpedJmxYPzxt0amNcksk7gbuG0NDsAqwmse2rItctDHb7Xe9JNTrwDSgCPC3mIieKVk8N9LdO6lAzEgq2LNzEqLzutlfHsSpZxBiKVRbEucscG4pZqXjbkCS+HGG2yAPFhi669VibwX+rrgoQIIvygX6ienhSFC7/3oeATF7x4dLU9UNQuSq0eymQu0kDkNNbXVD91TfKhNNFRh4SFLp00HWfTOvMArNmPCC8KFZ1u8VT8QwXwt1rCSl5FY0nDmoxGJptxnVoo3a5VaHxxinvEk0zChWZW2tWBJKSmS3r/35w36sRN1qMBaVulSlnsb8F4WOSnLG+fMjCBpvTjOSQ+nyDL1YgwPZQqyy4BwGNY4kDZNwVWI90iJGJAEmf1oFqHm6kIVVIxeKgoDTn8gg17H8RCr/g6SMo+eOnTwzkp3okor3nSg2QgmIE6UJb0el5S912IgyMN9cCIh25/Azdd0bhqVbsF+zUwzTOIhYueirofEzf78keubt9U3l/sHqFRfrb/bTUVNvw1GCTYWJMRWvgPR5lZhmI24C2v6eafL7tGNC9s3D/HhE2egmdUDNaS1pscl4nEJZr7+G9DEKwmuZ2t8a/y72eEkhfoNU8HHeY72hiBtxdfEZbhJ P50T5h60 7Hem+Xb7smBwC4yjZ3L4Mn5g3JHvlKcOIe6r7GW0GV3BZqxtTEDAQHB0wUEfEQhu9qAPA90oS1ps82sYZNkOE0cP3Kzxwn5/H1XY0w8+9oUL+XzYdQaMk3ry8rbLhANhJg2yDnkwejlVdXVJy/XdTATdcJbu2Vfk74jpy4FMYpSEoK2H7KKoFSn44NDKW49rQ7AG/y+W0r2F9IiIinAwXK0MI3dkGOd5nDg10znvx2iQY0ITEKZgFFl1l2nU+gRJinQsxa5zn9o381jFggPQ+ZoEZsCdC0idMM+xjA3fiW8m40Twc4AgTKg3FWPr8tB9AW3rwh45/88S859B6UgC0LKyFuQ== 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: List-Subscribe: List-Unsubscribe: On Mon, Jul 8, 2024 at 9:04=E2=80=AFPM Zhiguo Jiang = wrote: > > The releasing process of the non-shared anonymous folio mapped solely by > an exiting process may go through two flows: 1) the anonymous folio is > firstly is swaped-out into swapspace and transformed into a swp_entry > in shrink_folio_list; 2) then the swp_entry is released in the process > exiting flow. This will increase the cpu load of releasing a non-shared > anonymous folio mapped solely by an exiting process, because the folio > go through swap-out and the releasing the swapspace and swp_entry. > > When system is low memory, it is more likely to occur, because more > backend applidatuions will be killed. > > The modification is that shrink skips the non-shared anonymous folio > solely mapped by an exting process and the folio is only released > directly in the process exiting flow, which will save swap-out time > and alleviate the load of the process exiting. > > Signed-off-by: Zhiguo Jiang > --- > > Change log: > v4->v5: > 1.Modify to skip non-shared anonymous folio only. > 2.Update comments for pra->referenced =3D -1. > v3->v4: > 1.Modify that the unshared folios mapped only in exiting task are skip. > v2->v3: > Nothing. > v1->v2: > 1.The VM_EXITING added in v1 patch is removed, because it will fail > to compile in 32-bit system. > > mm/rmap.c | 13 +++++++++++++ > mm/vmscan.c | 7 ++++++- > 2 files changed, 19 insertions(+), 1 deletion(-) > > diff --git a/mm/rmap.c b/mm/rmap.c > index 26806b49a86f..5b5281d71dbb > --- a/mm/rmap.c > +++ b/mm/rmap.c > @@ -843,6 +843,19 @@ static bool folio_referenced_one(struct folio *folio= , > int referenced =3D 0; > unsigned long start =3D address, ptes =3D 0; > > + /* > + * Skip the non-shared anonymous folio mapped solely by > + * the single exiting process, and release it directly > + * in the process exiting. > + */ > + if ((!atomic_read(&vma->vm_mm->mm_users) || > + test_bit(MMF_OOM_SKIP, &vma->vm_mm->flags)) && > + folio_test_anon(folio) && folio_test_swapbacked(folio) && > + !folio_likely_mapped_shared(folio)) { > + pra->referenced =3D -1; > + return false; > + } > + > while (page_vma_mapped_walk(&pvmw)) { > address =3D pvmw.address; As David suggested, what about the below? @@ -883,6 +870,21 @@ static bool folio_referenced_one(struct folio *folio, continue; } + /* + * Skip the non-shared anonymous folio mapped solely by + * the single exiting process, and release it directly + * in the process exiting. + */ + if ((!atomic_read(&vma->vm_mm->mm_users) || + test_bit(MMF_OOM_SKIP, &vma->vm_mm->flags)) && + folio_test_anon(folio) && folio_test_swapbacked(folio) && + !folio_likely_mapped_shared(folio)) { + pra->referenced =3D -1; + page_vma_mapped_walk_done(&pvmw); + return false; + } + if (pvmw.pte) { if (lru_gen_enabled() && pte_young(ptep_get(pvmw.pte))) { By the way, I am not convinced that using test_bit(MMF_OOM_SKIP, &vma->vm_mm->flags) is correct (I think it is wrong). For example, global_init can directly have= it: if (is_global_init(p)) { can_oom_reap =3D false; set_bit(MMF_OOM_SKIP, &mm->flags); pr_info("oom killer %d (%s) has mm pinned by %d (%s= )\n", task_pid_nr(victim), victim->comm, task_pid_nr(p), p->comm); continue; } And exit_mmap() automatically has MMF_OOM_SKIP. What is the purpose of this check? Is there a better way to determine if a process is an OOM target? What about check_stable_address_space() ? > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index 0761f91b407f..bae7a8bf6b3d > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -863,7 +863,12 @@ static enum folio_references folio_check_references(= struct folio *folio, > if (vm_flags & VM_LOCKED) > return FOLIOREF_ACTIVATE; > > - /* rmap lock contention: rotate */ > + /* > + * There are two cases to consider. > + * 1) Rmap lock contention: rotate. > + * 2) Skip the non-shared anonymous folio mapped solely by > + * the single exiting process. > + */ > if (referenced_ptes =3D=3D -1) > return FOLIOREF_KEEP; > > -- > 2.39.0 > Thanks Barry