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 D8E53C369B1 for ; Wed, 16 Apr 2025 08:24:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 20D346B01F4; Wed, 16 Apr 2025 04:24:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 198C26B01F7; Wed, 16 Apr 2025 04:24:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 010886B01F8; Wed, 16 Apr 2025 04:24:22 -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 D3AEB6B01F4 for ; Wed, 16 Apr 2025 04:24:22 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id AE2D7120360 for ; Wed, 16 Apr 2025 08:24:23 +0000 (UTC) X-FDA: 83339220006.26.7FB460A Received: from out30-124.freemail.mail.aliyun.com (out30-124.freemail.mail.aliyun.com [115.124.30.124]) by imf09.hostedemail.com (Postfix) with ESMTP id D36A3140002 for ; Wed, 16 Apr 2025 08:24:20 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="j1/61neX"; spf=pass (imf09.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.124 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1744791861; 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:dkim-signature; bh=rIlcDIRMM6cPiAZjOOcgdre2kZc+na6UyPKA4wPJ4FI=; b=XPAHiDSxM7ir6ibOLA4YyJwCLgeR5apDPYbz3Gh3pBZQ/2Csn7YTxNnhvpXTt1FK9Vjfeu 5DkDRW0ZJ+F8fnKW5FuvYfqU3Zffeds+lRdqz/CoMV069Jmpjx4R/Cg87gVOIz3C7/9THQ y/zVbloTWR/0EbecYdK1QzV2ruAGQhs= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="j1/61neX"; spf=pass (imf09.hostedemail.com: domain of baolin.wang@linux.alibaba.com designates 115.124.30.124 as permitted sender) smtp.mailfrom=baolin.wang@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1744791861; a=rsa-sha256; cv=none; b=fTiIsAL7NRZQxOXh6Igr2OnlQefJC25EHeilQNKm4QH4E7CRrpAkaoUSjmsBCnXusAfErd Mmegd2HU93Rc9nf93H722aYq6oKQ5NtTWqXYQnApINitLqwLB9esNyBOYUvTW4ZUHVzvIG hEVz5u9N1zg6bJX4Tprvvg21ozEnhdY= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1744791857; h=Message-ID:Date:MIME-Version:Subject:To:From:Content-Type; bh=rIlcDIRMM6cPiAZjOOcgdre2kZc+na6UyPKA4wPJ4FI=; b=j1/61neXgcCK8DO2DW8+Hm+AoWLJ2URTl2kV9zs9rk1nvnXZ2yZeN1b7rz5mYPoT3uOHMCDGkGlDMUyNgI6bSjDbMRQOl/glkCSL0eeH8ykwBTOajGpB2IRkTdVXlQWZ5tYSKAJ10N8J9U1f+U0mjyFdn7utHnEQaohEcCw2qb8= Received: from 30.74.144.124(mailfrom:baolin.wang@linux.alibaba.com fp:SMTPD_---0WX8Rb9w_1744791856 cluster:ay36) by smtp.aliyun-inc.com; Wed, 16 Apr 2025 16:24:16 +0800 Message-ID: <76e951ec-5043-4e89-8a5f-efdeaec4bb81@linux.alibaba.com> Date: Wed, 16 Apr 2025 16:24:15 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH] mm: don't promote exclusive file folios of dying processes To: Barry Song <21cnbao@gmail.com>, Zi Yan , Tangquan Zheng Cc: akpm@linux-foundation.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Barry Song , David Hildenbrand , Johannes Weiner , Matthew Wilcox , Oscar Salvador , Ryan Roberts References: <20250412085852.48524-1-21cnbao@gmail.com> From: Baolin Wang In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: D36A3140002 X-Stat-Signature: 1qb44knih7abdnao5gr3xwunz6t3gfzq X-HE-Tag: 1744791860-233515 X-HE-Meta: U2FsdGVkX18n2WZBvkQUe1C/6EUZ7mO2G1rjWdbZ2rs7o0JhHcT0e6er22v66dt4Dxcr3jJlbs5vultdPrIvVK3n2DHWYj2P/y6Fo7YqnsaHp27dj8WjXbLrNuibtfZEEbDQ2ili/i2WE40HBPf/kqaRGOhVZDMvI3nWnQak2dTW7dXLMpopMYyQrS8Q90uD1OWFGTJd+wPh83zzmHXNka1MM9PV34ZnWs79QeacO4H2dV/ivJTuioOa5MTt+wBCquGoB4Yw3xoNvJ6a0w9SgEu2GpaD4jlNmb55siCAGi2NcaQwvKEY3IMYJHjV/+VTEVaPt33EXxxQkz8r/ORLRZgpBKIComKXmecIxut1SIWfkwRnV39Ff8idVWeZ7IEw3a8ZVb7L9odF+adPSuJTeQ8OEM53Z/E1o4NuYtW5N7OCtyH2w0jCvaFb7n2EsI3SrKmFTT5D4cIiFoYTku99FqS8SzSklzPF04lebqUYisCEcJ2qtF/aH7aDDPs2t+mZc1rj1XAIO2Jgj0nhmiuzhyhpqTuAl4Pn68xrr/TvRih0/cxErWkOL89b2sUdevshB7jebxMrcKO8qQaof0os/LdRRCxmvFUwQ5WOk48oSiTguXblhrBU/NdJD5eXAlLpdn8HlXcqDtK0BQ8acNS8qE8k/qjSFfvKgJDVgcKdNaO7YLDOIT8tPV4xtypHDPgIzniWbDRqkiI5SAQgU9xflWCcGcq3PBiek3gTek0NEevdMPXF4LS2laRCBzpzNyuwkJGZ0qobb1KYsOyhm0R/ZWLdMfhrIGyTtovtX98+KCEhstzcWOSB+duoEs4U83Dwz6KeXmm/sZ8oG6825/HKV3N4eS38HAYglIbsM7zJQ84N+OZy4sc0sJ/7eEBHMYMwPMVH2StyJfQV47idTcXRFD7Oo1OyZg2pgkibWca164oWVWxQrpzrg85ysmoSiMcs9X8Uf/dpUs/zZgClz8k vhcXs+Cf p9zfZ4R/pemFK7MTb08b4SpMZxhaLk84pxXAnhh7ZospE3DZu9lAH9g/XeqtJxGjnocM2Mrbp2C2d0K++SRtFWZL1UjuBTHxWdlLNpX55QtAu6rgFf7V5NO++m+4UQHoEArpqOZJuD/SRR8JaaRH4hU4klzCdAxfos7OWDQL0gZ5I6qmgzINySnqGMqVq04PnNTSXhxO35/lrowG09OG/AjZkxc9vmbAmMma7VJCznddB32+S/y9Imyg+OYkUj8fE3Pn2ykxEvWMBMhfyzMMSulhk0tAOqZ3VZ2bLkNDiIcPH+dqsFUo6ReYEh6gvOMszRFSi9K2q9mmOkKEnP8WSl4mg1eO0SCyinRyuWDQcQe2sn00UXoaAJ/PkKeKCn02fUddlD8YImOT6/KAerJIQ4TorduEMxXPTbPPtbpWDDHxnC9i3ntgwDnR49Bxf618Q4fVnED2CErbSMb4gQ8kyiokdJtVvxRCBFWICFyt68gLpc0EplKpEXHxh9EenlaHy5ds3AhOMlFUVa89iMs2OWyt2z/OgUINvfWR+23KF5FAAhb8= 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 2025/4/16 15:48, Barry Song wrote: > On Sun, Apr 13, 2025 at 12:31 AM Zi Yan wrote: >> >> On 12 Apr 2025, at 4:58, Barry Song wrote: >> >>> From: Barry Song >>> >>> Promoting exclusive file folios of a dying process is unnecessary and >>> harmful. For example, while Firefox is killed and LibreOffice is >>> launched, activating Firefox's young file-backed folios makes it >>> harder to reclaim memory that LibreOffice doesn't use at all. >>> >>> An exiting process is unlikely to be restarted right away—it's >>> either terminated by the user or killed by the OOM handler. >> >> The proposal looks reasonable to me. Do you have any performance number >> about the improvement? > > Tangquan ran the test on Android phones and saw 3% improvement on > refault/thrashing things: Good. > w/o patch w/patch > workingset_refault_anon 2215933 2146602 3.13% > workingset_refault_file 9859208 9646518 2.16% > pswpin 2411086 2337790 3.04% > pswpout 6482838 6264865 3.36% > > A further demotion of exclusive file folios can improvement more, but > might be controversial. it could be a separate patch later. > >> >>> >>> Cc: Baolin Wang >>> Cc: David Hildenbrand >>> Cc: Johannes Weiner >>> Cc: Matthew Wilcox (Oracle) >>> Cc: Oscar Salvador >>> Cc: Ryan Roberts >>> Cc: Zi Yan >>> Signed-off-by: Barry Song >>> --- >>> mm/huge_memory.c | 4 ++-- >>> mm/internal.h | 19 +++++++++++++++++++ >>> mm/memory.c | 9 ++++++++- >>> 3 files changed, 29 insertions(+), 3 deletions(-) >>> >>> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >>> index e97a97586478..05b83d2fcbb6 100644 >>> --- a/mm/huge_memory.c >>> +++ b/mm/huge_memory.c >>> @@ -2264,8 +2264,8 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, >>> * Use flush_needed to indicate whether the PMD entry >>> * is present, instead of checking pmd_present() again. >>> */ >>> - if (flush_needed && pmd_young(orig_pmd) && >>> - likely(vma_has_recency(vma))) >>> + if (!exclusive_folio_of_dying_process(folio, vma) && flush_needed && Nit: I prefer to check 'flush_needed' first to make sure it is a present pte. Otherwise look good to me. >>> + pmd_young(orig_pmd) && likely(vma_has_recency(vma))) >>> folio_mark_accessed(folio); >>> } >>> >>> diff --git a/mm/internal.h b/mm/internal.h >>> index 4e0ea83aaf1c..666de96a293d 100644 >>> --- a/mm/internal.h >>> +++ b/mm/internal.h >>> @@ -11,6 +11,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> #include >>> #include >>> #include >>> @@ -130,6 +131,24 @@ static inline int folio_nr_pages_mapped(const struct folio *folio) >>> return atomic_read(&folio->_nr_pages_mapped) & FOLIO_PAGES_MAPPED; >>> } >>> >>> +/* >>> + * Return true if a folio is exclusive and belongs to an exiting or >>> + * oom-reaped process; otherwise, return false. >>> + */ >>> +static inline bool exclusive_folio_of_dying_process(struct folio *folio, >>> + struct vm_area_struct *vma) >>> +{ >>> + if (folio_maybe_mapped_shared(folio)) >>> + return false; >>> + >>> + if (!atomic_read(&vma->vm_mm->mm_users)) >>> + return true; >>> + if (check_stable_address_space(vma->vm_mm)) >>> + return true; >>> + >>> + return false; >>> +} >>> + >>> /* >>> * Retrieve the first entry of a folio based on a provided entry within the >>> * folio. We cannot rely on folio->swap as there is no guarantee that it has >>> diff --git a/mm/memory.c b/mm/memory.c >>> index b9e8443aaa86..cab69275e473 100644 >>> --- a/mm/memory.c >>> +++ b/mm/memory.c >>> @@ -1515,7 +1515,14 @@ static __always_inline void zap_present_folio_ptes(struct mmu_gather *tlb, >>> *force_flush = true; >>> } >>> } >>> - if (pte_young(ptent) && likely(vma_has_recency(vma))) >>> + >>> + /* >>> + * Skip marking exclusive file folios as accessed for processes that are >>> + * exiting or have been reaped due to OOM. This prevents unnecessary >>> + * promotion of folios that won't benefit the new process being launched. >>> + */ >>> + if (!exclusive_folio_of_dying_process(folio, vma) && pte_young(ptent) && >>> + likely(vma_has_recency(vma))) >>> folio_mark_accessed(folio); >>> rss[mm_counter(folio)] -= nr; >>> } else { >>> -- >>> 2.39.3 (Apple Git-146) >> >> >> -- >> Best Regards, >> Yan, Zi > > Thanks > Barry